XML解析开发包
Dom4J:是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用)
JAXP(Java API for XML Processing):是SUN公司推出的解析标准实现。
JDom:是开源组织推出的解析开发包。
Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
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");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
5.对某节点下的所有子节点进行遍历.
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}
6.在某节点下添加子节点.
Element ageElm = newMemberElm.addElement("age");
7.设置节点文字.
element.setText("29");
8.删除某节点.
//childElm是待删除的节点,parentElm是其父节点
parentElm.remove(childElm);
9.添加一个CDATA节点.
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
节点对象属性
1.取得某节点下的某属性
Element root=document.getRootElement();
//属性名name
Attribute attribute=root.attribute("size");
2.取得属性的文字
String text=attribute.getText();
3.删除某属性
Attribute attribute=root.attribute("size");
root.remove(attribute);
3.遍历某节点的所有属性
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
4.设置某节点的属性和文字.
newMemberElm.addAttribute("name","sitinspring");
5.设置属性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML编码
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
Dom4j在指定位置插入节点
1.得到插入位置的节点列表(list)
2.调用list.add(index,elemnent),由index决定element的插入位置。
Element元素可以通过DocumentHelper对象得到。示例代码:
Element aaa = DocumentHelper.createElement("aaa");
aaa.setText("aaa");
List list = root.element("书").elements();
list.add(1,aaa);
//更新document
例子:
<?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>欲练此功,必先自宫111111!!</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方式 原文链接:https://www.f2er.com/xml/299822.html