无法使用php中的xquery从xhtml获取带xpath的子元素来操作

时间:2014-11-25 13:05:11

标签: php html xpath xhtml domdocument

我需要获取childNodes的xhtml数据我不需要来自TH childNODES的孩子

<table>some data</table>
<table>
 <tr>
     <td class="c2">PCI Signal Error (SERR#) Enable</td>
     <td>Yes</td>
</tr> 
<tr>
     <td class="c1">Controller Type 1</td>
     <td>CISS</td>
 </tr>
  <tr>
     <td class="c2">bus type</td>
     <td>CISS</td>
  </tr>
<tr>
     <th><a name="systempcibus5">PCI Bus 31</a></th>
     <td>Device<a href="#system"></a></td>
</tr>
</table>

下面是最新的尝试,我只想在上面的xml中获取TD的textContent

所以我可以构建一个mysql语句来插入mySql中的数据

上周我尝试了很多变化。

我收到此错误。我不会厌倦我尝试的所有各种事情,但我相信这是我最接近我想要的东西。

PHP注意:尝试在第40行的C:\ inetpub \ wwwroot \ reports \ gec \ test1.php中获取非对象的属性

<?php

libxml_use_internal_errors(true);
$dom = new DomDocument;
$dom->loadHTML($html);
$xpath = new DomXPath($dom);
$nodes = $xpath->query('/html/body/table[2]/tr');
//$nodes = $xpath->query("//tr[contains(concat(' ', @class, ' '), ' head ') ");
//header("Content-type: text/plain");
        $node_count=$nodes->length ;

for( $i = 1; $i <= intval($node_count); $i++)
{
    $node_td1 = $xpath->query('/html/body/table[2]/tr[$i]/td[1]');
    $node_td2 = $xpath->query('/html/body/table[2]/tr[$i]/td[2]');

    $result1=$node_td1->textContent;

    $result2=$node_td2->textContent;

    echo $result1 . "," . $result2 . "<br>";
}

1 个答案:

答案 0 :(得分:1)

或者,您可以指出行本身,然后使用->tagName过滤掉它们:

$dom = new DomDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DomXPath($dom);
$rows = $xpath->query('/html/body/table[2]/tr');

foreach ($rows as $row) {
    foreach($row->childNodes as $col) {
        if(isset($col->tagName) && $col->tagName != 'th') {
            echo $col->textContent . '<br/>';
        }
    }
    echo '<hr/>';
}

或者使用xpath,引用每一行:

foreach ($rows as $row) {
    $col1 = $xpath->evaluate('string(./td[1])', $row);
    $col2 = $xpath->evaluate('string(./td[2])', $row);
    echo $col1 . '<br/>';
    echo $col2 . '<br/>';
    echo '<hr/>';
}

Sample Output