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 に答える