<blockquote>
<p>
2 1/2 cups sweet cherries, pitted<br>
1 tablespoon cornstarch <br>
1/4 cup fine-grain natural cane sugar
</p>
</blockquote>
您好,我想获取“p”标签内的文本。你看到有三个不同的行,我想在每行添加一些额外的文本后分别打印它们。这是我的代码块
$tags = $dom->getElementsByTagName('blockquote');
foreach($tags as $tag)
{
$datas = $tag->getElementsByTagName('p');
foreach($datas as $data)
{
$line = $data->nodeValue;
echo $line;
}
}
主要问题是 $line 包含 'p' 标签内的全文,包括 'br' 标签。我怎样才能分开这三行来分别对待它们??
提前致谢。
最佳答案
您可以使用 XPath 来做到这一点。您所要做的就是查询文本节点。不需要爆炸或类似的东西:
$dom = new DOMDocument;
$dom->loadHtml($html);
$xp = new DOMXPath($dom);
foreach ($xp->query('/html/body/blockquote/p/text()') as $textNode) {
echo "\n<li>", trim($textNode->textContent);
}
非 XPath 替代方案是迭代 P 标记的子节点,并且仅在它们是 DOMText 节点时才输出它们:
$dom = new DOMDocument;
$dom->loadHtml($html);
foreach ($dom->getElementsByTagName('p')->item(0)->childNodes as $pChild) {
if ($pChild->nodeType === XML_TEXT_NODE) {
echo "\n<li>", trim($pChild->textContent);
}
}
两者都会输出 ( demo )
<li>2 1/2 cups sweet cherries, pitted
<li>1 tablespoon cornstarch
<li>1/4 cup fine-grain natural cane sugar
另见 DOMDocument in php用于解释节点概念。在使用 DOM 时理解这一点至关重要。
关于php - DOM文档 : how to get inner HTML as Strings separated by line-breaks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222453/