关于xml学习(三)—— DOM4J解析

前端之家收集整理的这篇文章主要介绍了关于xml学习(三)—— DOM4J解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


Dom4j 是一个简单、灵活的开放源代码的库。
Dom4j 是由早期开发 JDOM 的人分离出来而后独立开发的。与 JDOM 不同的是, dom4j 使用接口和抽象基类,虽然 Dom4j API 相对要复杂一些,但它提供了比 JDOM 更好的灵活性。
使用 Dom4j 开发,需下载 dom4j 相应的 jar 文件


Document对象:

DOM4j 中,获得 Document 对象的方式有三种:
1. 读取 XML 文件 , 获得 document 对象

SAXReader reader = newSAXReader();
Document document = reader.read(new File("input.xml"));

2.解析XML形式的文本,得到document对象

String text = "<members></members>";
Document document =DocumentHelper.parseText(text);

3.主动创建document对象.

Documentdocument = DocumentHelper.createDocument();
//创建根节点

Element root = document.addElement("members");

实例:



节点对象:

1. 获取文档的根节点 .

Element root =document.getRootElement();

2. 取得某个节点的子节点 .

Elementelement=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();
// dosomething
}
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");
XMLWriterwriter = newXMLWriter(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的转换:

1. 将字符串转化为 XML
String text = "<members> <member>sitinspring</member></members>";

Document document =DocumentHelper.parseText(text);

2. 将文档或节点的 XML 转化为字符串 .

SAXReader reader = newSAXReader();
Document
document =reader.read(newFile("input.xml"));
Element root=
document.getRootElement();
String docXmlText=document.asXML();//把文档的XML转化为字符串

String rootXmlText=root.asXML();//把根节点转化为字符串
Element
memberElm=root.element("member");
String
memberXmlText=memberElm.asXML();//把所有member子节点转化为字符串

XPath:

XPath可用来在XML文档中对元素和属性进行遍历,简化了Dom4j查找节点的过程

注意:使用 XPath 必须导入 jaxen-1.1-beta-6.jar ,否则出现 : NoClassDefFoundError : org/ jaxen / JaxenException


查询节点:

获取所有符合条件的节点
selectNodes (String xpathExpression ) :返回 List 集合
获取符合条件的单个节点
selectSingleNode (String xpathExpression ) 返回一个 Node 对象。 如果符合条件的节点有多个,那么返回第一个
设置命名空间
reader.getDocumentFactory () . setXPathNamespaceURIs ( Map)
key :别名(与 schema 中可以不同,默认也需要起名)
value :命名空间的 URL
rootElement.elementByID (“b001”);XML 文档中 ID 属性必须大写

实例:

XPathTest.java:

  1. <span style="font-size:14px;">package com.example.dom4j;
  2.  
  3. import org.dom4j.Document;
  4. import org.dom4j.DocumentException;
  5. import org.dom4j.Node;
  6. import org.dom4j.io.SAXReader;
  7.  
  8. public class XPathTest {
  9. public static void main(String[] args) throws Exception {
  10. // 获取解析流
  11. SAXReader reader = new SAXReader();
  12. // 解析xml文件
  13. Document document = reader.read("Book.xml");
  14. // 查询id为b002的元素
  15. Node node = document.selectSingleNode("//book[@id='b002']");
  16. System.out.println(node);
  17. }
  18. }
  19. </span>

dom4jTest.java:
  1. <span style="font-size:14px;">package com.example.dom4j;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.dom4j.Document;
  7. import org.dom4j.Element;
  8. import org.dom4j.io.SAXReader;
  9.  
  10. import com.example.domain.Book;
  11.  
  12. public class dom4jTest {
  13. public static void main(String[] args) throws Exception {
  14. // 需要list存放所有的book对象
  15. List allBook = new ArrayList();
  16.  
  17. // 获取解析流
  18. SAXReader reader = new SAXReader();
  19. // 解析xml文件
  20. Document document = reader.read("book.xml");
  21. // 获取根元素
  22. Element rootElement = document.getRootElement();
  23. // 获取所有的书籍
  24. List bookList = rootElement.elements();
  25. for (int e = 0; e < bookList.size(); e++) {
  26. Book book = new Book();
  27. // 获取每一本书
  28. Element bookElement = (Element) bookList.get(e);
  29. String id = bookElement.attributeValue("id");
  30. book.setId(id);
  31. // 获取每本书的所有元素:title和price
  32. List childList = bookElement.elements();
  33. for (int i = 0; i < childList.size(); i++) {
  34. // 获得每一个子元素
  35. Element child = (Element) childList.get(i);
  36. // 获取子元素的文本内容
  37. String content = child.getText();
  38. // 获取title
  39. if ("title".equals(child.getName())) {
  40. book.setTitle(content);
  41. }
  42. // 获取price
  43. if ("price".equals(child.getName())) {
  44. book.setPrice(content);
  45. }
  46. }
  47. allBook.add(book);
  48. }
  49. System.out.println(allBook);
  50. }
  51. }
  52. </span>

CURDTest.java:
  1. <span style="font-size:14px;">package com.example.dom4j;
  2.  
  3. import java.io.FileOutputStream;
  4.  
  5. import org.dom4j.Attribute;
  6. import org.dom4j.Document;
  7. import org.dom4j.DocumentHelper;
  8. import org.dom4j.Element;
  9. import org.dom4j.Node;
  10. import org.dom4j.io.SAXReader;
  11. import org.dom4j.io.XMLWriter;
  12.  
  13. public class CURDTest {
  14. public static void main(String[] args) throws Exception {
  15. // 获取解析流
  16. SAXReader reader = new SAXReader();
  17. // 解析xml文件
  18. Document document = reader.read("Book.xml");
  19. //…………
  20.  
  21. // 将document另存
  22. // 创建文件保存位置
  23. FileOutputStream fos = new FileOutputStream("Book.dom4j.xml");
  24. XMLWriter writer = new XMLWriter(fos);
  25. writer.write(document);
  26. writer.close();
  27. }
  28.  
  29. private static void add() throws Exception {
  30. // 获取解析流
  31. SAXReader reader = new SAXReader();
  32. // 解析xml文件
  33. Document document = reader.read("Book.xml");
  34.  
  35. // 添加
  36. // 获得根元素
  37. Element rootElement = document.getRootElement();
  38. // 创建book元素
  39. Element newBook = DocumentHelper.createElement("book");
  40. // 创建属性
  41. Attribute newBookAttribute = DocumentHelper.createAttribute(newBook,"id","b004");
  42. // 将属性添加到newBook中
  43. newBook.add(newBookAttribute);
  44. // 创建newBook中的元素
  45. Element titleElement = DocumentHelper.createElement("title");
  46. titleElement.setText("C和指针");
  47. // 将元素添加进newBook中
  48. newBook.add(titleElement);
  49. // 将newBook添加如root中
  50. rootElement.add(newBook);
  51.  
  52. // 将document另存
  53. // 创建文件保存位置
  54. FileOutputStream fos = new FileOutputStream("Book.dom4j.xml");
  55. XMLWriter writer = new XMLWriter(fos);
  56. writer.write(document);
  57. writer.close();
  58. }
  59.  
  60. private static void delete(Document document) throws Exception {
  61. // 删除:b001
  62. Node bookNode = document.selectSingleNode("//book[@id='b001']");
  63. Node parent = bookNode.getParent();
  64. Element parentElement = (Element) parent;
  65. parentElement.remove(bookNode);
  66.  
  67. // 将document另存
  68. // 创建文件保存位置
  69. FileOutputStream fos = new FileOutputStream("Book.dom4j.xml");
  70. XMLWriter writer = new XMLWriter(fos);
  71. writer.write(document);
  72. writer.close();
  73. }
  74.  
  75. private static void update(Document document) throws Exception {
  76. // 修改:b002 title 编程思想
  77. Node bookNode = document.selectSingleNode("//book[@id='b002']");
  78. Element bookElement = (Element) bookNode;
  79. Element titleElement = bookElement.element("title");
  80. // System.out.println(titleElement.getText());
  81. titleElement.setText("编程思想");
  82.  
  83. // 将document另存
  84. // 创建文件保存位置
  85. FileOutputStream fos = new FileOutputStream("Book.dom4j.xml");
  86. XMLWriter writer = new XMLWriter(fos);
  87. writer.write(document);
  88. writer.close();
  89. }
  90.  
  91. private static void sava(Document document) throws Exception {
  92. //保存
  93. // 将document另存
  94. // 创建文件保存位置
  95. FileOutputStream fos = new FileOutputStream("Book.dom4j.xml");
  96. XMLWriter writer = new XMLWriter(fos);
  97. writer.write(document);
  98. writer.close();
  99. }
  100. }
  101. </span>

猜你在找的XML相关文章