使用Dom4j 首先应该在工程包添加一个Jar包文件:dom4j-1.6.1.jar
然后创建XML读取器对象加载DOM树模型,具体代码如下:
//1.创建XML读取器对象
SAXReader reader = new SAXReader();
//2.从类路径下面加载xml文件
InputStream in = XpathTest.class.getResourceAsStream("/cn/mytest/xpath/persom.xml");
// 3.读取xml文档,构建成Dom模型
Document document = reader.read(in);
二.使用Xpath读取Dom树中的元素,这时需要在Java工程包中添加应外一个Jar包文件:jaxen-1.1-beta-6.jar ,这个文件在dom4j的lib目录下.
否则会出现NoClassDefFoundError. 具体代码如下:
//4.用xpath的方式去查找节点,返回节点列表,selectNodes()方法中的参数为
List <Node> nodeslist = document.selectNodes("//person[@id='003']");
for (Node n : nodeslist)
{
System.out.println(n);
}
//5.如果确定XML文档中只有一个节点的时候,就用selectSingleNode();
Node node= document.selectSingleNode("//person[@id='003']");
System.out.println(node);
三.具体案例
<?xmlversion="1.0"encoding="utf-8"?>
<学生列表>
<学生学号="001">
<姓名>郭靖</姓名>
<密码>123</密码>
<性别>男</性别>
<年龄>30</年龄>
<师傅>江南七怪</师傅>
</学生>
<学生学号="002">
<姓名帮派="丐帮">黄蓉</姓名>
<密码>456</密码>
<性别>女</性别>
<年龄>20</年龄>
</学生>
</学生列表>
1)查找所有学生的姓名
@Test
publicvoid test1()throws Exception{
SAXReader reader = new SAXReader();
Document doc = reader.read("src/student.xml");
List<Element> eList = doc.selectNodes("/学生列表/学生/姓名");
for(Element e:eList){
System.out.println(e.getText());
}
}
2)查找姓名为“郭靖”、密码为“123”的学生
@Test
publicvoid test2()throws Exception{
SAXReader reader = new SAXReader();
Document doc = reader.read("src/student.xml");
Element student = (Element)doc.selectSingleNode("/学生列表/学生[姓名='郭靖' and 密码='123']");
if(student!=null){
System.out.println("登陆成功");
}else{
System.out.println("姓名或密码错误");
}
}