ここで私は奇妙な振る舞いをしています。
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 のバージョン間で、この実装が変更されたのではないかと思っていました (これがイシューメーカーかどうかはわかりませんが、私は夢中になっています)。
誰もこれを知っていますか?