Как написать результат перевода xpath - PullRequest
0 голосов
/ 05 ноября 2010

Как только я выполню преобразование узла в 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 голосов
/ 06 ноября 2010

Вы должны использовать $node->nodeValue вместо $node->textContent Кроме того, вы не можете использовать '<b>' в nodeValue. Вы должны создать DOMElement и добавить его в $ node

0 голосов
/ 06 ноября 2010

Несколько вещей здесь ...

  • $node->textContent = "<b>".trim($match[1])."</b>"; не должно работать, потому что вы пытаетесь создать элемент (<b>), но вставляете его в текстовое содержимое родительского элемента. Если PHP DOMNode не будет умнее, чем сказано в документации, он не будет анализировать вашу <b> разметку и создавать новый элемент. Вы должны сделать это с createElement() и createTextNode().
  • Изменение textContent каждого $node должно изменить документ $dom, но это не повлияет на $myContent. Чтобы получить сериализацию строк измененного документа DOM, используйте $ dom -> saveHTML ().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...