Xpath:
XML PATH Language。
可以实现快速查询。
XPATH包含
XPath 使用路径表达式在 XML 文档中进行导航 。
XPath 包含一个标准函数库
准备Xpath的包:jaxen.jar
Xpath通过以下方法使用
dom.selectNodes – 返回一个 List对像
dom.selectSingleNode – 返回一个Node对像
XPath示例:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<contacts>
<user name="Jack" pwd="1234">
<contact id="707dede609dd4a2990f7cfa4cd5233f9">
<name>xiaoming</name>
<sex>male</sex>
<tel>123456</tel>
<fild>
<name>123</name>
<sex>12</sex>
<tel>12</tel>
</fild>
</contact>
<contact id="80983802eaa6402d8bac8bb39e71c48f">
<name>12</name>
<sex>12</sex>
<tel>12</tel>
</contact>
<contact id="4d30286e8805454bb38fb759a4f6db07">
<name>rose</name>
<sex>male</sex>
<tel>123</tel>
</contact>
</user>
<user name="Rose" pwd="4321">
<contact id="eedb795b97194c3aaa9bacda7e2948e9">
<name>xiaoming</name>
<sex>female</sex>
<tel>123</tel>
</contact>
</user>
</contacts>
import java.util.List;
import java.util.Scanner;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
public class dom4jParse {
//基本套路:1,document.selectNodes( xpath路径 );//"//foo/bar"
// 2, document.selectSingleNode( "//foo/bar/author" );//"//foo/bar/author":xpath路径
//快速定位
@Test
public void SelectDemo() throws Exception{
SAXReader reader=new SAXReader();
Document dom=reader.read("./xml/users.xml");
// List<Element> list=dom.selectNodes("//name");//所有name元素,无论处于哪一层
//输出:xiaoming,123,12,rose,xiaoming,name
// List<Element> list=dom.selectNodes("//contact//name");//所有contact下的name结点,无论处于contact下哪一层
//输出:xiaoming,123,12,rose,xiaoming
List<Element> list=dom.selectNodes("//contact/name");//contact下的直接节点name
//输出:xiaoming,12,rose,xiaoming
for(Element e:list){
System.out.println(e.getText());
}
}
@Test
public void SelectDemo2() throws Exception{
SAXReader reader=new SAXReader();
Scanner sc=new Scanner(System.in);
System.out.println("name");
String name=sc.nextLine();
System.out.println("pwd");
String pwd=sc.nextLine();
//不区分大小写1
name=name.toLowerCase();
pwd=pwd.toLowerCase();
String xpath="//user[@name='"+name+"'][@pwd='"+pwd+"']";
//不区分大小写2
// String xpath="//user[fn:lower-case(@name)='"+name+"'][fn:lower-case(@pwd)='"+pwd+"']";
Document dom=reader.read("./xml/users.xml");
List<Element> list=dom.selectNodes(xpath);//所有name结点,无论处于哪一层
if(list.size()==0){
System.out.println("falure");
}else{
System.out.println("success");
}
}
}