1 使用dom4j解析xml
*dom4j是一个组织,针对xml解析,提供解析器dom4j
*dom4j不是javase的一部分,需要导入dom4j的jar包
*得到document
SAXReader reader = new SAXReader();
Document document=reader.read(url);
*document的父接口是Node
如果在document里面找不到想要的方法,到Node中找
*document里面的方法 getRootElement():获取根节点 返回的是Element
*Element也是一个接口,父接口是Node
2 使用dom4j查询xml
查询person.xml中所有name元素的值
package cn.jaxptest; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class TestDom4j { public static void main(String[] args) throws Exception { selectName(); } private static void selectName() throws Exception { /* * 1 创建解析器 * 2 得到document * 3 得到根节点 * 4 得到P1 * 5 得到p1下面的name * 6 得到name里的值 */ SAXReader saxReader = new SAXReader(); org.dom4j.Document document = saxReader.read("src/person.xml"); Element root = document.getRootElement(); java.util.List<Element> list = root.elements("p1"); for (Element element : list) { Element name1 = element.element("name"); String s = name1.getText(); System.out.println(s); } } }
3 dom4j支持XPATH的操作
3.1 XPATH的形式
*可以直接获取某个元素
第一种形式 /表示一层
/AAA/DDD/BBB AAA下面的DDD下面的BBB
第二种形式 // 表示和名称相同
//BBB 所有名称为BBB的元素
第三种形式 /* 表示所有的元素
第四种形式[n] 表示第n个
/BBB[1] 第一个名称为BBB元素
第五种形式
//BBB[@id] 只要所有id属性的BBB
//BBB[@id='b1'] BBB上有id属性且属性值为b1
...
3.2 dom4j使用XPATH的API
*默认情况下,dom4j不支持xpath
*需要将jaxen-1.1-beta-6.jar导入到项目中
*在dom4j提供了两个方法,用来支持xpath
selectNodes("xpath表达式"):获取多个节点
selectSingleNode("xpath表达式"):获取一个节点
*使用xpath实现:查询xml中所有name元素的值
所有name元素的xpath表示://name
使用selectNodes("//name"):
package cn.jaxptest; import org.dom4j.Node; import org.dom4j.io.SAXReader; public class TestDom4j { public static void main(String[] args) throws Exception { test1(); } private static void test1() throws Exception { /* * 1 创建解析器 * 2 得到document * 3 直接使用selectNodes("//name") */ SAXReader saxReader = new SAXReader(); org.dom4j.Document document = saxReader.read("src/person.xml"); java.util.List<Node> list = document.selectNodes("//name"); // 得到所有name元素的值 for (Node node : list) { String string = node.getText(); System.out.println(string); } // 获取第一个p1下面的name元素值 Node node = document.selectSingleNode("//p1[1]/name"); String s = node.getText(); System.out.println(s); } }