什么是使用Symfony DOM Crawler从HTML标签中提取文本值的最有效/最好的方法?

时间:2015-11-18 14:29:02

标签: html regex xml symfony domcrawler

给出以下HTML代码段:

<div class="item">
  large
  <span class="some-class">size</span>
</div>

我正在寻找使用Symfony的Crawler提取字符串“large”的最佳方法。

$crawler = new Crawler($html);

在这里,我可以使用$crawler->html()然后应用正则表达式搜索。有更好的解决方案吗? 或者你会怎么做呢?

3 个答案:

答案 0 :(得分:4)

我刚刚找到了一个对我来说最干净的解决方案:

$crawler = new Crawler($html);
$result = $crawler->filterXPath('//text()')->text();

答案 1 :(得分:0)

$crawler = new Crawler($html);
$node = $crawler->filterXPath('//div[@class="item"]');
$domElement = $node->getNode(0);
foreach ($node->children() as $child) {
    $domElement->removeChild($child);
}
dump($node->text()); die();

在你必须修剪空格之后。

答案 2 :(得分:0)

这有点棘手,因为您尝试获取的文本是DOMCrawler组件(据我所知)不允许您提取的文本节点。值得庆幸的是,DOMCrawler只是PHP的DOM类之上的一层,这意味着您可以执行以下操作:

$crawler = new Crawler($html);
$crawler = $crawler->filterXPath('//div[@class="item"]');
$domNode = $crawler->getNode(0);
$text = null;

foreach ($domNode->children as $domChild) {
    if ($domChild instanceof \DOMText) {
        $text = $domChild->wholeText;
        break;
    }
}

这对HTML没有帮助,如:

<div>
    text
    <span>hello</span>
    other text
</div>

所以你只能得到&#34;文字&#34;而不是&#34;发短信给其他文字&#34;在这种情况下。有关更多详细信息,请查看DOMText文档。