Php 将DOMDocument中的特定元素导出为字符串
我正在使用Php 将DOMDocument中的特定元素导出为字符串,php,html,domdocument,Php,Html,Domdocument,我正在使用loadHTML()函数将一些任意HTML导入DOMDocument,例如: $html = '<p><a href="test.php">Test</a></p>'; $doc = new DOMDocument; $doc->loadHTML($html); $html=''; $doc=新文档; $doc->loadHTML($html); 然后,我想使用DOMDocument方法更改一些属性/节点值,这样做没有问题 完成
loadHTML()
函数将一些任意HTML导入DOMDocument
,例如:
$html = '<p><a href="test.php">Test</a></p>';
$doc = new DOMDocument;
$doc->loadHTML($html);
$html='';
$doc=新文档;
$doc->loadHTML($html);
然后,我想使用DOMDocument
方法更改一些属性/节点值,这样做没有问题
完成这些更改后,我希望导出HTML字符串(使用->saveHTML()
),而不使用..
标记,DOMDocument
会自动添加到HTML中
我理解为什么要添加这些标签(以确保文档有效),但我如何才能恢复编辑的HTML(基本上是
标签之间的所有内容)
我已经读过了,虽然它提供了一些解决方案,但我更愿意“正确地”这样做,即在
标记上不使用字符串替换。HTML的有效性不是问题,因为它是通过HTML净化器运行的
有什么想法吗?谢谢
编辑
我知道在PHP5.3.6中,$node
参数添加到了saveHTML()
,不幸的是,我被5.2卡住了。也许这样做会有所帮助-他们使用正则表达式去除不必要的字符串:
$content=preg\u replace(数组(“/^\尝试使用DOMDocument->saveXML()
它输出
谢谢,但我不一定知道正文中第一个标记的类型,它需要是通用的
我没有看到“DOMDocument saveHTML without HTML wrapper?”尽管进行了搜索,但其中的一个答案将其排序(使用loadXML()
,然后使用saveHTML()
)。非常感谢指针:-)谢谢,但我不一定知道正文中第一个标记的类型,它需要是泛型的
$content = preg_replace(array("/^\<\!DOCTYPE.*?<html><body>/si",
"!</body></html>$!si"),
"",
$this->saveHTML());
return $content;
<?php
$html = '<p><a href="test.php">Test</a></p>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$domnodelist = $doc->getElementsByTagName('p');
$domnode = $domnodelist->item(0);
echo $doc->saveXML($domnode);
?>
$domnodelist = $doc->getElementsByTagName('*');
$domnode = $domnodelist->item(0);
echo $doc->saveXML($domnode);