Проблемы с очисткой таблицы с помощью 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 в одной строке.


person Chords    schedule 03.03.2013    source источник


Ответы (3)


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

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

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

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

person nanobash    schedule 03.03.2013

Разверните свой xpath-запрос:

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

Не уверен, правильно ли я понимаю, если вам нужно текстовое содержимое 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

person Nora    schedule 17.04.2013