一旦我在foreach中完成了节点转换,我如何获得$ myContent的副本,并完成所有被替换的节点?
echo $ xPath不起作用
$myContent ="<h1>This word should not be replaced: test</h1>.
But this one should be replaced: Test";
@$dom = new DOMDocument;
@$dom->loadHTML($myContent);
$xPath = new DOMXPath(@$dom);
foreach($xPath->query("//text()[contains(.,'test') and not(ancestor::h1)]") as $node)
{
$node->textContent = "<b>".trim($match[1])."</b>";
}
答案 0 :(得分:0)
这里有几件事......
$node->textContent = "<b>".trim($match[1])."</b>";
不应该有效,因为您正在尝试创建一个元素(<b>
),但将其粘贴到父元素的文本内容中。除非PHP DOMNode比文档说的更聪明,否则它不会解析您的<b>
标记并创建新元素。您需要使用createElement()
和createTextNode()
。$node
的textContent应修改$dom
文档,但不会影响$myContent
。要获取修改后的DOM文档的字符串序列化,请使用$ dom-&gt; saveHTML()。答案 1 :(得分:0)
您必须使用$node->nodeValue
代替$node->textContent
此外,您不能在nodeValue中使用'<b>'
。您必须创建DOMElement并将其附加到$ node