2014-05-10 95 views
-1

我想知道是否有任何方式使用DOM来选择具有动态标签的元素。所有的标签都以link_(某个id)开头。DOMDocument PHP网页抓取

例子:

<tr id="link_111111">something in here...</tr> 

<tr id="link_222222">something in here...</tr> 

<tr id="link_333333">something in here...</tr> 

<tr id="link_444444">something in here...</tr> 

<tr id="link_555555">something in here...</tr> 

我在想,如果我能抓住所有的TR的是有link_的ID,因为我没有具体的id,他们是随机的。

回答

3

您可以使用XPath表达式来实现这一目标:

//tr[starts-with(@id, "link")] 

例子:

$dom = new DOMDocument; 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('///tr[starts-with(@id, "link")]'); 

foreach ($nodes as $node) { 
    // Do whatever 
} 

Demo

+1

@AmalMurali,如果id包含'在大写Link'那么你的代码将无法正常工作;) –

1
使用一些字符串函数

DOM方式...

$dom = new DOMDocument; 
$dom->loadHTML($html); $tagK = 'link_'; 
foreach ($dom->getElementsByTagName('tr') as $tag) { 
    if (substr(strtolower($tag->getAttribute('id')),0,strlen($tagK))===$tagK) { 
     echo $tag->getAttribute('id').PHP_EOL; 
    } 
} 

Demo

+0

刚一说明:这将匹配项,即使该属性值不以'link'开始,因为例如:'foo_link_555555'将被匹配。 –

+1

原始版本是正确的,除了它不得不使用'=== 0''代替。我编辑了答案,顺便说一句。如果你愿意,随时回滚。 :P –

+0

@AmalMurali,是的,我必须按照我为广义顺序写的那样回滚。 :)对不起:)由于OP可以从'$ tagK'相应地调整id –