带子串提取的XPath:没有多重结果

时间:2014-02-12 13:17:14

标签: xml xpath substring

这让我疯狂。

我有以下XPath:

substring(/image/text/caption/@article, string-length(/image/text/caption/@article)-5)

并将其应用于以下XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<image id="1" file="images/1/1.jpg">
<name>aaa2.jpg</name>
<text xml:lang="en">
<description />
<comment />
  <caption article="text/en/1/309678">bla bla</caption>
 </text>
 <text xml:lang="de">
  <description/>
  <comment />
  <caption />
 </text>
 <text xml:lang="fr">
  <description />
  <comment />
  <caption article="text/fr/3/523790">bla bla bla</caption>
 </text>
 <comment>bla bla bla</comment>
 <license>Public Domain</license>
</image>

我得到一个错误,说不允许多个项目的序列作为substring的第一个参数。

我如何重新构造XPath(没有XSLT)以便在最后一个/ in标题文章之后得到这个数字?

该字符串的示例:

text/fr/34/523790
text/es/695/678999
text/en/77/523790
text/de/3/523790
text/de/143/523790

只有第一部分(文字)是稳定的。我希望在最后一个斜杠之后的文本(/).

最佳, R上。

1 个答案:

答案 0 :(得分:0)

您可以使用XPath 2.0尝试这种方式:

/image/text/caption/@article/substring(., string-length(.)-5)

在此问题中提供的示例xml输入,输出如下(在线测试here):

309678
523790

但是如果你使用的是XPath 1.0,我认为没有简单的单表达方式。因为我们不能在XPath 1.0中将函数作为路径表达式的一部分来调用。我不是XPath的专家,在查看讨论here之后得出这个结论(类似的问题类型,但是translate()函数在那里是substring()函数时