2

我正在使用 Symfony2 DomCrawler 搜索特定节点。

我有一个 DOMDocument,里面有一些 html。我正在做的基本上是我正在搜索<p>具有特定类名的标签。

假设我在 $dom 对象中有这个 html:

<p class="one">class one</p>
<p class="two">class two is the <b>good</b> class</p>
<p class="tree">class tree</p>
<p class="four">class four</p>

然后我正在使用

$crawler    = new Crawler($dom);
$class      = 'two';
$paragraphs = $crawler->filterXPath('//p');

foreach( $paragraphs as $paragraph ) {
        if ( $paragraph->hasAttribute('class') === false ) {
            continue;
        }

        $class = $paragraph->getAttribute('class');

        if($class == $class_name){
            $node_value = $paragraph->nodeValue;
        }

问题是在这里,我得到

class two is the good class

我想得到

class two is the <b>good</b> class

如何将这些<b></b>标签保留在结果中?

4

1 回答 1

2

这是因为<b></b>它是一个子节点并且->nodeValue只获取它的内容。
您需要获取另一个问题中提到的子节点的内容

此示例适用于您的情况

$dom = <<<'STR'
<p class="one">class one</p>
<p class="two">class two is the <b>good</b> class</p>
<p class="tree">class tree</p>
<p class="four">class four</p>
STR;

$crawler    = new Crawler($dom);
$class_name = 'two';
$paragraphs = $crawler->filterXPath('//p');

foreach ($paragraphs as $paragraph) {
    if (false === $paragraph->hasAttribute('class')) {
        continue;
    }

    $class = $paragraph->getAttribute('class');

    if ($class == $class_name) {
        $value = '';

        foreach ($paragraph->childNodes as $child) {
            $value .= $paragraph->ownerDocument->saveHTML($child);
        }
    }
}

echo $value; // class two is the <b>good</b> class
于 2013-09-25T15:36:11.290 回答