Xpath-组匹配作为组合结果
我遇到了以下问题,我想创建一个Xpath表达式,结果为3个匹配项,其中match1=text1text1text,match2=text2text2text2等 我能找到每一个单独的p,但我就是不能“分组”它们 表达式应该说:“在[@class=“random-a-tag”]之后,给我div[@id]所在的每个元素之前存在的所有p-tag的所有文本。”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="
文本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