在php <table> </table>中用dom替换标记

时间:2014-06-20 05:37:37

标签: php dom removechild

我想跟踪al标签并用[table]替换它。我可以知道如何通过PHP中的html解析器来做到这一点?

例如:

hello there

<table><tr><td>Some text</td></tr></table>

some text

<table><tr><td>Some text</td></tr></table>

some text

<table><tr><td>Some text</td></tr></table>

到:

hello there

[table]

some text

[table]

some text

[table]

我可以知道如何使用removechild来替换table标签并替换child?

感谢。

2 个答案:

答案 0 :(得分:0)

<强> view.html

hello there
<table><tr><td>Some text</td></tr></table>
some text
<table><tr><td>Some text</td></tr></table>
some text
<table><tr><td>Some text</td></tr></table>

<强> parse.php

<?php
// Example: Load your view (html) into a string
$html = file_get_contents("view.html");

while(strpos($html, "<table>") !== false) {
    $start = strstr($html, '<table>', true);
    $end   = substr(strstr($html, '</table>'), 8);
    $html  = $start ."[table]" . $end;
}

echo $html;

<强>输出

hello there
[table]
some text
[table]
some text
[table]

答案 1 :(得分:0)

您可以使用新的textnode替换所有<table>元素:

$tables = $doc->getElementsByTagName('table');

while ($table = $tables->item(0)) {
    $table->parentNode->replaceChild(
        $table->ownerDocument->createTextNode('[table]'),
        $table
    );
}

echo $doc->saveHTML();

重要的是,在您从文档中删除表格时,订单也会发生变化。因此,我使用了while循环,只要还有表,条件就会继续。

如果没有其他表格,$tables->item(0)将返回NULL,等于FALSE。循环将退出。

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>

    hello there

    [table]

    some text

    [table]

    some text

    [table]</div></body></html>

这是完整示例(Demo):

<?php
/**
 * @link http://stackoverflow.com/questions/24320608/replace-table-tag-with-dom-in-php
 * @link https://eval.in/165745
 */

$html = <<<HTML
<div>

    hello there

    <table><tr><td>Some text</td></tr></table>

    some text

    <table><tr><td>Some text</td></tr></table>

    some text

    <table><tr><td>Some text</td></tr></table>

</div>
HTML;

$doc = new DOMDocument();
$doc->loadHTML($html);

/** @var DOMNodeList|DOMElement[] $tables */
$tables = $doc->getElementsByTagName('table');

while ($table = $tables->item(0)) {
    $table->parentNode->replaceChild(
        $table->ownerDocument->createTextNode('[table]'),
        $table
    );
}

echo $doc->saveHTML();