XML的解析总结
XML的解析总结
1 dom4j解析xml
0 dom4j简介
使用DOM思想,读取xml文件
1 SAXReader
方法:
- read(
输入流
) 读取xml文件,返回文档对象,返回值是Document对象
2 Document
方法:
getRootElement()
获取文档的根标签,返回值是标签对象Element
3 Element
方法:
elements()
获取所有子标签,返回值子标签集合List<Eelement>
attributeValue(String 属性名)
,返回值属性值getText()
返回值标签体的文本部分
1 导入maven坐标
<dependencies>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
2 在src/resources
目录下创建demo.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="0001" className="cn.cf.demo.person">
<property name="user" value="jack">杰克</property>
<property name="user" value="rose">肉丝</property>
</bean>
<bean id="0002" className="cn.cf.demo.Admin">
<property name="user" value="admin">管理员</property>
<property name="user" value="write">怀特</property>
</bean>
</beans>
3 在src/java
目录下创建DemoDom4j.java文件
public class DemoDom4j {
public static void main(String[] args) throws DocumentException {
//根路径获取资源,转换为流
InputStream in = DemoDom4j.class.getClassLoader().getResourceAsStream("demo.xml");
System.out.println(in);
//创建SaxReader
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(in);
//获取根标签
Element rootElement = document.getRootElement();
//获取根标签下的所有子标签
List<Element> elements = rootElement.elements();
//遍历
for (Element element : elements) {
String id = element.attributeValue("id");
String className = element.attributeValue("className");
System.out.println(id+"...."+className);
//
List<Element> elements1 = element.elements();
//遍历
for (Element element1 : elements1) {
String name = element1.attributeValue("name");
String value = element1.attributeValue("value");
//获取文本
String text = element1.getText();
System.out.println(name+".."+value+".."+text);
}
}
}
/* 输出结果
java.io.BufferedInputStream@5010be6
0001....cn.cf.demo.person
user..jack..杰克
user..rose..肉丝
0002....cn.cf.demo.Admin
user..admin..管理员
user..write..怀特
*/
2 xpath查找xml
0 xpath简介
XPath 是一门在 XML 文档中查找信息的语言。
1 选取节点
表达式 | 说明 |
---|---|
nodename | 选取此节点的所有子节点 |
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 |
. | 选取当前节点 |
… | 选取当前节点 |
@ | 选取当前节点 |
2 选取未知节点
表达式 | 说明 |
---|---|
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
1 导入maven坐标
同上.
2 在src/resources
目录下创建demo2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student number="001">
<name id="rose">
<xing>肉</xing>
<ming>丝</ming>
</name>
<age>18</age>
<sex>女</sex>
</student>
<student number="002">
<name>Mary</name>
<age>28</age>
<sex>女</sex>
</student>
</students>
3 在src/java
目录下创建DemoXpath.java文件
public class DemoXpath {
public static void main(String[] args) throws DocumentException {
//获取xml对应的字节流
InputStream in = DemoXpath.class.getClassLoader().getResourceAsStream("demo2.xml");
System.out.println(in);
//创建SaxReader
SAXReader saxReader = new SAXReader();
//将流对象读到内存中,得到Document对象
Document document = saxReader.read(in);
//获取根标签
Element rootElement = document.getRootElement();
//获取所有的age
List<Node> list = rootElement.selectNodes("/students/student/age");
System.out.println(list);
//获取标签sex,xpath中常用的形式//sex
List<Node> nodes = rootElement.selectNodes("//sex");
System.out.println(nodes);
//获取第一个sex
Node node = rootElement.selectSingleNode("//sex");
System.out.println(node);
//获取第一个sex标签中的文本
Element element = (Element) rootElement.selectSingleNode("//sex");
System.out.println(element.getText());
//获取标签的name,属性id,只要有这个属性就可以获取
List<Node> nodeList = rootElement.selectNodes("//name[@id]");
System.out.println(nodeList.size());
System.out.println(nodeList);
}
}
/*
java.io.BufferedInputStream@5010be6
[org.dom4j.tree.DefaultElement@51016012 [Element: <age attributes: []/>], org.dom4j.tree.DefaultElement@29444d75 [Element: <age attributes: []/>]]
[org.dom4j.tree.DefaultElement@2d6d8735 [Element: <sex attributes: []/>], org.dom4j.tree.DefaultElement@6979e8cb [Element: <sex attributes: []/>]]
org.dom4j.tree.DefaultElement@2d6d8735 [Element: <sex attributes: []/>]
女
1
[org.dom4j.tree.DefaultElement@5b1d2887 [Element: <name attributes: [org.dom4j.tree.DefaultAttribute@3ac42916 [Attribute: name id value "rose"]]/>]]
*/