我在这里有一个奇怪的行为。
我有一段我曾经在 zend framework 2 php 下运行的代码片段(不记得它的版本),一切都像一个魅力。
由于某些原因,当我在 Symfony2 上开始一个新项目时,我更改了它并在本地 PHP (5.3.25) 下运行它,但我采用了一些可能对我有用的代码片段。
但是,现在这段代码不再工作了:
$document = new \DOMDocument();
$document->loadXML($data);
$xpath = new \DOMXPath($document);
$xpath->registerNamespace('ns',"http://somenamespace.org/FOLDER/2013"); //casual ns used for this example
$foo = $xpath->query('//ns:AvailStatusMessage');
//some elaboration here
$barXPathString = $foo->getElementsByTagName('bar')->item(0)->getNodePath();
$foobar = $xpath->query($barXPathString .'/*[@fooBarAttribute="Available"]');
//some elaboration here
结果是$foobar
null (以前的版本不是)。显然我的代码没有改变。尽管 XML 很重要,但这个问题与“查询正确性”无关(我知道这是正确的,因为它适用于以前的版本),而是关于以下内容:
如果我这样做:$this->logger->debug('X PATH STRING: '.$barXPathString);
结果是
/OTA_HotelAvailGetRS/AvailStatusMessages/AvailStatusMessage/bar
但没有命名空间。所以我想知道是否在 PHP 版本之间,这个实现发生了变化(不知道这是否是问题制造者,但我快疯了)
有人知道吗?