Pregunta

Estoy usando Adobe Flex/Air aquí, pero hasta donde yo sé, esto se aplica a todo JavaScript.¡Me he encontrado con este problema varias veces y debe haber una solución fácil!

Supongamos que tengo el siguiente XML (usando e4x):

var xml:XML = <root><example>foo</example></root>

Puedo cambiar el contenido del nodo de ejemplo usando el siguiente código:

xml.example = "bar";

Sin embargo, si tengo esto:

var xml:XML = <root>foo</root>

¿Cómo cambio el contenido del nodo raíz?

xml = "bar";

Obviamente no funciona porque intento asignar una cadena a un objeto XML.

¿Fue útil?

Solución

Parece que confundes las variables con los valores que contienen.La asignación

node = textInput.text;

cambia el valor del variable node apunta, no cambia nada con el objeto que node apunta actualmente.Para hacer lo que quieres hacer puedes usar el setChildren método de la XML clase:

node.setChildren(textInput.text)

Otros consejos

Ah, gracias Theo. De hecho, parece que estaba confundido.Creo que la raíz de la confusión vino del hecho de que pude asignar

textInput.text = node; 

Lo que ahora supongo es simplemente llamar implícitamente a XML.toString() para convertir XML->String.setChildren() es lo que estaba buscando.

Si está intentando cambiar el elemento raíz de un documento, realmente no es necesario: simplemente deseche el documento existente y reemplácelo.Alternativamente, simplemente envuelva su elemento en un elemento raíz más adecuado (no debería editar el nodo raíz de todos modos) y estará listo.

Por supuesto, eso no responde a tu pregunta.Hay un feo truco de JS que puede hacer lo que quieras, pero ten en cuenta que probablemente sea mucho más lento que hacer lo anterior.De todos modos, aquí está:

var xml = <root>foo</root>; // </fix_syntax_highlighter>
var parser = new DOMParser();
var serializer = new XMLSerializer();

// Parse xml as DOM document
// Must inject "<root></root>" wrapper because  
// E4X's toString() method doesn't give it to us
// Not sure if this is expected behaviour.. doesn't seem so to me.
var xmlDoc = parser.parseFromString("<root>" + 
  xml.toString() + "</root>", "text/xml");

// Make the change
xmlDoc.documentElement.firstChild.nodeValue = "CHANGED";

// Serialize back to string and then to E4X XML()
xml = new XML(serializer.serializeToString(xmlDoc));

Puede ignorar el comentario fix_syntax_highlighter.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top