XML文件:
<?xml version="1.0" encoding="utf8"?>
<bookstore>
<book>
<title lang="USA">Harry Potter1</title>
<author>J K. Rowling1</author>
<year>20051</year>
<price>1000</price>
</book>
<book>
<title lang="cn">Harry Potter2</title>
<author>J K. Rowling2</author>
<year>20052</year>
<price>29.992</price>
</book>
<book>
<title lang="zn">Harry Potter3</title>
<author>J K. Rowling3</author>
<year>20053</year>
<price>29.993</price>
</book>
</bookstore>
java代码:
package xpath;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class XPath {
private Document document;
private Node node;
private static File file=null;
static{
file=new File("src/xpath/bookstore.xml");
}
@Before
public void before(){
try {
document=new SAXReader().read(file);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test1(){
System.out.println(document);
}
/**
* 获取根节点
*/
@Test
public void test2(){
List<Node> nodes = document.selectNodes("/bookstore");
System.out.println(nodes);
}
/**
* 选取 bookstore 元素的所有子节点
*/
@Test
public void test3(){
List<Node> nodes = document.selectNodes("bookstore/book");
System.out.println(nodes);
}
/**
* 选取名为 lang 的所有属性
* 选取名为 lang='en' 的所元素
*/
@Test
public void test4(){
List<Node> nodes = document.selectNodes("//@lang");
for(Node node:nodes){
System.out.println(node.getText());
}
Node node = document.selectSingleNode("//title[@lang='en']");
System.out.println(node.getText());
}
/**
* 选取属于 bookstore 子元素的第一个 book 元素
*/
@Test
public void test5(){
List<Node> nodes = document.selectNodes("/bookstore/book[1]");
System.out.println(nodes);
}
/**
* 选取属于 bookstore 子元素的第一个 book 元素的author值
*/
@Test
public void test6(){
Node node = document.selectSingleNode("/bookstore/book[1]/author");
System.out.println(node.getText());
}
/**
* 选取属于 bookstore 子元素price 大于book 价格大于29.991的 book元素
*/
@Test
public void test7(){
List<Node> nodes = document.selectNodes("/bookstore/book[price>29.991]");
for(Node node:nodes){
System.out.println(node.selectSingleNode("author").getText());
}
}
/**
* 选取属于 bookstore 子元素的 book 价格大于29.991 元素的author值
*/
@Test
public void test8(){
List<Node> nodes = document.selectNodes("/bookstore/book[price>29.991]/author");
for(Node node:nodes){
System.out.println(node.getText());
}
}
/**
* 选取属于 bookstore 中author为J K. Rowling1的价格
*/
@Test
public void test9(){
Node node = document.selectSingleNode("/bookstore/book[author='J K. Rowling1']/price");
System.out.println(node.getText());
}
/**
* 修改属于 bookstore 中author为J K. Rowling1的价格
*/
@Test
public void test10(){
Node node = document.selectSingleNode("/bookstore/book[author='J K. Rowling1']/price");
node.setText("1000");
}
/**
* 修改属性值
*/
@Test
public void test11(){
Element element= (Element)document.selectSingleNode("//title[@lang='China']");
element.setAttributeValue("lang", "China");
//或下面这种方法
Attribute attribute = element.attribute("lang");
attribute.setValue("USA");
}
/**
* 写入
*/
@After
public void after(){
try {
FileOutputStream fos=new FileOutputStream(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf8");
XMLWriter writer=new XMLWriter(fos,format);
writer.write(document);
writer.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}