1

我有一个带有类名的 HTML 表list

我正在使用以下查询来获取数据。

$elements = $xpath->query("//table[@class='list']/tr/td");
$result = $dom_object->saveHTML($elements->item(0));
var_dump($result);

它工作正常。除了它在结果中添加了 td 。

我的意思是结果看起来像这样

<td>
result data
</td>

有人能告诉我如何从结果数据中删除 td 标签吗?

4

2 回答 2

1

也许你正在寻找类似的东西

<?php
$doc = new DOMDocument;
$doc->loadhtml( data() );
$xpath = new DOMXPath($doc);
$elements = $xpath->query("//table[@class='list']/tr/td");


// 1)
$result = (string)$elements->item(0)->nodeValue;
var_dump($result);

// 2)
$frag = $doc->createDocumentFragment();
$node = $elements->item(0)->firstChild;
while( $node ) {
    $frag->appendChild( $node->cloneNode(true) );
    $node = $node->nextSibling;
}
$result = $doc->saveXML($frag);
var_dump($result);


function data() {
    return <<< eoh
<html>
    <head><title>...</title></head>
    <body>
        <table class="list">
            <tr><td>result data<br />foo</td></tr>
            <tr><td>...</td></tr>
        </table>
    </body>
</html>
eoh;
}

印刷

string(14) "result datafoo"
string(19) "result data<br/>foo"
于 2013-08-05T06:44:00.363 回答
0

如果每个单元格只有一个文本节点(即没有其他标记),您可以选择

//table[@class='list']/tr/td/text()

它选择<td/>. 如果有标记但仍然只有一个文本节点,如 in <td><em>foo</em></td>,您可以使用

//table[@class='list']/tr/td//text()

如果它包含多个文本节点,您将收到多个不再按表格单元分组的结果节点。

于 2013-08-05T09:17:58.787 回答