是否有任何方法可以在Xpath 2.0中获取特定节点的任何类型的兄弟
轴“跟随兄弟”仅支持相同类型的兄弟姐妹。
例如:
<node>
<b name="bold">abc</b>
<div>gef</div>
</node>
我想选择<b name="bold">
的所有兄弟。
答案 0 :(得分:2)
Is there any method to get any type of sibling of a particular node in Xpath 2.0
The axes following-sibling only supports for the same type of siblings.
使用强>:
following-sibling::node()
这将选择任何类型的所有兄弟节点 - 元素,文本节点,处理指令节点和注释节点。
以下是完整的基于XSLT的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="/*/b[@name='bold']/following-sibling::node()">
"<xsl:copy-of select="."/>"
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<node>
<b name="bold">abc</b>
<div>gef</div>
</node>
应用XPath表达式(关闭所需元素)并将所有选定的三个节点复制到输出:
"
"
"<div>gef</div>"
"
"
正如我们所看到的,选择了所有兄弟节点 - 一个仅空白的文本节点,一个div
元素和另一个仅空白的文本节点。
请注意:这是一个XPath 1.0表达式,我不相信XPath 2.0增加了选择兄弟的任何新功能,而不是XPath 1.0中已有的功能。< / p>
如果“sibling”意味着与XPath中“兄弟姐妹”的意思不同,那么你必须准确定义你的意思。
答案 1 :(得分:1)
我不确定我是否理解这个问题,但是如何:
//*[preceding-sibling::b]
这将获得<b name="bold">abc</b>
元素的所有先前兄弟。 *
选择任何类型的元素。
如果您想要所有兄弟姐妹:
//*[preceding-sibling::b or following-sibling::b]
如果您想更具体地选择b
元素:
//*[preceding-sibling::b[@name="bold"]]