2011-02-05 82 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更新,你有没有尝试过把'新DOMXPath()`后` - >的loadXML()`? – Orbling 2011-02-05 00:21:31

回答

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