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 循环中提取数据的错误方法,但正确的方法是什么?

4

2 回答 2

1

如果您需要特定标签,您可以执行以下操作:

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

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

否则(如果您需要全部数据),有社区制作的解决方案可以将整个 XML 转换为简单的数组/对象。

于 2012-10-06T14:43:49.270 回答
1

我想你想要

foreach($xpath->query('//a:Product') as $product){
    echo $xpath->query('.//ns2:ItemAttributes/ns2:Author', $product)->item(0)->textContent
}
于 2012-10-06T15:43:06.503 回答