DOMDocument:如何将内部HTML作为由换行符分隔的字符串?

时间:2011-08-28 17:06:07

标签: 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'标签。我怎么能分开三条线来分别对待它们?

提前感谢。

4 个答案:

答案 0 :(得分:2)

你可以用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是至关重要的。

答案 1 :(得分:1)

您可以使用

$lines = explode('<br>', $data->nodeValue);

答案 2 :(得分:0)

这是javascript语法的解决方案

 var tempArray = $line.split("<br>");  

echo $line[0]
echo $line[1]
echo $line[2]

答案 3 :(得分:-1)

您可以像这样使用php explode函数。 (假设<p>标记中的每一行都以<br>

结尾
$tags = $dom->getElementsByTagName('blockquote');
foreach($tags as $tag)
{
    $datas = $tag->getElementsByTagName('p');
    foreach($datas as $data)
    {
        $contents = $data->nodeValue;
        $lines = explode('<br>',$contents);
        foreach($lines as $line) {
            echo $line;
        }
    }
}