tag preservewhitespace nodo name ejemplo domelement desde como acceder php xml rss domdocument nodes

preservewhitespace - Pregunta PHP DOMDocument: ¿cómo reemplazar el texto de un nodo?



php document (2)

Establezca DOMNode::$nodeValue en DOMNode::$nodeValue lugar:

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

Esto sobrescribe el contenido existente con el nuevo valor.

Este es mi código que carga un archivo o cadena XML existente en un objeto 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));

Necesito sobreescribir el valor dentro del título, la descripción y las etiquetas de enlace. Las últimas tres líneas en el código anterior son mi intento de hacerlo; pero parece que una vez que se crea el archivo, el texto se "anexará" al existente. ¿Cómo puedo vaciar el contenido de texto de un nodo (DOMNode, supongo) y anexar texto nuevo en una línea?

EDITAR

PD: Si hay una alternativa incorporada (una clase o biblioteca) que requiere menos LOC para realizar tareas simples como esta, házmelo saber.


como dijo doub1ejack

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

dará error si $titleText = "& is not allowed in Node::nodeValue";

Entonces, la mejor solución sería

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

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