Xpath 可位节点的子串 请考虑此示例文件:

Xpath 可位节点的子串 请考虑此示例文件:,xpath,xpath-2.0,Xpath,Xpath 2.0,此XPath表达式//title/text(),返回: 每日意大利语 哈利·波特 XQuery Kick Start 学习XML 现在我只需要名字,然后尝试:tokenize(//title/text(),“”)[1],它返回: 物品太多 OTOHtokenize((//title/text())[1],“”)[1]返回第一个节点的名字 迭代节点时如何使用XPath获取子字符串?试试这个 1。要获取除最后一个零件外的所有零件,请使用以下命令: //title/string-join(tokeni

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

每日意大利语
哈利·波特
XQuery Kick Start
学习XML

现在我只需要名字,然后尝试:
tokenize(//title/text(),“”)[1]
,它返回:

物品太多

OTOH
tokenize((//title/text())[1],“”)[1]
返回第一个节点的名字


迭代节点时如何使用XPath获取子字符串?

试试这个

1。要获取除最后一个零件外的所有零件,请使用以下命令:

//title/string-join(tokenize(.,'\s+')[position() ne last()],' ')
//title/string-join(tokenize(.,'\s+')[position() eq 1],' ')
<t>
    <a>Everyday Italian</a>
    <b>Harry Potter</b>
    <c>XQuery Kick Start</c>
    <d>Learning XML</d>
</t>
 Everyday 
 Harry 
 XQuery 
 Learning 

2。要仅获取第一个,请使用以下命令:

//title/string-join(tokenize(.,'\s+')[position() ne last()],' ')
//title/string-join(tokenize(.,'\s+')[position() eq 1],' ')
<t>
    <a>Everyday Italian</a>
    <b>Harry Potter</b>
    <c>XQuery Kick Start</c>
    <d>Learning XML</d>
</t>
 Everyday 
 Harry 
 XQuery 
 Learning 
希望这有帮助。使用:

//text()/tokenize(.,' ')[1]
<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>
//text()[normalize-space()]/tokenize(.,' ')[1]
这将生成XML文档中每个文本节点的第一个“单词”序列

基于XSLT2.0的验证

//text()/tokenize(.,' ')[1]
<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>
//text()[normalize-space()]/tokenize(.,' ')[1]
上面包含几个仅限空白的文本节点

如果要忽略任何纯空白文本节点,请将XPath表达式更改为

//text()/tokenize(.,' ')[1]
<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>
//text()[normalize-space()]/tokenize(.,' ')[1]

啊,谢谢,这给了我线索。所以函数不应该在整个XPath表达式上调用,而应该只在返回文本的部分上调用。不过,这要简单得多:
//title/tokenize(text(),“”)[1]
,而且效果很好。干杯塔,我的回答对你有用吗?或者你还有什么问题吗?你有没有注意到它比目前公认的答案至少短了两倍,而且效率更高?迪米特表示。谢谢你的补充答案(我投了赞成票),以及包括的提示和进一步的解释。这是非常有用的,我希望其他人也会很快投票。我已经将Cylian的答案标记为正确,因为它向我显示了错误,并引导我找到了
//title/tokenize(text(),“”)[1]
解决方案,它非常适合我的问题。干杯