-2

Xpath2.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 式が (必要な要素から) 適用され、選択された 3 つのノードがすべて出力にコピーされます

      "
    "

      "<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 に答える