package dom4j_read; import java.io.File; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用dom4j获取xml的文本信息 * * @author mzy * */ public class Demo04 { public static void main(String[] args) throws Exception { SAXReader reader = new SAXReader(); Document doc = reader.read(new File("./src/contact.xml")); /** * 读取文本: 注意:获取文本,首先要获取文本所在的标签对象 */ // 1.1 拿到所在标签上的文本内容 // method_1:通过根标签获得子标签的子标签,再获得当前标签的文本内容 Element nameElem = doc.getRootElement().element("contact").element("name"); String content = nameElem.getText(); System.out.println(content); // method_2:通过父标签获取指定子标签的文本内容。 Element conElem = doc.getRootElement().element("contact"); content = conElem.elementText("gender"); System.out.println(content); /* * 通过以上的getText获取文本内容出现一个问题? 如果我们的当前标签是最内层标签,那么肯定有文本内容; * 但是如果我们getText的标签不是最内层标签呢?例如一个 外层标签,类似:contact,那么它的内容是什么呢? */ Element elem = doc.getRootElement().element("contact"); String text = elem.getText(); System.out.println("-----------------"); System.out.println(text); System.out.println("-----------------"); /* * 输出结果如下: * ----------------- * * * * * * * * ----------------- * 注意: * contact内层装的是标签,但是并 * 不代表其中没有内容; * 在xml文件中,空格和换行会作为 * xml的内容被解析(读取)。 * xml中的换行和java代码中的换行不同, * java代码中的换行是没得意义的,只是 * 为了代码美观;xml中的换行和空格是有 * 意义的。 */ } }
xml结构如下:
<?xml version="1.0" encoding="gbk"?> <contact-list> <contact id="001" name="eric"> <name>张三</name> <gender>男</gender> <phone>134001114</phone> <email>[email protected]</email> <address>成都</address> </contact> <contact id="002"> <name>李四</name> <gender>男</gender> <phone>134001115</phone> <email>[email protected]</email> <address>广州</address> </contact> <contact id="003"> <name>王五</name> <gender>男</gender> <phone>134001116</phone> <email>[email protected]</email> <address>上海</address> </contact> </contact-list>