2012-06-07 4 views
3

У меня есть HTML:Как получить значение с помощью DOM HTML

$content = " 
<tr> 
    <td class="ttl"><a href="#">Colors</a></td> 
    <td class="nfo">Dark Grey, Rose Red, Blue, Brown, Sand White</td> 
</tr>"; 

И код PHP:

$dom = new DOMDocument(); 
@$dom->loadHTML($content);  
$xpath = new DOMXPath($dom); 

$attbs = $xpath->query("//td[@class='ttl']"); 
foreach($attbs as $a) { 
    print $a->nodeValue; 
} 

$values = $xpath->query("//td[@class='nfo']"); 
foreach($values as $v) { 
    print $v->nodeValue; 
} 

Как получить значение 2 тд, но только с использованием 1 Еогеасп

+0

эм ... путем удаления первого Еогеасп? Просто не могу понять, в чем проблема. – Gediminas

+0

Просто примечание, '$ content' должно использовать одинарные кавычки, поскольку двойные кавычки уже используются для атрибутов тега. – flowfree

ответ

1

Положите обе классов в логическое выражение OR с оператором |:

$attbs = $xpath->query("//td[@class='ttl'] | //td[@class='nfo']"); 
foreach($attbs as $a) { 
    print $a->nodeValue; 
} 

Это печатает:

ColorsDark Grey, Rose Red, Blue, Brown, Sand White 

Demo

+0

Я пытаюсь разобрать некоторый html в php, используя regex для hoooouuuurrrs, и все это провалилось. Большое вам спасибо за это решение, которое действительно сработало! Xpath ftw. – ProGrammar

0

попробовать

$trs = $xpath->query("//tr"); 
foreach ($trs as $tr) { 
    $attbs = $xpath->query("//td[@class='ttl']", $tr); 
    $values = $xpath->query("//td[@class='nfo']", $tr); 
    echo $attbs->item(0)->nodeValue . '-' . $values->item(0)->nodeValue . '<br />'; 
} 
Смежные вопросы