3

このサンプル ファイルを検討してください: http://www.w3schools.com/dom/books.xml

この XPath 式//title/text()は、次を返します。

毎日のイタリア語
ハリー・ポッター
XQuery キックスタート
XML の学習

ここで、最初の名前だけが必要で、 try:tokenize(//title/text(),' ')[1]を返します。

多すぎるアイテム

OTOHtokenize((//title/text())[1],' ')[1]は、最初のノードの名前を返します。

ノードの反復中に XPath で部分文字列を取得するにはどうすればよいですか?

4

2 に答える 2

2

使用:

//text()/tokenize(.,' ')[1]

これにより、XML ドキュメント内のすべてのテキスト ノードの最初の「単語」のシーケンスが生成されます。

XSLT 2.0 ベースの検証:

<xsl:stylesheet version="2.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

 <xsl:template match="/">
     <xsl:sequence select="//text()/tokenize(.,' ')[1]"/>
 </xsl:template>
</xsl:stylesheet>

この変換が次の XML ドキュメントに適用される場合:

<t>
    <a>Everyday Italian</a>
    <b>Harry Potter</b>
    <c>XQuery Kick Start</c>
    <d>Learning XML</d>
</t>

XPath 式が評価され、この評価の結果が出力にコピーされます。

 Everyday 
 Harry 
 XQuery 
 Learning 

上記には、いくつかの空白のみのテキスト ノードが含まれています。

空白のみのテキスト ノードを無視する場合は、XPath 式を次のように変更します

//text()[normalize-space()]/tokenize(.,' ')[1]
于 2012-09-19T12:44:39.410 に答える
1

これを試して

1. 最後の 1 つを除くすべてのパーツを取得するには、次を使用します。

//title/string-join(tokenize(.,'\s+')[position() ne last()],' ')

また

2. 最初の 1 つだけを取得するには、次を使用します。

//title/string-join(tokenize(.,'\s+')[position() eq 1],' ')

お役に立てれば。

于 2012-09-19T09:27:55.993 に答える