Xml 带子字符串提取的XPath:无多个结果

Xml 带子字符串提取的XPath:无多个结果,xml,xpath,substring,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> <tex

这让我发疯

我有以下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>
只有第一部分(文本)是稳定的。我想要最后一个斜杠(/)后面的文本

最好的,
R.

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

/image/text/caption/@article/substring(., string-length(.)-5)
给定本问题中提供的示例xml输入,输出如下(在线测试):


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

我使用xml commons(xml-API-1.4.01.jar)运行这个表达式,我似乎有问题。你知道有任何基于Java的库支持XPath2.0并且可以很容易地添加吗?不幸的是,我不知道。NET开发人员,我过去也只限于XPath1.0。无论如何,你可以用java代替XPath进行子字符串操作,不是吗?好吧,应用程序通过一个配置行获得XPath以保持高度灵活性,所以我希望整个逻辑都封装在一个配置字符串中(通过属性文件获得)而且我没有为我的许多案例中的每一个定制逻辑…如果没有XPath2.0,只需获取整个字符串并用Java进行进一步处理。Java的XPath2.0实现是Saxon,您还可以查看本地XML数据库,如BaseX和其他数据库。其中一些还可以作为库嵌入。
/image/text/caption/@article/substring(., string-length(.)-5)
309678
523790