是否有任何方法可以在 Xpath 2.0 中获取特定节点的任何类型的兄弟节点
轴“following-sibling”仅支持相同类型的兄弟。
前任:
<node>
<b name="bold">abc</b>
<div>gef</div>
</node>
我想选择<b name="bold">
.
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 中已经添加的选择兄弟姐妹的任何新功能。
如果“兄弟”的含义与 XPath 中“兄弟”的含义不同,那么您必须准确定义您的意思。
不确定我是否理解这个问题,但是如何:
//*[preceding-sibling::b]
这将获得该<b name="bold">abc</b>
元素的所有先前兄弟姐妹。选择任何类型的*
元素。
如果你想要所有兄弟姐妹:
//*[preceding-sibling::b or following-sibling::b]
如果您想更具体地选择b
元素:
//*[preceding-sibling::b[@name="bold"]]