0

XML 文字列から情報を取得し、その中の子ノードを表示しようとしています。私は使っている:

'Title' => $current->AttributeSets->children('ns2')->ItemAttributes->Title,

$current の配列で

$current = $parsed_xml->ListMatchingProductsResponse->ListMatchingProductsResult->Products->Product;

名前空間は ns2 で、子は ItemAttributes と Title です。これを実行すると、タイトルがどこにあるべきかという情報が得られません。スクリプトを実行したときの応答は次のとおりです。

SimpleXMLElement Object()

誰かが私を正しい方向に向けることができますか? 私は他の投稿を見て、それらの例を使用しようとしましたが、うまくいきません。XML は次のとおりです。

    <?xml version="1.0"?>
<ListMatchingProductsResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<ListMatchingProductsResult>
<Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
<Product>
<AttributeSets>
<ns2:ItemAttributes xml:lang="en-US">
<ns2:Title>JavaScript: The Missing Manual</ns2:Title>
4

3 に答える 3

0

通常、simpleXml 要素を文字列にキャストして値を取得する必要があります。試す 'Title' => (string)$current->AttributeSets->children('ns2')->ItemAttributes->Title

于 2012-07-10T17:35:59.583 に答える
0

他の誰かが同様のことをする必要がある場合、子情報を取得する正しい方法は次のとおりです。

'Title' => $current->AttributeSets->children('ns2', true)->ItemAttributes->Title,

文字列は必要ありませんが、true は必要です。

于 2012-07-12T12:41:00.770 に答える
-1

別の解決策は、単純な文字列置換を使用してsimplexml_load_stringを通過させる前に、名前空間ns2を削除することです。これは一種のハックだと思いますが、それが私のやり方です。

$response = str_replace('ns2:', '', $response);
$parse_xml = simplexml_load_string($response);
于 2012-08-23T12:36:35.240 に答える