请考虑此示例文件:http://www.w3schools.com/dom/books.xml
此XPath表达式//title/text()
返回:
日常意大利语 哈利波特
XQuery Kick Start
学习XML
现在我只想要名字,然后尝试:tokenize(//title/text(),' ')[1]
,它返回:
项目太多
OTOH tokenize((//title/text())[1],' ')[1]
返回第一个节点的名字。
如何在迭代节点时使用XPath获取子串?
答案 0 :(得分: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]
答案 1 :(得分:1)
试试这个
<强> 1。要获得除上一个之外的所有部分,请使用:
//title/string-join(tokenize(.,'\s+')[position() ne last()],' ')
或
<强> 2。要获得第一个使用此功能:
//title/string-join(tokenize(.,'\s+')[position() eq 1],' ')
希望这会有所帮助。