PHP Xpath : Get all href's that contain "letter"

标签 php xpath html-parsing

假设我有一个已加载的 html 文件,我运行此查询:

$url = 'http://www.fangraphs.com/players.aspx';
$html = file_get_contents($url);    
$myDom = new DOMDocument;
$myDom->formatOutput = true;
@$myDom->loadHTML($html);
$anchor = $xpath->query('//a[contains(@href,"letter")]');

这给了我这些 anchor 的列表,如下所示:

<a href="players.aspx?letter=Aa">Aa</a>

但我需要一种方法来只获取“players.aspx?letter=Aa”。

我想我可以试试:

$anchor = $xpath->query('//a[contains(@href,"letter")]/@href');

但这给了我一个 php 错误,提示我在尝试以下操作时无法附加节点:

$xpath = new DOMXPath($myDom);
$newDom = new DOMDocument;
$j = 0;
while( $myAnchor = $anchor->item($j++) ){
   $node = $newDom->importNode( $myAnchor, true );    // import node
   $newDom->appendChild($node);
}

知道如何只获取第一个查询选择的 href 标签的值吗?谢谢!

最佳答案

使用:

//a/@href[contains(., 'letter')]

这会选择任何 a 的任何 href 属性,其字符串值(属性的)包含字符串 "letter" .

关于PHP Xpath : Get all href's that contain "letter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10591700/

相关文章:

php - Laravel 获取祖先(URL)

php - 我的 .htaccess 有什么问题吗?仍尝试将文件作为 Controller 加载。自定义 MVC PHP

javascript - 将 createNSResolver 与 XML 中指定的多个命名空间结合使用

xpath - SandcaSTLe 帮助文件生成器插件 “XPath Reflection File Filter” : How to?

android - jsoup 解析 tr,td 与类和 id for 循环

java - jTidy html 到 xhtml 返回空文件

php - CakePHP 中的 MySQL 连接和查询

php - 无法使用 AES-256-CBC 中的 pgcrypto 解密,但 AES-128-CBC 可以

python - 无法使用 selenium webdriver 单击网页中的链接

java - html解析器使用java搜索和替换一些值