这是我必须从名为u-Row-6…的div中获取firstChild的代码片段
<div class="u-Row-6">
<div class='article_details_price2'>
<strong >
855,90 € *
</strong>
<div class="PseudoPrice">
<em>EVP: 999,00 € *</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-nodeValue
在nodeValue
之前缺少>
-
$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 € *
</strong>
<div class="PseudoPrice">
<em>EVP: 999,00 € *</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实际上非常方便。点击此处了解更多关于他们的信息。