Question

J'utilise Adobe Flex / Air ici, mais pour autant que je sache, cela s'applique à tout le JavaScript. J'ai rencontré ce problème à quelques reprises et il doit y avoir une solution facile!

Supposons que je dispose du code XML suivant (avec e4x):

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

Je peux modifier le contenu du noeud d'exemple à l'aide du code suivant:

xml.example = "bar";

Cependant, si j'ai ceci:

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

Comment modifier le contenu du nœud racine?

xml = "bar";

Évidemment, cela ne fonctionne pas car j'essaie d'assigner une chaîne à un objet XML.

Était-ce utile?

La solution

Il semble que vous confondiez les variables avec les valeurs qu’elles contiennent. La mission

node = textInput.text;

change la valeur indiquée par la variable noeud , cela ne change rien à l'objet pointé par noeud . Pour faire ce que vous voulez, vous pouvez utiliser la méthode setChildren de la classe XML :

node.setChildren(textInput.text)

Autres conseils

Ah merci Theo - il semble en effet que j’étais confus là-bas. Je pense que la racine de la confiance vient du fait que j'ai pu assigner

textInput.text = node; 

Ce que je suppose maintenant, c’est qu’implicite appelle XML.toString () pour convertir XML- > String. setChildren () est ce que je cherchais.

Si vous essayez de modifier l'élément racine d'un document, vous n'avez pas vraiment besoin de - jetez simplement le document existant et remplacez-le. Vous pouvez également envelopper votre élément dans un élément racine plus approprié (vous ne devriez pas éditer le nœud racine de toute façon) et vous seriez défini.

Bien sûr, cela ne répond pas à votre question. Il y a un vilain bidouillage de JS qui peut faire ce que vous voulez, mais gardez à l'esprit qu'il est probablement beaucoup plus lent que ce qui précède. Quoi qu'il en soit, la voici:

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

Vous pouvez ignorer le commentaire fix_syntax_highlighter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top