xPath

xPath教程点击打开链接

xPath引入
    问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!

xPath作用
    主要是用于快速获取所需的节点对象。
    
在dom4j中如何使用xPath技术
    1)导入xPath支持jar包(Dom4j中的一个辅助包) 。  jaxen-1.1-beta-6.jar  点击打开链接
    2)使用xpath方法
        List<Node>  selectNodes("xpath表达式");   查询多个节点对象
        Node       selectSingleNode("xpath表达式");  查询一个节点对象

xpath语法:
    /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)
    //     相对路径       表示不分任何层次结构的选择元素。
    *      通配符         表示匹配所有元素
    []      条件           表示选择什么条件下的元素
    @         属性            表示选择属性节点
    and     关系          表示条件的与关系(等价于&&)
    or        关系          表示条件的与关系(等价于||)
    text()    文本           表示选择文本内容

   
   
  1. package com.dom4j.xpath;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.util.List;
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.Node;
  8. import org.dom4j.io.OutputFormat;
  9. import org.dom4j.io.SAXReader;
  10. import org.dom4j.io.XMLWriter;
  11. import org.junit.Test;
  12. /**
  13. * Author:Liu Zhiyong(QQ:1012421396)
  14. * Version:Version_1
  15. * Date:2016年11月6日22:23:20
  16. * Desc:
  17. xPath引入
  18. 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!
  19. xPath作用
  20. 主要是用于快速获取所需的节点对象。
  21. 在dom4j中如何使用xPath技术
  22. 1)导入xPath支持jar包 。 jaxen-1.1-beta-6.jar
  23. 2)使用xpath方法
  24. List<Node> selectNodes("xpath表达式"); 查询多个节点对象
  25. Node selectSingleNode("xpath表达式"); 查询一个节点对象
  26. xpath语法:
  27. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
  28. // 相对路径 表示不分任何层次结构的选择元素。
  29. * 通配符 表示匹配所有元素
  30. [] 条件 表示选择什么条件下的元素
  31. @ 属性 表示选择属性节点
  32. and 关系 表示条件的与关系(等价于&&)
  33. or 关系 表示条件的与关系(等价于||)
  34. text() 文本 表示选择文本内容
  35. */
  36. public class Demo1 {
  37. /**
  38. * 删除id值为2的学生标签
  39. * @throws Exception
  40. */
  41. @Test
  42. public void test1() throws Exception {
  43. //创建读入对象,读取xml文档,获取Document对象
  44. Document document = new SAXReader().read(new File("./src/student.xml"));
  45. //查询到属性id为2的学生标签
  46. Element stuEle = (Element)document.selectSingleNode("//Student[@id='2']");
  47. //删除标签
  48. stuEle.detach();
  49. //写入xml文件
  50. FileOutputStream out = new FileOutputStream(new File("./src/Student4.xml"));
  51. OutputFormat format = new OutputFormat().createPrettyPrint();
  52. format.setEncoding("utf-8");
  53. XMLWriter writer = new XMLWriter(out, format);
  54. writer.write(document);
  55. //关闭资源
  56. writer.close();
  57. out.close();
  58. }
  59. @Test
  60. public void test2() throws Exception {
  61. //创建读入对象,读取xml文档,获取Document对象
  62. Document document = new SAXReader().read(new File("./src/student5.xml"));
  63. String xpath = "";
  64. /*
  65. * 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
  66. */
  67. xpath = "/Students";
  68. xpath = "/Students/Student";
  69. /*
  70. * 2. // 相对路径 表示不分任何层次结构的选择元素。
  71. */
  72. xpath = "//Student";
  73. xpath = "//Student/name";
  74. xpath = "//name";
  75. /*
  76. * 3. * 通配符 表示匹配所有元素
  77. */
  78. xpath = "/Students/*";//根标签Students下的所有子标签
  79. xpath = "/Students//*";//根标签Students下的所有标签
  80. /*
  81. * 4. [] 条件 表示选择什么条件下的元素
  82. * @ 属性 表示选择属性节点
  83. */
  84. xpath = "//Student[@id]";//获取带有id属性的Student标签
  85. xpath = "//Student[2]";//获取第二个Student标签
  86. xpath = "//Student[last()]";//获取最后一个Student标签
  87.        xpath = "//Student[id[text()='001']]";//获取所有Student标签下面id标签文本值为001的Student标签
  88. /*
  89. * 5. @ 属性 表示选择属性节点
  90. */
  91. xpath = "//@id";//获取有id属性的属性
  92. xpath = "//Student[@id]";//获取包含id属性的标签
  93. xpath = "//Student[not(@id)]";//获取不包含id属性的标签
  94. xpath = "//Student[@id='2']";//选取id属性值为2的Student标签
  95. /*
  96. * 6.
  97. and 关系 表示条件的与关系(等价于&&)
  98. or 关系 表示条件的与关系(等价于||)
  99. */
  100. //获取id属性为1,且name属性为liu的Student标签
  101. xpath = "//Student[@id='1' and @name='liu']";
  102. //获取id属性为1,或者name属性为liu的Student标签
  103. xpath = "//Student[@id='1' or @name='liu']";
  104. /*
  105. * 7. text() 文本 表示选择文本内容
  106. */
  107. xpath = "/Students/Student/name/text()";//选择name标签下的文本对象,返回Text对象
  108. xpath = "//name/text()";//选择name标签下的文本对象,返回Text对象
  109. xpath = "//name[text()='木丁西']";//选择name值为“木丁西”的标签
  110. List<Node> list = document.selectNodes(xpath);
  111. for(Node node : list){
  112. System.out.println(node);
  113. }
  114. }
  115. }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值