2010-04-24 17 views
3

phpQuery是一個非常好的工具,它在過去解析格式良好的XHTML和XML文檔時幫助過我,但最近遇到了一個問題,試圖選擇元素的標記名中包含冒號如以下情況:使用phpQuery選擇特有的XML標籤

<isc:thumb><![CDATA[http://example.com/foo_thumb.jpg]]></isc:thumb> 

我試圖使用pq()功能來選擇所有這些元素:

foreach (pq("isc:thumb") as $thumbnail) { 
    print pq($thumbnail)->text(); 
} 

不幸的是,這是什麼都不做。如果我嘗試其他元素,例如id的標記名,則結果會按預期彈出。

回答

5

您正在試圖查找屬於isc名稱空間的thumb元素(請參閱XML namespace);不是名爲isc:thumb的標籤。

phpQuery可以愉快地查詢命名空間元素,就像你不想做的一樣。相反,只需以namespace|tagname的形式提供標籤(即isc|thumb)即可。還值得注意的是,命名空間必須註冊到phpQuery的XPath處理程序(它只是一個DOMXPath對象),因爲它能夠識別命名空間。

下面是一個示例XML文檔的簡單示例(顯然,使用您自己的XML並確保提供正確的名稱空間URI)。

phpQuery::newDocumentXML('<root xmlns:isc="urn.example.isc"> 
    <isc:thumb><![CDATA[http://example.com/foo_thumb.jpg]]></isc:thumb> 
    <isc:thumb><![CDATA[http://example.com/bar_thumb.jpg]]></isc:thumb> 
</root> 
'); 
phpQuery::getDocument()->xpath->registerNamespace('isc', 'urn.example.isc'); 
foreach (pq("isc|thumb") as $thumbnail) { 
    echo pq($thumbnail)->text() . PHP_EOL; 
} 

,輸出:

http://example.com/foo_thumb.jpg 
http://example.com/bar_thumb.jpg 
+1

出色答卷!感謝您對細節的關注。 – Aristotle 2010-04-25 01:07:12

+0

如果XML看起來像這樣'<根的xmlns:ISC = 「urn.example.isc」> 測試 '' – Umair 2016-04-05 19:44:44

+0

PQ( 「ISC |更多」,$縮略圖)'不顯示antyhing – Umair 2016-04-05 19:44:57