php - DOM文档 : how to get inner HTML as Strings separated by line-breaks?

标签 php domdocument

<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/

相关文章:

php domdocument 创建破坏 html 的自闭标签

php - 如何使用php删除基于子属性的XML标签?

php - 程序输出错误信息

php - Vue.js/Laravel - 正确处理注销

php - nuSoap 函数不是有效方法

php - 对齐 xml 文档

php - MYSQL用php移动信息

php - 使用ajax从数据库实时获取数据?

javascript - 这两个 promise 和我期望发生的事情之间的区别

php - 关于在php中保存文件的问题