xml - Xpath substring-before 只获取一个元素

标签 xml xpath substring

<row transactionDateTime="2012-06-04 02:42:44" transactionID="2519826732" quantity="5000" typeName="Caldari Navy Mjolnir Rocket" typeID="27321" price="988.72" clientID="92026367" clientName="N Clover" stationID="60003760" stationName="Jita IV - Moon 4 - Caldari Navy Assembly Plant" transactionType="buy" transactionFor="personal" journalTransactionID="5956192510"/>

你好,

以上是我尝试从中提取数据的 XML 文件示例。我要提取的数据是;

transactionDateTime="2012-06-04"

现在 - 我可以通过以下 Xpath 查询轻松获得它;

substring-before(//row[@transactionfor='personal']/attribute::transactiondatetime, ' ')

这正是我想要的 - “2012-06-04”,但它只为我提供了一个元素!如果我删除 substring-before 它将获得所有元素,但包括时间。

任何帮助都会很棒!

最佳答案

substring-before(//row[@transactionfor='personal']/attribute::transactiondatetime, ' ') 

在 XPath 1.0 中,如果将节点集作为参数传递给期望单个值(字符串)的地方,则节点集中的第一个节点将用作参数。规则是应用函数 string() 到传递的节点集,根据定义 string($nodeset)string($node-set[1]) 相同。

在 XPath 2.0 中,上述表达式会导致错误。

当节点数大于 1 时,单个 XPath 表达式无法生成应用于所有选定节点的函数结果

因此,必须在第二步中处理每个选定的节点(可能在承载 XPath 的编程语言中指定的循环中)。

在 XPath 2.0 中,可以使用函数调用作为表达式的最后定位步骤

因此可以使用此 XPath 2.0 表达式生成所有想要的字符串序列:

//row[@transactionfor='personal']
           /attribute::transactiondatetime
                           /substring-before(., ' ') 

关于xml - Xpath substring-before 只获取一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905659/

相关文章:

php - 我如何使 Xpath 搜索不区分大小写

xml - XSL展平嵌套列表

java - 如何检查节点是否没有兄弟节点?

android - strings.xml 中的百分比符号

java - selenium webdriver 中 xpath 的区别?

java - 使用 JXPath 查询列表

python - 使用 lxml xpath 按原始顺序获取 xml 中的所有文本节点

php - 显示字符串最多这么多个字符而不拆分单词

regex - 如何快速查找大字符串中的子字符串及其周围字符?

string - 在Scala中删除以大写字符开头的字符串的单词