Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath-组匹配作为组合结果_Xpath - Fatal编程技术网

Xpath-组匹配作为组合结果

Xpath-组匹配作为组合结果,xpath,Xpath,我遇到了以下问题,我想创建一个Xpath表达式,结果为3个匹配项,其中match1=text1text1text,match2=text2text2text2等 我能找到每一个单独的p,但我就是不能“分组”它们 表达式应该说:“在[@class=“random-a-tag”]之后,给我div[@id]所在的每个元素之前存在的所有p-tag的所有文本。” 文本1 文本1 文本1 文本2 文本2 文本2 文本3 文本3 文本3 您可以通过两个步骤完成此操作 查找所有div //a[@class="

我遇到了以下问题,我想创建一个Xpath表达式,结果为3个匹配项,其中match1=text1text1text,match2=text2text2text2等

我能找到每一个单独的p,但我就是不能“分组”它们

表达式应该说:“在[@class=“random-a-tag”]之后,给我div[@id]所在的每个元素之前存在的所有p-tag的所有文本。”


文本1

文本1

文本1

文本2

文本2

文本2

文本3

文本3

文本3


您可以通过两个步骤完成此操作

查找所有div

//a[@class="random-a-tag"]/following-sibling::div[@id]
对于每个div@id do:

//a[@class="random-a-tag"]/following-sibling::p[following-sibling::div[1][@id="3"]]/text()

您可以通过两个步骤完成此操作

查找所有div

//a[@class="random-a-tag"]/following-sibling::div[@id]
对于每个div@id do:

//a[@class="random-a-tag"]/following-sibling::p[following-sibling::div[1][@id="3"]]/text()

这不能通过单个XPath 1.0表达式来完成

对于给定的
@id
,您最多可以选择
p

      /*/a/following-sibling::div
        [@id=$pId]
           /preceding-sibling::p
             [count(.
                   |
                    /*/a/following-sibling::div
                                  [@id=$pId]
                                    /preceding-sibling::div[1]
                                       /preceding-sibling::p
                    )
            =
              count(/*/a/following-sibling::div
                                  [@id=$pId]
                                    /preceding-sibling::div[1]
                                       /preceding-sibling::p
                    )
               +1
           ]
如果
$pId
被(替换为)2,并且上述XPath表达式应用于此XML文档
(您的XML片段包装在顶部元素中,以使其成为格式良好的XML文档):

是节点集
$ns1
$ns2
的交点

II。XPath 2.0解决方案

<p>text2</p>
<p>text2</p>
<p>text2</p>
 (a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::p
except
  a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::div[1]
                       /preceding-sibling::p
  )/string()
text2 text2 text2
当对同一XML文档(如上)计算此XPath 2.0表达式时,
$pId
为2,结果正好是所需的文本:

<p>text2</p>
<p>text2</p>
<p>text2</p>
 (a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::p
except
  a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::div[1]
                       /preceding-sibling::p
  )/string()
text2 text2 text2

这不能通过单个XPath 1.0表达式来完成

对于给定的
@id
,您最多可以选择
p

      /*/a/following-sibling::div
        [@id=$pId]
           /preceding-sibling::p
             [count(.
                   |
                    /*/a/following-sibling::div
                                  [@id=$pId]
                                    /preceding-sibling::div[1]
                                       /preceding-sibling::p
                    )
            =
              count(/*/a/following-sibling::div
                                  [@id=$pId]
                                    /preceding-sibling::div[1]
                                       /preceding-sibling::p
                    )
               +1
           ]
如果
$pId
被(替换为)2,并且上述XPath表达式应用于此XML文档
(您的XML片段包装在顶部元素中,以使其成为格式良好的XML文档):

是节点集
$ns1
$ns2
的交点

II。XPath 2.0解决方案

<p>text2</p>
<p>text2</p>
<p>text2</p>
 (a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::p
except
  a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::div[1]
                       /preceding-sibling::p
  )/string()
text2 text2 text2
当对同一XML文档(如上)计算此XPath 2.0表达式时,
$pId
为2,结果正好是所需的文本:

<p>text2</p>
<p>text2</p>
<p>text2</p>
 (a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::p
except
  a/following-sibling::div
                  [@id=$pId]
                    /preceding-sibling::div[1]
                       /preceding-sibling::p
  )/string()
text2 text2 text2