2012-10-06 152 views
0

我試圖從看起來像 http://chris.photobooks.com/xml/default.htm?state=8T通過要素循環的子元素

使用下面的函數,我通過每一個產品標籤

$dom = new DOMDocument; 
$dom->loadXML($resp); 
$xpath = new DOMXPath($dom); 
$xpath->registerNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd'); 
$xpath->registerNamespace('a', 'http://mws.amazonservices.com/schema/Products/2011-10-01'); 

foreach($xpath->query('//a:Product') as $product){ 
    echo $product->query('//ns2:ItemAttributes/ns2:Author')->item(0)->nodeValue 
} 

我現在意識到試圖循環結構中提取數據這是從for循環中提取數據的錯誤方法,但是正確的方法是什麼?

回答

1

我想你想

foreach($xpath->query('//a:Product') as $product){ 
    echo $xpath->query('.//ns2:ItemAttributes/ns2:Author', $product)->item(0)->textContent 
} 
+0

我希望我能之前嘗試過了,但我只是用str_replace()函數來替換所有命名空間去的廉價和骯髒的方式。不管怎麼說,還是要謝謝你 –

1

如果您需要特定的標籤,你可以這樣做:

$dom = new DOMDocument; 
$dom->loadXML($resp); 

foreach($dom->getElementsByTagName("Product") as $product){ 
    echo $product->getElementsByTagName("Author")->item(0)->nodeValue."<br />"; 
} 

否則(如果你需要整個數據),還有整個XML轉換成一個簡單的數組/對象社區的解決方案。