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