我一直在用磚頭撞牆,所以非常感謝您的幫助。我第一次使用xpath,讓它能夠完成我所需要的大部分工作,而且沒有任何問題。使用Xpath從命名空間獲取XML的數據
下面是一個例子片段:
$urlw = "http://www.wahanda.com/rss/mobdeal.xml";
$wf = gzopen ($urlw, 'r');
$wxml = new SimpleXMLElement (fread ($wf, 1000000));
foreach($wxml->xpath ('/rss/channel/item') as $entry)
{
$price = $entry->price;
echo $price . "<br/>";
}
我的問題是我目前使用的飼料有命名空間聲明,以「價格」節點其實是在「W:價格」。我想使用的一些節點前綴爲「w:」,而其他節點則不是。因此,我的代碼無法獲取前綴節點的內容。有人可以告訴我我如何解決這個問題嗎?從閱讀我添加以下內容:
$wxml->registerXPathNamespace('w', 'http://www.wahanda.com/ns/1.0');
但仍然不確定我需要從這裏做什麼。
非常感謝您的幫助。
一旦你註冊的前綴,你可以[查詢與前綴節點(http://stackoverflow.com/search?q=registerXPathNamespace+php),例如''w:foo/w:bar'與['xpath()'方法](http://de2.php.net/manual/en/simplexmlelement.xpath.php)。請澄清問題。 – Gordon 2011-06-13 09:03:25
嗨@Gordon - 我試圖找出我需要取代$ price = $ entry-> price;在我上面的代碼中給出了XML中每個「item」的單個w:價格值。我在下面的建議中使用了$ price = $ wxml-> xpath('// w:price'),但是這會返回一個數組 - 因爲每個「item」中只有一個「w:price」節點,我認爲它會起作用。 .. – Chris 2011-06-13 09:28:04
在這種情況下,你必須使用['children()'](http://de2.php.net/manual/en/simplexmlelement.children.php)。有關類似問題,請參見[PHP SimpleXML命名空間問題](http://stackoverflow.com/questions/6027398/php-simplexml-namespace-problem/6027507#6027507)。 – Gordon 2011-06-13 09:30:30