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));