为什么xpath查询语法在较低版本的php中有所不同

为什么xpath查询语法在较低版本的php中有所不同,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,我一直在开发我的测试服务器,它是PHP 5.5,并使用了这种结构的xpath查询: $year = $this->xml->xpath("//field[@label='Year']"); $year[0]['value']; 所有的工作都很完美,但是当我将它移动到实时服务器PHP5.4时,我所有的xpath查询都会中断。我只是想知道是否有人可以给我一些见解,为什么或者如何在不升级php的情况下克服这个问题。我猜除了应该启用的xpath之外,我的live站点上没有启用其他功能。

我一直在开发我的测试服务器,它是PHP 5.5,并使用了这种结构的xpath查询:

 $year = $this->xml->xpath("//field[@label='Year']");
 $year[0]['value'];

所有的工作都很完美,但是当我将它移动到实时服务器PHP5.4时,我所有的xpath查询都会中断。我只是想知道是否有人可以给我一些见解,为什么或者如何在不升级php的情况下克服这个问题。我猜除了应该启用的xpath之外,我的live站点上没有启用其他功能。

比较服务器和测试环境上SimpleXml的版本。使用phpinfo;为此
我还建议你跨过去,我注意到这实际上更可靠。否则,请发布您的原始xml,以便我们查看可能存在的问题。

我不认为PHP版本是原因。我在DOM中使用了很多Xpath,我从未注意到PHP5.4和5.5之间的差异。也许你的live xml是不同的,它有一个名称空间。@我也想到了,但检查了它的路径。我做了echo以显示路径和所有内容,并在live server上使用了一种替代语法来测试一两个实例,结果成功了。我只是不明白为什么我需要为live使用不同的语法,或者为什么我在测试服务器上使用的语法与live完全不同最可能的原因是libxml的底层版本不同,libxml是所有PHP的XML功能都基于的底层库。我认为phpinfo应该能够告诉您这一点。这可能是因为libxml版本的不同,但是问题中的xpath表达式非常简单-它应该显示相同的行为。@不久前libxml中出现了突破性的变化,这导致了PHP特定版本的奇怪之处。PHP滥用私有属性,并最终游说为其提供公共访问器。早在5.4和5.5之前,但我想可能同样的事情再次发生。在Gentoo上尤其糟糕,因为编译时库可能与运行时库不匹配……我已经用我的原始xml进行了编辑和更新。我刚刚意识到我的xml有太多信息,所以现在必须删除它。如果有SimpleXML和DOM,请发布显示层次结构和名称空间的较小摘录两者都基于相同的底层库,因此,如果它在不同的环境中表现不同,则不太可能对您使用的库产生影响。有些事情SimpleXML无法做到,例如,表示文本节点而不是元素或属性,但这些不太可能在不同版本之间发生更改。@IMSoP我同意两者都使用libxml,但我发现DOM实现更完整。当然,SimpleXml更具PHPIS。infomatic在服务器和他的测试中可能有不同版本的libxml。