Подтвердить что ты не робот

Вопрос PHP DOMDocument: как заменить текст node?

Это мой код, который загружает существующий XML файл или строку в объект DOMDocument:

$doc = new DOMDocument();
$doc->formatOutput = true;

if(is_file($filePath)) {
    $doc->load($filePath);
}
else {
    $doc->loadXML('<rss version="2.0"><channel><title></title><description></description><link></link></channel></rss>');
}
$doc->getElementsByTagName("title")->item(0)->appendChild($doc->createTextNode($titleText));
$doc->getElementsByTagName("description")->item(0)->appendChild($doc->createTextNode($descriptionText));
$doc->getElementsByTagName("link")->item(0)->appendChild($doc->createTextNode($linkText));

Мне нужно перезаписать значение внутри тегов заголовка, описания и ссылки. Последние три строки в приведенном выше коде являются моей попыткой сделать это; но кажется, что как только файл будет создан, текст будет "добавлен" к существующему. Как я могу удалить текстовое содержимое node (предположим DOMNode) и добавить новый текст в одну строку.

ИЗМЕНИТЬ

PS: Если есть встроенный альтернативный (класс или библиотека), который требует меньше LOC для выполнения простых задач, таких как этот, тогда дайте мне знать.

4b9b3361

Ответ 1

Установите DOMNode::$nodeValue вместо:

$doc->getElementsByTagName("title")->item(0)->nodeValue = $titleText;
$doc->getElementsByTagName("description")->item(0)->nodeValue = $descriptionText;
$doc->getElementsByTagName("link")->item(0)->nodeValue = $linkText;

Это перезаписывает существующий контент с новым значением.

Ответ 2

как упомянуто в двух словах

$doc->getElementsByTagName("title")->item(0)->nodeValue = $titleText;

выдаст ошибку, если $titleText = "& is not allowed in Node::nodeValue";

Таким образом, лучшим решением будет

// clear the existing text content $doc->getElementsByTagName("title")->item(0)->nodeValue = "";

// then create new TextNode $doc->getElementsByTagName("title")->item(0)->appendChild($doc->createTextNode($titleText));