3

请考虑这个示例文件:http ://www.w3schools.com/dom/books.xml

这个 XPath 表达式//title/text(),返回:

日常意大利语
Harry Potter
XQuery 开始
学习 XML

现在我只想要名字,然后尝试: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. 要获取除最后一个以外的所有部分,请使用以下命令:

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

或者

2.只得到第一个使用这个:

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

希望这可以帮助。

于 2012-09-19T09:27:55.993 回答