关于xml学习(三)—— DOM4J解析
2015-01-04 16:01
363 查看
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.删除某属性
Attributeattribute=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");
XMLWriter writer = newXMLWriter(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();
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必须导入jaxen-1.1-beta-6.jar,否则出现
:NoClassDefFoundError: org/jaxen/JaxenException
查询节点:
获取所有符合条件的节点
selectNodes(StringxpathExpression):返回List集合
获取符合条件的单个节点
selectSingleNode(StringxpathExpression)返回一个Node对象。
如果符合条件的节点有多个,那么返回第一个。
设置命名空间
reader.getDocumentFactory().setXPathNamespaceURIs(Map)
key:别名(与schema中可以不同,默认也需要起名)
value:命名空间的URL
rootElement.elementByID(“b001”);XML文档中ID属性必须大写
dom4jTest.java:
CURDTest.java:
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.删除某属性
Attributeattribute=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 = newXMLWriter(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.将字符串转化为XMLString 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(StringxpathExpression):返回List集合
获取符合条件的单个节点
selectSingleNode(StringxpathExpression)返回一个Node对象。
如果符合条件的节点有多个,那么返回第一个。
设置命名空间
reader.getDocumentFactory().setXPathNamespaceURIs(Map)
key:别名(与schema中可以不同,默认也需要起名)
value:命名空间的URL
rootElement.elementByID(“b001”);XML文档中ID属性必须大写
实例:
XPathTest.java:<span style="font-size:14px;">package com.example.dom4j; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Node; import org.dom4j.io.SAXReader; public class XPathTest { public static void main(String[] args) throws Exception { // 获取解析流 SAXReader reader = new SAXReader(); // 解析xml文件 Document document = reader.read("Book.xml"); // 查询id为b002的元素 Node node = document.selectSingleNode("//book[@id='b002']"); System.out.println(node); } } </span>
dom4jTest.java:
<span style="font-size:14px;">package com.example.dom4j; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import com.example.domain.Book; public class dom4jTest { public static void main(String[] args) throws Exception { // 需要list存放所有的book对象 List allBook = new ArrayList(); // 获取解析流 SAXReader reader = new SAXReader(); // 解析xml文件 Document document = reader.read("book.xml"); // 获取根元素 Element rootElement = document.getRootElement(); // 获取所有的书籍 List bookList = rootElement.elements(); for (int e = 0; e < bookList.size(); e++) { Book book = new Book(); // 获取每一本书 Element bookElement = (Element) bookList.get(e); String id = bookElement.attributeValue("id"); book.setId(id); // 获取每本书的所有元素:title和price List childList = bookElement.elements(); for (int i = 0; i < childList.size(); i++) { // 获得每一个子元素 Element child = (Element) childList.get(i); // 获取子元素的文本内容 String content = child.getText(); // 获取title if ("title".equals(child.getName())) { book.setTitle(content); } // 获取price if ("price".equals(child.getName())) { book.setPrice(content); } } allBook.add(book); } System.out.println(allBook); } } </span>
CURDTest.java:
<span style="font-size:14px;">package com.example.dom4j; import java.io.FileOutputStream; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class CURDTest { public static void main(String[] args) throws Exception { // 获取解析流 SAXReader reader = new SAXReader(); // 解析xml文件 Document document = reader.read("Book.xml"); //………… // 将document另存 // 创建文件保存位置 FileOutputStream fos = new FileOutputStream("Book.dom4j.xml"); XMLWriter writer = new XMLWriter(fos); writer.write(document); writer.close(); } private static void add() throws Exception { // 获取解析流 SAXReader reader = new SAXReader(); // 解析xml文件 Document document = reader.read("Book.xml"); // 添加: // 获得根元素 Element rootElement = document.getRootElement(); // 创建book元素 Element newBook = DocumentHelper.createElement("book"); // 创建属性 Attribute newBookAttribute = DocumentHelper.createAttribute(newBook, "id", "b004"); // 将属性添加到newBook中 newBook.add(newBookAttribute); // 创建newBook中的元素 Element titleElement = DocumentHelper.createElement("title"); titleElement.setText("C和指针"); // 将元素添加进newBook中 newBook.add(titleElement); // 将newBook添加如root中 rootElement.add(newBook); // 将document另存 // 创建文件保存位置 FileOutputStream fos = new FileOutputStream("Book.dom4j.xml"); XMLWriter writer = new XMLWriter(fos); writer.write(document); writer.close(); } private static void delete(Document document) throws Exception { // 删除:b001 Node bookNode = document.selectSingleNode("//book[@id='b001']"); Node parent = bookNode.getParent(); Element parentElement = (Element) parent; parentElement.remove(bookNode); // 将document另存 // 创建文件保存位置 FileOutputStream fos = new FileOutputStream("Book.dom4j.xml"); XMLWriter writer = new XMLWriter(fos); writer.write(document); writer.close(); } private static void update(Document document) throws Exception { // 修改:b002 title 编程思想 Node bookNode = document.selectSingleNode("//book[@id='b002']"); Element bookElement = (Element) bookNode; Element titleElement = bookElement.element("title"); // System.out.println(titleElement.getText()); titleElement.setText("编程思想"); // 将document另存 // 创建文件保存位置 FileOutputStream fos = new FileOutputStream("Book.dom4j.xml"); XMLWriter writer = new XMLWriter(fos); writer.write(document); writer.close(); } private static void sava(Document document) throws Exception { //保存 // 将document另存 // 创建文件保存位置 FileOutputStream fos = new FileOutputStream("Book.dom4j.xml"); XMLWriter writer = new XMLWriter(fos); writer.write(document); writer.close(); } } </span>
相关文章推荐
- Java学习之路——用dom4j解析xml
- java xml解析 学习笔记(4)——DOM4J
- xml(Dom4J)解析原理及代码--Dom4J学习小计
- DOM4J学习笔记 --- Java简单解析XML数据
- dom4j(XML解析)私人学习笔记
- Dom4j解析XML学习代码
- java学习笔记:使用dom4j解析xml
- XML学习笔记 -- day03 Dom4J解析xml详解
- [学习笔记]XML解析之DOM4J
- xml、dtd、SAX解析、DOM解析、DOM4J解析学习
- Dom4j解析XML学习之简单解析
- [学习笔记]XML解析之DOM4J
- XML学习笔记(五):使用 jdom和dom4j 解析XML
- XML学习总结-xml概念和dom4j解析技术-(一)
- Java学习之路——用dom4j解析xml
- Dom4j解析XML学习之利用解析的数据进行JDBC操作
- XML解析-学习Pull和DOM4J的使用
- 关于Pull解析xml的学习
- xml、dtd、SAX解析、DOM解析、DOM4J解析学习(一)
- 关于DOM4J 解析和生成XML小Demo