<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”,但它只给我一个元素!如果我删除子字符串 - 之前它将获取所有元素,但包括时间。
任何帮助都会很棒!
答案 0 :(得分:2)
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(., ' ')
答案 1 :(得分:1)
它不起作用,因为substring-before()
的第一个参数是一个字符串,并且你传递了所有行的transactionDateTime
属性。
请改为尝试:
//row[@transactionFor='personal']/substring-before(@transactionDateTime,' ')