首先给出一段XML格式文本信息:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
表达式 描述
节点名 选择所有该名称的节点集
/ 选择根节点
// 选择当前节点下的所有节点
. 选择当前节点
.. 选择父节点
@ 选择属性
示例
表达式 描述
bookstore 选择所有bookstore子节点
/bookstore 选择根节点bookstore
bookstore/book 在bookstore的子节点中选择所有名为book的节点
//book 选择xml文档中所有名为book的节点
bookstore//book 选择节点bookstore下的所有名为book为节点
//@lang 选择所有名为lang的属性
断言
在方括号中[],用来更进一步定位选择的元素
表达式 描述
/bookstore/book[1] 选择根元素bookstore的book子元素中的第一个(注意: IE5以上浏览器中第一个元素是0)
/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个
/bookstore/book[last()-1] 选择根元素bookstore的book子元素中的最后第二个
/bookstore/book[position()<3] 选择根元素bookstore的book子元素中的前两个
//title[@lang] 选择所有拥有属性lang的titile元素
//title[@lang='eng'] 选择所有属性值lang为eng的title元素
/bookstore/book[price>35.00] 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的
/bookstore/book[price>35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素
选择位置的节点
通配符 描述
* 匹配所有元素
@* 匹配所有属性节点
node() 匹配任何类型的节点
示例
表达式 描述
/bookstore/* 选择根元素bookstore的下的所有子元素
//* 选择文档中所有元素
//title[@*] 选择所有拥有属性的title元素
使用操作符“|”组合选择符合多个path的表达式
package com.softeem;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class TestXml {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
Document document;
try {
document = reader.read(new File("F://eclipse//workspace//Test-Driven//src//com//softeem//menu.xml"));
// List<Element> list = document.selectNodes("bookstore/book/property");
// for (Element e : list) {
// System.out.println(e.getName() + "=" + e.getText());
// }
// 遍历属性 属性名前面加 @
List<Element> e = document
.selectNodes("bookstore/book/property[@name='contentID']");
for (Element att : e) {
System.out.println(att.getName() + "=" + att.getText());
if("2".equals(att.getText()))
{
Element dateElement = att.getParent().addElement("url");
dateElement.setText("/uri");
dateElement.addAttribute("name", "sitinspring");
}
}
List<Attribute> listAtt = document
.selectNodes("bookstore/book/property/@name");
for (Attribute att : listAtt) {
System.out.println(att.getName() + "=" + att.getText());
}
try{
/** 将document中的内容写入文件中 */
XMLWriter writer = new XMLWriter(new FileWriter(new File("F://eclipse//workspace//Test-Driven//src//com//softeem//menu.xml")));
writer.write(document);
writer.close();
}catch(Exception ex){
ex.printStackTrace();
}
} catch (DocumentException e1) {
e1.printStackTrace();
}
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
表达式 描述
节点名 选择所有该名称的节点集
/ 选择根节点
// 选择当前节点下的所有节点
. 选择当前节点
.. 选择父节点
@ 选择属性
示例
表达式 描述
bookstore 选择所有bookstore子节点
/bookstore 选择根节点bookstore
bookstore/book 在bookstore的子节点中选择所有名为book的节点
//book 选择xml文档中所有名为book的节点
bookstore//book 选择节点bookstore下的所有名为book为节点
//@lang 选择所有名为lang的属性
断言
在方括号中[],用来更进一步定位选择的元素
表达式 描述
/bookstore/book[1] 选择根元素bookstore的book子元素中的第一个(注意: IE5以上浏览器中第一个元素是0)
/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个
/bookstore/book[last()-1] 选择根元素bookstore的book子元素中的最后第二个
/bookstore/book[position()<3] 选择根元素bookstore的book子元素中的前两个
//title[@lang] 选择所有拥有属性lang的titile元素
//title[@lang='eng'] 选择所有属性值lang为eng的title元素
/bookstore/book[price>35.00] 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的
/bookstore/book[price>35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素
选择位置的节点
通配符 描述
* 匹配所有元素
@* 匹配所有属性节点
node() 匹配任何类型的节点
示例
表达式 描述
/bookstore/* 选择根元素bookstore的下的所有子元素
//* 选择文档中所有元素
//title[@*] 选择所有拥有属性的title元素
使用操作符“|”组合选择符合多个path的表达式
package com.softeem;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class TestXml {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
Document document;
try {
document = reader.read(new File("F://eclipse//workspace//Test-Driven//src//com//softeem//menu.xml"));
// List<Element> list = document.selectNodes("bookstore/book/property");
// for (Element e : list) {
// System.out.println(e.getName() + "=" + e.getText());
// }
// 遍历属性 属性名前面加 @
List<Element> e = document
.selectNodes("bookstore/book/property[@name='contentID']");
for (Element att : e) {
System.out.println(att.getName() + "=" + att.getText());
if("2".equals(att.getText()))
{
Element dateElement = att.getParent().addElement("url");
dateElement.setText("/uri");
dateElement.addAttribute("name", "sitinspring");
}
}
List<Attribute> listAtt = document
.selectNodes("bookstore/book/property/@name");
for (Attribute att : listAtt) {
System.out.println(att.getName() + "=" + att.getText());
}
try{
/** 将document中的内容写入文件中 */
XMLWriter writer = new XMLWriter(new FileWriter(new File("F://eclipse//workspace//Test-Driven//src//com//softeem//menu.xml")));
writer.write(document);
writer.close();
}catch(Exception ex){
ex.printStackTrace();
}
} catch (DocumentException e1) {
e1.printStackTrace();
}
}
}