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

标签 php html xpath xhtml domdocument

我需要从 TH childNODES 获取 childNodes 的 xhtml 数据

<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>";
}

最佳答案

或者,您可以只指出行本身,然后使用 ->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

关于php - 无法使用php中的xquery从xhtml获取带有xpath的两个子元素来操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27127566/

相关文章:

php - 将 eBay API 目标站点从美国更改为英国

html - 哪种 HTML5 形式的 javascript polyfill 具有最广泛的功能和浏览器覆盖范围?

javascript - 使用 JavaScript 比较两个 json 文件 ID 值作为比较因素并显示相应的匹配项

php - 在 xpath 查询中使用 php 变量

java - JAXB:package.package.<Type> 已在 package.package.<Type>.<Type> 中定义

java - PDFLib 在 PHP 中获取图层名称和句柄

php - 使用 Doctrine 抽象 CRUD 操作

php - 拉拉维尔 5 : How to find the id of a row based on another field?

javascript - 私有(private)菜单,大小灵活

xml - 使用 Xpath 检查 XML 中重复节点下的节点是否存在