完全混淆了Xpath Axes

时间:2018-04-22 12:49:31

标签: xpath

直到现在我所理解的是

  1. ::child查找当前节点的直接子注释
  2. ::following查找当前节点的直接子节点和子节点等。
  3. 那么::descendant是什么?
  4. 有人能用简单的例子帮助我理解吗?

4 个答案:

答案 0 :(得分:4)

  • child::将选择上下文节点的直接后代,但不会更深入,例如descendant::
  • following::将选择在上下文节点及其后代之后的所有节点,但不包括上下文节点的后代。
  • descendant::将选择child::轴上的所有节点,以及他们的孩子和他们孩子的孩子等。

有时候,一张图片胜过千言万语:

visualization of XPath axes

Image source, see Figure 3.5

使用XPath可视化工具可能会有所帮助,以便针对某些示例XML评估XPath表达式,并查看选择的内容和内容。

例如: http://chris.photobooks.com/xml

答案 1 :(得分:1)

假设每个节点为框。现在在一个html页面中,我们有很多盒子,每个盒子里还有其他小盒子。

现在我们说: child :: of box - 这意味着我们正在查看主盒内的所有盒子。这只会考虑当前框内的框。它不会查看方框的内容。

以下::一个方框 - 这意味着我正在查看的方框后面的所有方框,这与我正在查看的当前方框没有任何关系。

后代:它就像孩子一样,但是它是 - 它看起来是节点框内的所有框,也看到了每个子框的内部。孩子只会寻找不在每个直接盒子内的直接盒子。

答案 2 :(得分:1)

XPath Axis Family Tree Analogy

主要的XPath轴遵循族树术语:

  • self::是你。

<强>向下:

  • child::是你的直系孩子。
  • descendant::是你的孩子,他们的孩子,递归。
  • descendant-or-self::(又名//):你和你的后代。

<强>向上:

  • parent::是你的母亲父亲。 1
  • ancestor::是您的父母,父母的父母是递归的。
  • ancestor-or-self::是你和你的祖先。

横向(考虑文档中较早的元素):

  • previous-sibling::是你年幼的兄弟姐妹。
  • following-sibling::是您的兄弟姐妹,按年龄顺序排列。
  • previous::是你年幼的兄弟姐妹和他们的后代,按年龄顺序排列。
  • following::是您的兄弟姐妹及其后代,按年龄顺序排列。

<子>    1 不是两者,因为XML元素只有一个父元素。

答案 3 :(得分:0)

XPath Axes

  • 我们将针对以下 HTML
  • 讨论以下术语

<?xml version="1.0" encoding="UTF-8"?>
<head>
	<meta content="image" property="my_property">
</head>
<body>
	<bookstore>

	<book>
	  <title lang="en">Harry Potter</title>
	  <price>29.99</price>
	</book>

	<book>
	  <title lang="en">Learning XML</title>
	  <price>39.95</price>
	</book>

	</bookstore>
</body>

  • child :选择当前节点的所有子节点。例如,如果您当前的节点为 <book> ,则关键字将同时选择两个节点:

    <title lang="en">Harry Potter</title>
    <price>29.99</price>        
    
  • 跟随:在当前节点的结束标记之后选择文档中的所有内容。例如,如果您当前的节点是 <head> ,关键字跟随将选择所有节点:

    <body>
        <bookstore>
    
        <book>
          <title lang="en">Harry Potter</title>
          <price>29.99</price>
        </book>
    
        <book>
          <title lang="en">Learning XML</title>
          <price>39.95</price>
        </book>
    
        </bookstore>
    </body>
    
  • descendant :选择当前节点的所有后代(子孙,孙子等)。例如,如果您当前的节点是 <body> ,关键字后代将选择所有节点:

    <bookstore>
    
    <book>
      <title lang="en">Harry Potter</title>
      <price>29.99</price>
    </book>
    
    <book>
      <title lang="en">Learning XML</title>
      <price>39.95</price>
    </book>
    
    </bookstore>