1.项目结构
dom4j包下载地址:dom4j包下载
2.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<file-list>
<file id='001' name="sql">
<ids>001</ids>
<names>数据库原理</names>
<prices>28.5</prices>
</file>
<file id="002">
<ids>002</ids>
<names>java程序设计</names>
<prices>31.7</prices>
</file>
</file-list>
3.读取XML文件 :
相关类和方法:
SAXReader类: read():读取xml文档
节点信息:
nodeIterator(): 获取当前标签下的子节点
标签信息:
getName(): 得到标签名称
element(name); 获取当前标签下的指定名称的第一个子标签
elementIterator(name); 获取当前标签下的指定名称的所有子标签
elements(); 获取当前标签下的所有子标签
属性信息:
attributeValue(name): 获取指定属性名的属性值
attribute(name); 获取指定属性名的属性对象
attributes(): 获取所有属性对象。返回List集合
attributeIterator(): 获取所有属性对象。返回Iterator
getName():获取属性名称
getValue(): 获取属性值
文本信息:
getText(): 获取标签的文本内容
================================================
public class ReadXmlDemo1 {
/**
* @param args
* @throws DocumentException
*/
public static void main(String[] args) throws DocumentException {
// TODO Auto-generated method stub
// 1.创建SAXReader(解析器对象)
SAXReader reader = new SAXReader();
// 2.调用read方法,读取xml文件
Document document = reader.read("./src/File.xml");
System.out.println(document);
// 3.1获取根标签元素
Element root = document.getRootElement();
System.out.println(root);
// 3.2 获取标签名称
System.out.println(root.getName());
// 4.获取第一个字标签
Element fileEle = root.element("file");
System.out.println(fileEle);
// 5.获取所有子标签(根据指定的名称获取所有同名子标签)
List<Element> list = root.elements("file");
// 1)for-each循环
for (Element e : list) {
System.out.println(e);
}
// 5.2 获取所有子标签(不指定名称)
System.out.println("==全==部==子==标==签==");
List<Element> eList = root.elements();
for (Element e : eList) {
System.out.println(e);
}
System.out.println("===================");
// 6.获取标签的属性值:
String value = fileEle.attributeValue("id");
System.out.println(value);
// 7.根据属性名称获取属性对象
// 7-1.拿到标签对象
// 上文已经获得--->fileEle
// 7-2.拿到属性对象
Attribute idAttr = fileEle.attribute("id");
// 7-3.通过属性对象拿到 属性名
String idName = idAttr.getName();
// 7-4.通过属性对象拿到 属性值
String idValue = idAttr.getValue();
System.out.println(idName + "=" + idValue);
// 8.获取第一个标签的所有属性对象
List<Attribute> attrList = fileEle.attributes();
for (Attribute attr : attrList) {
System.out.print(attr.getName() + "=" + attr.getValue() + " ");
}
// 9.读取标签中包含的文本
String str1 = fileEle.getText();
System.out.println("\n==file标签的文本如下==");
System.out.println(str1);// 所得结果中会包含xml中的空格元素
System.out.println("------------------");
/**
* 读取文本: 注意: 获取文本,要先获取文本所在的标签对象
*/
// 1.1 拿到所在标签上的文本内容
Element nameElem = document.getRootElement().element("file").element("names");
String fileText = nameElem.getText();
System.out.println(fileText);
// 1.2 通过父标签获取指定子标签的文本内容
Element conElem = document.getRootElement().element("file");
fileText = conElem.elementText("prices");
System.out.println(fileText);
}
}
运行结果:
org.dom4j.tree.DefaultDocument@1c99159 [Document: name ./src/File.xml]
org.dom4j.tree.DefaultElement@65a77f [Element: <file-list attributes: []/>]
file-list
org.dom4j.tree.DefaultElement@1d7ad1c [Element: <file attributes: [org.dom4j.tree.DefaultAttribute@a61164 [Attribute: name id value "001"], org.dom4j.tree.DefaultAttribute@bfc8e0 [Attribute: name name value "sql"]]/>]
org.dom4j.tree.DefaultElement@1d7ad1c [Element: <file attributes: [org.dom4j.tree.DefaultAttribute@a61164 [Attribute: name id value "001"], org.dom4j.tree.DefaultAttribute@bfc8e0 [Attribute: name name value "sql"]]/>]
org.dom4j.tree.DefaultElement@18fd984 [Element: <file attributes: [org.dom4j.tree.DefaultAttribute@111a775 [Attribute: name id value "002"]]/>]
==全==部==子==标==签==
org.dom4j.tree.DefaultElement@1d7ad1c [Element: <file attributes: [org.dom4j.tree.DefaultAttribute@a61164 [Attribute: name id value "001"], org.dom4j.tree.DefaultAttribute@bfc8e0 [Attribute: name name value "sql"]]/>]
org.dom4j.tree.DefaultElement@18fd984 [Element: <file attributes: [org.dom4j.tree.DefaultAttribute@111a775 [Attribute: name id value "002"]]/>]
===================
001
id=001
id=001 name=sql
==file标签的文本如下==
------------------
数据库原理
28.5