0

我有一个这样的 xml 文档(只是一个例子,因为真正的 xml 更大):

<document>
<vol>
<sens>A</sens>
<date_vol>2013-05-26 00:00:00</date_vol>
<compagnie>AZA</compagnie>
<num_vol>802</num_vol>
<destination>FCO</destination>
<horaire>1900-01-01 00:20:00</horaire>
<statut>ARRIVE 00:45</statut>
</vol>
<vol>
<sens>A</sens>
<date_vol>2013-05-27 00:00:00</date_vol>
<compagnie>AZA</compagnie>
<num_vol>802</num_vol>
<destination>FCO</destination>
<horaire>1900-01-01 00:20:00</horaire>
<statut>ARRIVE 00:13</statut>
</vol>

我想像这样使用 php 查询这个文档:

$simpleXml = new SimpleXMLElement($xml);
$vols = $simpleXml->xpath("/document/vol[sens='$sens_vols' and date_vol='2013-05-26 00:00:00' and horaire>'1900-01-01 00:20:00']");

这不起作用,它给了我空白的结果,但是如果我从查询中删除最后一个和(this:and horaire>'1900-01-01 00:20:00')它可以工作,我认为任何地方都有问题在我的代码中,当我使用“>”符号查询字符串时,因为它与“=”一起使用。有人可以告诉我出了什么问题吗?谢谢

4

2 回答 2

2

davmos 的答案是正确的。在 xpath-1.0 中,运算符>只比较数字。好消息是您的日期具有可以轻松转换为有意义数字的格式(通过 translate() 函数)但是不需要嵌套翻译调用,每个参数的调用就足够了。
尝试:

$vols = $simpleXml->xpath('/document/vol[sens="$sens_vols" and date_vol = "2013-05-26 00:00:00" and translate(horaire, "- :","") > translate("1900-01-01 00:20:00", "- :","")]');
于 2013-05-27T19:10:32.827 回答
1

在 XPath 1.0 中,为了进行比较,您首先需要使用函数删除-,:和空格字符...translate()

$vols = $simpleXml->xpath('/document/vol[sens="$sens_vols" and date_vol = "2013-05-26 00:00:00" and translate(translate(translate(horaire, "-", "")," ",""),":","") > translate(translate(translate("1900-01-01 00:20:00"", "-", "")," ",""),":","")]');

在 XPath 2.0 中使用该compare()函数更直接,但是 XPath 2.0 还没有被广泛实现。

于 2013-05-27T18:03:20.797 回答