java编程之xpath介绍

2025-05-29 0 102

一、使用dom4j支持XPATH的操作

—可以直接获取到某个元素,而不用一层一层的解析获取

XPATH如何使用:

第一种形式:/AAA/BBB/CCC,一个/代表一层,表示获取到AAA下面的BBB下面的CCC

第二种形式://BBB,表示和这个名称相同的都可以得到,只要名称是BBB都可以得到。//DDD/BBB:得到所有DDD下面的所有的BBB

第三种形式:/AAA/BBB/CCC/*,得到所有AAA下面BBB下面CCC下面的所有的元素。/*/*/*/BBB,表示限制前三层,前三层无论是什么名称都可以得到其下面的所有的BBB。//*,得到所有的元素。

第四种形式:/AAA/BBB[1],AAA下面的第一个BBB。/AAA/BBB[last()],表示得到AAA下面的最后一个BBB

第五种形式://@id,表示只要标签上有id属性都可以得到,得到所有有id属性的//BBB[@id],只要你BBB上有id属性都可以得到,得到有id属性的BBB

第六种形式://BBB[@id='b1'],得到含有属性id且值为b1的所有BBB

二、使用xpath

默认情况下,dom4j不支持xpath

要想支持需要导入jar包,jaxen-1.1-beta-6.jar

有两个方法:selectNodes(“xpath标签表达式”);获得所有的元素,返回的是List,selectSingleNode(“xpath标签表达式”);获得一个元素,返回的是Node

1、查询xml中的所有name元素的值

步骤:获取document,使用方法selectNodes(“xpath标签表达式”);

?

1

2

3

4

5

6

7

8

9

10
public static void Test1() throws Exception {

Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);

List<Node> list = document.selectNodes("//name");

for (Node node : list) {

//node是每一个元素具体的值

//得到每一个元素具体的值

String s = node.getText();

System.out.println(s);

}

}

2、查询xml中第一个name的值。步骤:先获取document,然后构建xpath表达式。

?

1

2

3

4

5

6

7
public static void Test2() throws Exception{

Document document = Dom4jUtils.getDocument(Dom4jUtils.PATH);

Node name1 = document.selectSingleNode("//p1[@id1='aaa']/name");

//得到name的值

String s1 = name1.getText();

System.out.println(s1);

}

二、案例分析

添加、删除、查询

student.xml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
<?xml version="1.0" encoding="UTF-8"?>

<student>

<stu>

<id>01</id>

<name>zhangsan</name>

<age>20</age>

</stu>

<stu>

<id>02</id>

<name>lisi</name>

<age>19</age>

</stu>

</student>

student.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
package cn.qing.ov;

public class Student {

private String id;

private String name;

private String age;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

stuService.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87
package cn.qing.service;

import java.io.FileOutputStream;

import java.io.Writer;

import java.util.List;

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 cn.qing.ov.Student;

public class StuService {

//增加

public static void addStu(Student student) throws Exception {

SAXReader saxReader = new SAXReader();

Document document = saxReader.read("src/student.xml");

Element root = document.getRootElement();

//在根节点上添加stu

Element stu = root.addElement("stu");

//在stu标签上一次添加id,name,age

Element id1 = stu.addElement("id");

Element name1 = stu.addElement("name");

Element age1 = stu.addElement("age");

//在id,name,age,上依次添加值

id1.setText(student.getId());

name1.setText(student.getName());

age1.setText(student.getAge());

//回写到xml中

OutputFormat format = OutputFormat.createPrettyPrint();

XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/student.xml"),format);

xmlWriter.write(document);

xmlWriter.close();

}

//删除,根据学生ID进行删除

/**

*

* @param id

* @throws Exception

* 1.创建解析器

* 2.获得document

* 3.获取xml中的ID,使用xpath,返回一个list集合

* 4.遍历list,判断集合里的值是否和传进来的id相同

* 5.如果相同,把id所在的stu删除

* 6.回写

*/

public static void delStu(String id) throws Exception {

SAXReader saxReader = new SAXReader();

Document document = saxReader.read("src/student.xml");

List<Node> list = document.selectNodes("//id");

for (Node node : list) {

String idv = node.getText();

//判断是否和传递的值相同

if(idv.equals(id)) {

//得到stu的节点

Element stu = node.getParent();

//删除是通过父节点进行删除

Element student = stu.getParent();

student.remove(stu);

}

}

OutputFormat format =OutputFormat.createPrettyPrint();

XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/student.xml"),format);

xmlWriter.write(document);

xmlWriter.close();

}

//查询

public static Student selStu(String id) throws Exception {

SAXReader saxReader = new SAXReader();

Document document = saxReader.read("src/student.xml");

List<Node> list = document.selectNodes("//id");

Student student = new Student();

for (Node node : list) {

//node 是每一个id的值

String idv = node.getText();

if(idv.equals(id)) {

Element stu = node.getParent();

String namev = stu.element("name").getText();

String agev = stu.element("age").getText();

student.setId(idv);

student.setName(namev);

student.setAge(agev);

}

}

return student;

}

}

测试Test.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
package cn.qing.test;

import cn.qing.ov.Student;

import cn.qing.service.StuService;

public class Test {

public static void main(String[] args) throws Exception {

//testAdd();

//testDel();

testSel();

}

//测试添加方法

public static void testAdd() throws Exception {

//创建student对象

Student stu = new Student();

stu.setId("03");

stu.setName("wangwu");

stu.setAge("18");

StuService.addStu(stu);

}

//测试删除方法

public static void testDel() throws Exception {

StuService.delStu("03");

}

//测试查询方法

public static void testSel() throws Exception {

Student student = StuService.selStu("02");

System.out.println(student.toString());

}

}

对于每一种类型,可以为其设置在不同的包,编程的思想

总结

以上就是本文关于java编程之xpath介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/ilikejj0/article/details/78817541

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java编程之xpath介绍 https://www.kuaiidc.com/113267.html

相关文章

发表评论
暂无评论