Xpath是一种表达式语言,常被用于web程序,用以在XML/HTML文档中选择节点。虽然用XPath选择节点远比CSS selectors复杂,但它却无比强大、功能丰富。
Symfony通过DomCrawler组件对XPath提供了支持,该组件一般被用于测试时验证给定响应的内容与预期相匹配。在Symfony 3.2中我们通过添加对评估(evaluate)XPath表达式的支持,改进了对XPath的整合。
实践中,这意味着你可以对由XPath获取的信息进行高级预处理以简化你的测试代码。对下面的HTML代码进行思考:
| 1 2 3 4 5 6 7 | $html = '<html>
<body>
    <span id="article-100" class="article">Article 1</span>
    <span id="article-101" class="article">Article 2</span>
    <span id="article-102" class="article">Article 3</span>
</body>
</html>'; | 
使用substring-after()这个Xpath函数,你可以得到每个节点之id属性的数字部分:
| 1 2 3 4 5 6 7 8 9 10 11 12 | use Symfony\Component\DomCrawler\Crawler;
 
$crawler = new Crawler();
$crawler->addHtmlContent($html);
 
$ids = $crawler->filterXPath('//span[contains(@id, "article-")]')
               ->evaluate('substring-after(@id, "-")');
// $ids = array:3 [
//   0 => "100"
//   1 => "101"
//   2 => "102"
// ] | 
使用count() Xpath函数,如下例,你可以得到包含.article CSS类的<span>元素的数量:
| 1 2 3 4 5 6 7 8 9 | use Symfony\Component\DomCrawler\Crawler;
 
$crawler = new Crawler();
$crawler->addHtmlContent($html);
 
$num = $crawler->evaluate('count(//span[@class="article"])');
// $num = array:1 [
//   0 => 3.0
// ] | 
阅读MDN Xpath function reference可以快速了解所有可用函数的用法,另外对于W3C官方的推荐内容可参考Xpath and XQuery Functions文档。
 4.2翻译中
                     4.2翻译中

 
                     
                    