gpt4 book ai didi

php - 删除 DOMDocument::saveXML 中的 和 标签

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:09 26 4
gpt4 key购买 nike

我有一部分 html 的结构不完整。示例:

<div id='notrequired'>
<div>
<h3>Some examples :-)</h3>
STL is a library, not a framework.
</div>
</p>
</a>
<a target='_blank' href='http://en.wikipedia.org/wiki/Library_%28computing%29'>Read more</a>;
</div>
<a target='_blank' href='http://en.wikipedia.org/wiki/Library_%28computing%29'>Read more</a>";

正如您在这里注意到的,我有意想不到的 </p></a>标签。

我尝试了一段代码来删除 <div id='notrequired'>它可以工作,但无法精确处理。

这是代码片段:

function DOMRemove(DOMNode $from) {
$from->parentNode->removeChild($from);
}

$dom = new DOMDocument();
@$dom->loadHTML($text); //$text contains the above mentioned HTML

$selection = $dom->getElementById('notrequired');
if($selection == NULL){
$text = $dom->saveXML();
}else{
$refine = DOMRemove($selection);
$text = $dom->saveXML($refine);
}

问题是$dom->saveXML保存为 HTML 内容:

       <?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>

<body>
<a target="_blank" href="http://en.wikipedia.org/wiki/Library_%28computing%29">Read more</a>

</body>
</html>

我只需要:

<a target='_blank' href='http://en.wikipedia.org/wiki/Library_%28computing%29'>Read more</a>

而不是 <HTML><BODY>标签。

我错过了什么?还有其他更好的方法吗?

最佳答案

好的..我想我想出了一个解决方案。方法可能不正确,但它确实有效!

作为Hakre指出它与 innerHTML in PHP's DomDocument? 完全相同,它不是完全重复的,但它给了我使用这个想法的提示。感谢您的建议。

它帮助我制定了以下解决方案:

function DOMRemove(DOMNode $from) {
$from->parentNode->removeChild($from);
}

function DOMinnerHTML($element)
{ echo "Ashwin";
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$tmp_dom = new DOMDocument();
$tmp_dom->appendChild($tmp_dom->importNode($child, true));
$innerHTML.=trim($tmp_dom->saveHTML());
}
return $innerHTML;
}

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
@$dom->loadHTML($test);

$a = $dom->getElementById('step');

$b = DOMRemove($a);
$c = $dom->saveXML($b);

$domTable = $dom->getElementsByTagName("body");

foreach ($domTable as $tables)
{
$x = DOMinnerHTML($tables);
echo $x;
}

如果输入是:

<div id='step'>
<div >
<h3>Some examples :-(</h3>
Blah blah blah...
</div> </p>
</a>
<a target='_blank' href='#'>Read more</a>;
</div>
<div id='step2'>
<div>
<h3>Some examples :-) :-D</h3>
Blah2 blah2 blah2...
</div> </p> </a>
</div>
<a target='_blank' href='#'>Read more</a>
<a target='_blank' href='#'>Read more</a>
<a target='_blank' href='#'>Read more</a>

如预期的那样,输出是:

<div id="step2">
<div>
<h3>Some examples :-) :-D</h3>
Blah2 blah2 blah2...
</div>
</div>
<a target="_blank" href="#">Read more</a>
<a target="_blank" href="#">Read more</a>
<a target="_blank" href="#">Read more</a>

该解决方案有效但可能不是最优的。 有什么想法吗?

关于php - 删除 DOMDocument::saveXML 中的 <html> 和 <head> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com