Вопрос 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 для выполнения простых задач, таких как этот, тогда дайте мне знать.
Ответы
Ответ 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));