web-dev-qa-db-ja.com

XPath:テキストノードの選択

次のXMLを持つ:

<node>Text1<subnode/>text2</node>

XPathを介して最初または2番目のテキストノードを選択するにはどうすればよいですか?

このようなもの:

/node/text()[2]

もちろん、ノード内のすべてのテキストがマージされた結果であるため、機能しません。

133
kernel

次のXMLを持つ:

<node>Text1<subnode/>text2</node> 

XPathを介して最初または2番目のテキストノードを選択するにはどうすればよいですか?

使用

/node/text()

これにより、XMLドキュメントの最上位要素(「ノード」という名前)のすべてのテキストノードの子が選択されます。

/node/text()[1]

これにより、XMLドキュメントの最上位要素(「ノード」という名前)の最初のテキストノードの子が選択されます。

/node/text()[2]

これにより、XMLドキュメントの最上位要素(「ノード」という名前)の2番目のテキストノードの子が選択されます。

/node/text()[someInteger]

これにより、XMLドキュメントの最上位要素(「node」という名前)のsomeInteger番目のテキストノードの子が選択されます。次のXPath式と同等です。

/node/text()[position() = someInteger]
166

あなたのxpathが動作するはずです。 MarkLogicとZorba Xquery/Xpathの両方の実装でxpathとmineをテストしました。

両方とも機能するはずです。

/node/child::text()[1] - should return Text1
/node/child::text()[2] - should return text2


/node/text()[1] - should return Text1
/node/text()[2] - should return text2
26
kadalamittai