2013-03-03 6 views
0

Я таблица Я пытаюсь скрести, что выглядит следующим образом:Trouble выскабливание стол с DOMXPath

<table id="thisTable"> 
    <tr> 
     <td class="value1"></td> 
     <td class="value2"></td> 
     <td class="value3"></td> 
     <td class="value4"></td> 
    </tr> 
    <tr> 
     <td class="value5"></td> 
     <td class="value6"></td> 
    </tr> 
</table> 

и мой DOMXPath который выглядит следующим образом (до сих пор):

$htmlDoc = new DomDocument(); 
@$htmlDoc->loadhtml($html); 
$xpath = new DOMXPath($htmlDoc); 

$nodelist = $xpath->query('//*[@id="thisTable"]'); 

foreach ($nodelist as $n){ 
    echo $n->nodeValue."\n"; 
} 

Это работает, я получаю значения таблицы, но как указать класс nodeValue? В конечном счете, моя цель - построить новую таблицу из td в value2, value4 и value5 в одной строке.

ответ

1
$htmlDoc = new DomDocument(); 
$htmlDoc->loadHTML($html); 
$xpath = new DOMXPath($htmlDoc); 

$nodelist = $xpath->query('//td'); 

foreach ($nodelist as $n){ 
    echo $n->getAttribute("class")."\n"; 
} 

Примечание: Используйте getAttribute свойство для получения значений класса

0

Расширить XPATH-запрос:

$class="value1"; 
$nodelist = $xpath->query('//*[@id="thisTable"][@class="$class"]'); 
0

Не уверен, если я правильно понимаю, если вы хотите, чтобы текстовое содержимое value2, value4 и value5 в одной строке, вы можете использовать этот xpath:

(//td[@class='value2'] | //td[@class='value4'] | //td[@class='value5'])/text() 

Например:

<table id="thisTable"> 
    <tr> 
    <td class="value1"> 1111</td> 
    <td class="value2"> 222 </td> 
    <td class="value3">333 </td> 
    <td class="value4"> 444</td> 
    </tr> 
    <tr> 
    <td class="value5"> 555</td> 
    <td class="value6"> 666</td> 
    </tr> 
</table> 

выход тогда будет: 222 444 555

Смежные вопросы