XML解析之二—— Dom4j、JAXP、JDom(含XPath)
XML解析开发包 Dom4J使用dom4j解析xml前,先要导入jar包dom4j.jar包和jaxen.jar包dom4j官网: 点击打开链接 DOM4j中,获得Document对象的方式有三种: 1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document对象. String text = "<members></members>"; Document document = DocumentHelper.parseText(text); 3.主动创建document对象. Document document = DocumentHelper.createDocument(); //创建根节点 Element root = document.addElement("members"); 节点对象 1.获取文档的根节点. Element root = document.getRootElement(); 2.取得某个节点的子节点. Element element=node.element(“书名"); 3.取得节点的文字 String text=node.getText(); 4.取得某节点下所有名为“member”的子节点,并进行遍历. List nodes = rootElm.elements("member"); } <?xml version="1.0" encoding="UTF-8"?> <books> <book 出版日期="2013-08-27" 出版社="人民出版社" 编号="b1" 页数="120" > <name>葵花宝典</name> <author>东方不败</author> <author>春哥</author> <price>18元</price> <author>林平之</author> <desc>欲练此功,必先自宫222221!!</desc> <author>曾哥</author> </book> <book 出版社="邮电出版社" 类别="武侠" 编号="b2"> <name>辟邪剑谱</name> <author>岳不群</author> <price>20元</price> <desc>欲练此功,必先自宫2222222!!</desc> </book> </books> 解析以上xml文件的代码 public class DOM4J { public static void main(String[] args) throws Exception { test7(); } /** * XPATH的写法 * @throws Exception */ private static void test7() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/persons.xml"); /*List<Node> list = document.selectNodes("/books/book"); Node node = document.selectSingleNode("//book[2]");*/ Node node = document.selectSingleNode("//person[@username='aa' and @password='aa']"); Element e = (Element) node; System.out.println(e.element("name").getText()); } /** * 遍历所有的节点 * @throws Exception */ private static void test6() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book.xml"); Element root = document.getRootElement(); list(root); } private static void list(Element root) { System.out.println(root.getName()); List<Element> list = root.elements(); for(int i=0;i<list.size();i++){ Element e = list.get(i); list(e); } } /** * 在指定的位置添加 * @throws Exception */ private static void test5() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book.xml"); Element root = document.getRootElement(); //创建一个元素 Element author = DocumentHelper.createElement("author"); author.setText("春哥"); //在第一本书的第一个作者之前 添加一个作者 春哥 List<Element> list = root.element("book").elements(); list.add(2,author); //回写XML OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"),format); writer.write(document); writer.close(); } /** * 删除某个节点:删除第一本书的第四个作者 * @throws Exception */ public static void test4() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("src/book.xml"); Element root = document.getRootElement(); Element author = (Element) root.element("book").elements("author").get(3); //删除的话 author.getParent().remove(author); //回写XML OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"),format); writer.write(document); writer.close(); } /** * 修改某个节点:修改第一本书中的售价 18元 * @throws Exception */ private static void test3() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book.xml"); Element root = document.getRootElement(); root.element("book").element("price").setText("18元"); //回写XML OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"),format); writer.write(document); writer.close(); } /** * 使用dom4j添加一个节点:在第一本书上添加一个作者 * @throws Exception */ private static void test2() throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read("src/book.xml"); Element root = document.getRootElement(); //找到第一本书 root.element("book").addElement("author").setText("春哥"); //回写XML OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"),format); writer.write(document); writer.close(); } /** * 使用dom4j查找某个节点 * @throws Exception */ private static void test1() throws Exception { //创建一个解析器 SAXReader reader = new SAXReader(); //解析XML文档 Document document = reader.read("src/book.xml"); //获得跟节点 Element root = document.getRootElement(); /* //获得所有的书节点 List<Element> list = root.elements("book"); Element book1 = list.get(0);//获得第一本书 */ //获得第一本书 Element book = root.element("book"); List<Element> list = book.elements("author"); Element author = list.get(0); String value = author.getText();//获得作者中的内容 System.out.println(value); Element author1 = (Element) root.element("book").elements("author").get(0); System.out.println(author1.getText()); } }说明:test7使用的XPath方式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |