0

我从 Google 返回了以下 DOMNodeList 对象,我需要对其进行解析。

我将其解析为一个 DOMElement 对象数组,每个警告对应一个:

$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 回答