我想跟踪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?
感谢。
答案 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();