【问题标题】:PHP DOM Attribute WildcardPHP DOM 属性通配符
【发布时间】:2012-08-18 08:35:04
【问题描述】:

我已经四处寻找,但一直找不到。我只是想使用通配符从 html 中选择元素。例如,对于我正在抓取的页面,此选择器在 Jquery 的控制台中完美运行:

$("tr[id^='informal_']")

换句话说,抓取所有 id 以“informal_”开头的行。我试过 xpath 但没有运气。 xpath 是 XML 独有的吗?无论如何,如果有人有任何解决方案,我将不胜感激。

编辑

我使用的xpath:

  $doc = new DOMDocument($html);
  $doc->strictErrorChecking = false;
  $xpath = new DOMXPath($doc);
  $table_rows = $xpath->query("//*tr[starts-with(@id, 'informal_')]");

解决方案 我决定选择:http://code.google.com/p/phpquery/

代码如下:

require('phpQuery/phpQuery.php');

    $doc = phpQuery::newDocumentHTML($html);;
    $table_rows = $doc->find("tbody tr[id^='informal_']");

【问题讨论】:

  • 你能显示你使用的xpath吗?

标签: php dom web-scraping


【解决方案1】:

jQuery 选择器的等价物

tr[id^='informal_']

在 XPath 中是

//tr[starts-with(@id, 'informal_')]

您非常接近答案,只是* 挡住了路。

【讨论】:

  • 谢谢哥们。最后,我决定选择code.google.com/p/phpquery,但我很感激你真的给了我一些东西,而不是仅仅告诉我这是错的。
【解决方案2】:

*tr 是无效的 XPath,因为您将通配符与文字节点名称混合在一起。

您只需要*,即*[starts-with...

【讨论】:

  • 我需要用属性 id='informal_...' 指定 。所以我的路径是://tr*[starts-with(@id, 'informal_')]?
  • 我很困惑。你想要tr 节点,还是任何名称的节点?
猜你喜欢
相关资源
最近更新 更多
热门标签