DOMDocument中的firstChild不起作用


firstChild in DOMDocument not working

这是我必须从名为u-Row-6…的div中获取firstChild的代码片段

<div class="u-Row-6">
<div  class='article_details_price2'>
<strong >
855,90&nbsp;&euro; *
</strong>
<div class="PseudoPrice">
<em>EVP:  999,00&nbsp;&euro; *</em>
<span>
(14.32 % <span class="frontend_detail_data">gespart</span>)
</span>
</div>
</div>
</div>

为此,我使用了以下代码:

foreach($dom->getElementsByTagName('div') as $p) {
    if ($p->getAttribute('class') == 'u-Row-6') {
        if ($first) {
            $name = $p->firstChild-nodeValue;
            $name = str_replace('€', '', $name);
            $name = str_replace(chr(194), " ", $name);
            $first = false;
        }
    }
}

但奇怪的是,这个代码对我来说不起作用

您的代码有很多问题:

  • $first未初始化为true值,这将阻止字符串替换代码即使在运行一次

  • $p->firstChild-nodeValuenodeValue 之前缺少>

  • $p->firstChild实际上将解析为一个文本节点(<div class="u-Row-6"><div class='article_details_price2'>之间的任何文本-当前为空),而不是您要查找的strong,也不是<div class='article_details_price2'>,正如人们所期望的那样。

您可能需要使用XPath查询来获取类"u-Row-6"的div中的所有strong标记,然后循环遍历找到的标记:

$src = <<<EOS
<div class="u-Row-6">
<div  class='article_details_price2'>
<strong >
855,90&nbsp;&euro; *
</strong>
<div class="PseudoPrice">
<em>EVP:  999,00&nbsp;&euro; *</em>
<span>
(14.32 % <span class="frontend_detail_data">gespart</span>)
</span>
</div>
</div>
</div>
EOS;
$dom = new DOMDocument();
$dom->loadHTML($src);
$xpath = new DOMXPath($dom);
$strongTags = $xpath->query('//div[@class="u-Row-6"]//strong');
foreach ($strongTags as $tag) {
    echo "The strong tag contents: " . $tag->nodeValue, PHP_EOL;
    // Replacement code goes here ...
}

输出:

The strong tag contents: 
855,90 € *

XPath实际上非常方便。点击此处了解更多关于他们的信息。