2013-05-27 172 views
0

我有这样一个XML文档(只是为例,因为真正的XML是比格尔):PHP XPath查询没有给出结果

<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')它的工作原理,我认为有当我用“>”符号查询字符串时,在代码中的任何地方出现问题,因为它适用于“=”。有人能告诉我什么是错的吗?感谢

回答

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尚未广泛实现。

2

davmos的答案朝着正确的方向发展。在xpath-1.0中,运算符>仅比较数字。好消息是,你的日期格式可以很容易地转换成一个有意义的数字(通过translate()函数)但是没有必要进行nest翻译调用,每个参数的调用就足够了。
尝试:

$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", "- :","")]'); 
+0

谢谢你,我会尝试 –

+0

@MoksyMosky:请考虑标记一个答案“作为公认的答案”。如果您不确定如何或何时,请查看[常见问题](http://stackoverflow.com/faq#howtoask)。 –