-2

是否有任何方法可以在 Xpath 2.0 中获取特定节点的任何类型的兄弟节点

轴“following-sibling”仅支持相同类型的兄弟。

前任:

<node>
<b name="bold">abc</b>
<div>gef</div>
</node>

我想选择<b name="bold">.

4

2 回答 2

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 中已经添加的选择兄弟姐妹的任何新功能。

如果“兄弟”的含义与 XPath 中“兄弟”的含义不同,那么您必须准确定义您的意思。

于 2012-11-01T12:35:58.533 回答
1

不确定我是否理解这个问题,但是如何:

//*[preceding-sibling::b]

这将获得该<b name="bold">abc</b>元素的所有先前兄弟姐妹。选择任何类型的*元素。

如果你想要所有兄弟姐妹:

//*[preceding-sibling::b or following-sibling::b]

如果您想更具体地选择b元素:

//*[preceding-sibling::b[@name="bold"]]
于 2012-11-01T06:07:54.957 回答