0

Google から返された次の DOMNodeList オブジェクトがあり、それを解析する必要があります。

私はそれを DOMElement オブジェクトの配列に解析しています。警告ごとに 1 つあります。

$new_product = _GSC_AtomParser::parse($resp->body);
$elements = $new_product->getWarnings();

$warnings = array();
foreach ($elements as $element):
    $warnings[] = $element;
endforeach;

次に、これらの DOMElement オブジェクトを解析して警告を取得する必要があります。

[0] => DOMElement Object
(
    [tagName] => sc:warning
    [schemaTypeInfo] => 
    [nodeName] => sc:warning
    [nodeValue] => validation/missing_recommendedShoppinggoogle_product_categoryWe recommend including this attribute.
    [nodeType] => 1
    [parentNode] => (object value omitted)
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => 
    [nextSibling] => (object value omitted)
    [attributes] => (object value omitted)
    [ownerDocument] => (object value omitted)
    [namespaceURI] => http://schemas.google.com/structuredcontent/2009
    [prefix] => sc
    [localName] => warning
    [baseURI] => /home/digit106/dev/public_html/manager/
    [textContent] => validation/missing_recommendedShoppinggoogle_product_categoryWe recommend including this attribute.
)

これを次のように配列にフォーマットしたい:

[warnings] => Array
    (
        [0] => Array
            (
                [domain] => Shopping
                [code] => validation/missing_recommended
                [location] => google_product_category
                [internalReason] => We recommend including this attribute.
            )
    )

しかし、そのデータはすべて、nodeValue または textContent のいずれかにネストされているようです。

どうやってこれを解析するのですか?

4

2 に答える 2

0

残念ながら、DOMNodeList を PHP 連想配列に自動的に解析する方法については知りませんが、非常に役立つことには同意します。

あなたがしなければならないことは、自分でツリーをトラバースして要素を取り出し、それらを連想配列に入れることです。トリックは、「nodeValue」と「textContent」に、この要素内の子ノードの連結が含まれていることです。これが意味することは、子ノードを繰り返し処理し、必要な情報を抽出する必要があるということです。

$warnings = array();
foreach ($elements as $element):
    $warning = array();
    foreach ($element->childNodes as $child):
        $warning[$child->nodeName] = $child->textContent;
    endforeach;
    $warnings[] = $warning;
endforeach;

現在、これは完全にテストされておらず、抽出する必要がある正確な情報に合わせて少し調整する必要がありますが、正しい種類のアイデアが得られるはずです. 主$child->nodeNameにタグの名前 (リストのように実際には「ドメイン」などではない場合があります) が含まれ、 $child->textContent にはタグ間のテキスト (または子ノード内のテキストの連結) があります。

于 2013-12-30T20:15:32.220 に答える
0

PHP DOMNodeList クラスを試しましたか?

よろしく?

于 2013-08-22T01:06:55.843 に答える