我有一个像这样的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;”查询字符串时,我的代码中的任何地方出现问题符号,因为它与“=”一起使用。谁能告诉我有什么问题?感谢
答案 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尚未广泛实现。