Domanda

Sto utilizzando Adobe Flex/Air qui, ma per quanto ne so questo vale per tutto JavaScript.Mi sono imbattuto in questo problema alcune volte e deve esserci una soluzione semplice là fuori!

Supponiamo di avere il seguente XML (usando e4x):

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

Posso modificare il contenuto del nodo di esempio utilizzando il seguente codice:

xml.example = "bar";

Tuttavia, se ho questo:

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

Come posso modificare il contenuto del nodo radice?

xml = "bar";

Ovviamente non funziona mentre sto tentando di assegnare una stringa a un oggetto XML.

È stato utile?

Soluzione

Sembra che tu confonda le variabili per i valori che contengono.L'incarico

node = textInput.text;

cambia il valore di variabile node punta, non cambia nulla con l'oggetto that node attualmente punta a.Per fare quello che vuoi puoi usare il file setChildren metodo del XML classe:

node.setChildren(textInput.text)

Altri suggerimenti

Ah grazie Theo, in effetti sembra che fossi confuso lì.Penso che la radice della confusione provenisse dal fatto che ero in grado di assegnare

textInput.text = node; 

Che ora immagino sia semplicemente chiamare implicitamente XML.toString() per convertire XML->String.setChildren() è quello che stavo cercando.

Se stai tentando di modificare l'elemento radice di un documento, non è realmente necessario: basta eliminare il documento esistente e sostituirlo.In alternativa, racchiudi semplicemente il tuo elemento in un elemento root più appropriato (non dovresti comunque modificare il nodo root) e sarai a posto.

Naturalmente questo non risponde alla tua domanda.C'è un brutto hack JS che può fare quello che vuoi, ma tieni presente che probabilmente è molto più lento di quanto sopra.Comunque eccolo qui:

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

Puoi ignorare il commento fix_syntax_highlighter.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top