如何使用symfony dom解析器

时间:2017-09-19 20:24:59

标签: php symfony dom domcrawler

我正在尝试使用Symfony Crawler。

所以我检查了这个article

我想要做的是获得3,335.00(第二个参数)

现在,我尝试这样的句子,但这是错误的。

$crawler = $crawler->filter('body > div[@class="cell_label"]');

我该怎么做?

<body>
<div class="cell__label">  Value1  </div> <div class="cell__value cell__value_"> 2,355.00 </div>
<div class="cell__label">  Value2  </div> <div class="cell__value cell__value_"> 3,355.00 </div>
<div class="cell__label">  Value3  </div> <div class="cell__value cell__value_"> 4,355.00 </div>
</body>

$crawler = new Crawler($url);
$crawler = $crawler->filter('body > div[@class="cell_label"]');//// no work...

foreach ($crawler as $domElement) {
    var_dump($domElement);
}

2 个答案:

答案 0 :(得分:1)

我可以在这里看到几个问题:

  1. 使用$crawler->filter()表示您必须将css选择器作为参数传递,而不是XPath表达式,因此如果您需要选择所有'body > div.cell__label',请使用'body div[class^="cell__"]'div }以一个以cell__开头的类,顺便提一下cell_label(一个下划线)中的拼写错误。

  2. Crawler accepts DOMNodeList DOMNode array string 构造函数参数,而不是远程资源的URL(但我认为它可能只是您在那里使用的任意变量名称)。从技术上讲,url也是一个字符串,但不是XML格式的字符串。

  3. 如果要使用XPath表达式,请使用$crawler->filterXPath(),如下所示:

    $nodes = $crawler->filterXPath('//div[contains(@class, "cell__label")]');

  4. 以下是有关如何使用XPath的文档 - https://www.w3.org/TR/xpath/

答案 1 :(得分:0)

Crawler过滤器可以像选择器一样处理jQuery,所以你可以:

$crawler = $crawler->filter('.cell__value');