如何编写xpath转换结果

时间:2010-11-05 20:48:00

标签: php dom xpath

一旦我在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>";   
}

2 个答案:

答案 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