你试过这个DOMDocument::saveXML
功能吗?( http://php.net/manual/en/domdocument.savexml.php )
它有第二个参数$node
,您可以使用它指定打印 HTML/XML 的节点。
因此,例如:
<?php
$doc = new DOMDocument('1.0');
// we want a nice output
$doc->formatOutput = true;
$root = $doc->createElement('body');
$root = $doc->appendChild($root);
$title = $doc->createElement('h1', 'Home');
$root->appendChild($title);
$text = $doc->createTextNode('test{{test}}');
$text = $root->appendChild($text);
echo $doc->saveXML($root);
?>
这会给你:
<body>
<h1>Home</h1>
test{{test}}
</body>
如果你不想要这个<body>
标签,你可以循环遍历它的所有子节点:
<?php
foreach($root->childNodes as $child){
echo $doc->saveXML($child);
}
?>
这会给你:
<h1>Home</h1>test{{test}}
编辑:你当然可以用{{test}}
你已经在使用的正则表达式替换:
<?php
$xml = '';
foreach($root->childNodes as $child){
$xml .= preg_replace(
'/(?<replaceable>{{([a-z0-9_]+)}})/mi', '',
$doc->saveXML($child)
);
}
?>
这会给你:
<h1>Home</h1>test
注意:我没有测试过代码,但这应该会给你一个大致的想法。