PHP xpath查询没有结果

时间:2013-05-27 17:44:51

标签: php xml xpath

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

<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']");

这不起作用,它给我空白结果,但如果我删除最后一个和查询(这:和horaire&gt;'1900-01-01 00:20:00')它的工作原理,我认为有当我用“&gt;”查询字符串时,我的代码中的任何地方出现问题符号,因为它与“=”一起使用。谁能告诉我有什么问题?感谢

2 个答案:

答案 0 :(得分: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", "- :","")]');

答案 1 :(得分: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"", "-", "")," ",""),":","")]');

使用compare()函数在XPath 2.0中更直接,但XPath 2.0尚未广泛实现。