2011-02-05 17 views
2

なぜ私はXPathで何も得られないのですか?どうしましたか?Dom Xpathの問題

<?php 
$dom_object = new DOMDocument(); 
$domxpath_object = new DOMXpath($dom_object); 

$dom_object->loadXML('<?xml version="1.0" encoding="UTF-8" ?><databases><foo>bar</foo></databases>'); 
$domnodelist_object = $domxpath_object->query('/'); 
echo '<pre>' . print_r($domnodelist_object->item(0)->hasChildNodes(), true) . '</pre>'; // output: nothing 

print_r($dom_object->childNodes->item(0)->nodeValue); // output bar 
?> 

ありがとうございます。

+3

xpathが更新された場合、 'newXXXPath()'を ' - > loadXML()'の後ろに置いてみましたか? – Orbling

+0

ありがとうございました。あなたは正しかった! – thom

+0

@Orbling - あなたの提案を回答として投稿できますか? –

答えて

1

[コメントの後にここに検索者の利益のために、答えるために変換されます。]

DOMXpathそれは作成の時点ではなく、それはから作成されたDOMDocumentへのリンクの状態だ確立するようです。 DOMDocument、この場合は->loadXML()コールの更新は、DOMXpathオブジェクトには反映されません。

したがって、XPathオブジェクトをインスタンス化する前に、XMLをロードし、完全なDOMツリーを作成する必要があります。

<?php 
$dom_object = new DOMDocument();  
$dom_object->loadXML('<?xml version="1.0" encoding="UTF-8" ?><databases><foo>bar</foo></databases>'); 

// XPath created from DOMDocument, after loading 
$domxpath_object = new DOMXpath($dom_object); 

$domnodelist_object = $domxpath_object->query('/'); 

// ... additional processing