2010-09-22 24 views
0

我有這樣的代碼:DomXML xpath接下來我該做什麼?

$reader = new DOMDocument(); 
$reader->loadHTML($shell); 
$xpath = new DomXPath($reader); 
$xpath->registerNamespace('html','http://www.w3.org/1999/xhtml'); 
$res = $xpath->query('descendant-or-self::*[contains(@class,"content")]'); 
print_r($res); 

$殼只是含有以下HTML代碼的變量:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <meta http-equiv="Content-Language" content="en-us" /> 

     <title>Hello World</title> 
    </head> 

    <body> 
     <div class="content"> 
      Hello World!! 
     </div> 
    </body> 
</html> 

如果我是正確的XPath查詢:

descendant-or-self::*[contains(@class,"content")] 

是應該得到與類「內容」的div。但是,當我打印陣列時,我看到的只是一個空對象:

DOMNodeList Object 
(
) 

這是否表示查詢無效? DomXPath查詢語言與SimpleXML Xpath不同,因爲該查詢適用於SimpleXML?

如果它正在工作如何查看和修改匹配的節點?

回答

2

print_r - ing DOMNodeList(或任何DOM類)對你沒有什麼好處:它們大多數是在C/Libxml2級別實現的,而不是本地暴露給PHP的。據我所知,這將工作,請在查詢後添加此內容,並查看您是否得到結果:

foreach($res as $node){ 
     var_dump($node->ownerDocument->saveXML($node)); 
} 
+0

謝謝,查詢正在工作。那麼,我將如何去編輯匹配的節點屬性和數據呢? – 2010-09-22 23:38:46

+0

我想說的是在http://www.php.net/manual/en/class.domelement.php查看'DOMElement'的規範,你可能正在尋找'setAttribute'函數,'childNodes'屬性(也是一個DOMNodeList),'nodeValue'等等。API需要一些習慣,但它大部分是商定的API,所以任何DOM引用(PHP或其他)都很可能會給你一個很好的見解在它的工作中(並且檢查PHP手冊中的註釋)。 – Wrikken 2010-09-22 23:42:12

0

我想你想somthiing這樣的:

//*[@class='content']

這將讓與類內容的任何標記。

這將是稍微更具可讀性剛剛拿到任何的div:

//div[@class='content']

在XPath,您使用//運營商在DOM任何級別搶標籤。它將匹配所有。

相關問題