請考慮此示例文件:http://www.w3schools.com/dom/books.xml子串
這個XPath表達式//title/text()
,返回:
日常意大利
哈利波特
XQuery的腳啓動
學習XML
現在我只想要名字,和嘗試:tokenize(//title/text(),' ')[1]
,它返回:
項目過多
OTOH tokenize((//title/text())[1],' ')[1]
返回第一個節點名字。
如何在迭代節點時獲取帶有XPath的子字符串?
請考慮此示例文件:http://www.w3schools.com/dom/books.xml子串
這個XPath表達式//title/text()
,返回:
日常意大利
哈利波特
XQuery的腳啓動
學習XML
現在我只想要名字,和嘗試:tokenize(//title/text(),' ')[1]
,它返回:
項目過多
OTOH tokenize((//title/text())[1],' ')[1]
返回第一個節點名字。
如何在迭代節點時獲取帶有XPath的子字符串?
試試這個
1。要獲得除最後一個所有部分使用:
//title/string-join(tokenize(.,'\s+')[position() ne last()],' ')
或
2.只得到第一個使用這個:
//title/string-join(tokenize(.,'\s+')[position() eq 1],' ')
希望這會有所幫助。
使用:
//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]
THETA,是我的回答對你有用或者你還有什麼問題嗎?您是否注意到它至少比當前接受的答案短兩倍,效率更高? –
關於迪米特雷。感謝您的額外答覆(我投了票),以及包含的提示和進一步的解釋。這是非常有用的,我希望其他人也會很快投票。我已經標記了Cylian的答案是正確的,因爲它向我展示了這個錯誤,並且引導我'// title/tokenize(text(),'')[1]'解決方案,這對我的問題來說是完美的。乾杯 – theta