3
<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 它会得到我所有的元素,但包括时间。

任何帮助都会很棒!

4

2 回答 2

3
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(., ' ') 
于 2012-06-06T04:01:36.083 回答
1

它不起作用,因为第一个参数substring-before()是一个字符串,并且您正在向它传递transactionDateTime所有行的属性。

试试这个:

//row[@transactionFor='personal']/substring-before(@transactionDateTime,' ')
于 2012-06-05T22:14:15.507 回答