Frage

Ich bin mit Adobe Flex / Air hier, aber soweit ich weiß, dies gilt für alle JavaScript. Ich habe über dieses Problem ein paar Mal kommen, und es muss eine einfache Lösung, die dort draußen sein!

Angenommen, ich habe folgendes XML (mit e4x):

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

Ich kann den Inhalt des Knotens Beispiel ändern Sie den folgenden Code:

xml.example = "bar";

Allerdings, wenn ich dies:

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

Wie kann ich den Inhalt des Root-Knotens?

xml = "bar";

Offensichtlich nicht funktioniert, wie ich bin versucht, eine Zeichenfolge in ein XML-Objekt zugewiesen werden soll.

War es hilfreich?

Lösung

Es scheint, dass Sie Variablen für die Werte verwirren sie enthalten. Die Zuordnung

node = textInput.text;

ändert den Wert der Variable node Punkte, ist es nicht etwas mit dem Objekt zu ändern, die derzeit node verweist. Zu tun, was Sie tun möchten, können Sie die setChildren Methode der XML-Klasse verwenden:

node.setChildren(textInput.text)

Andere Tipps

Ah danke Theo - in der Tat scheint, dass ich verwirrt war. Ich denke, dass die Wurzel des confustion aus der Tatsache, kam ich in der Lage war zuweisen

textInput.text = node; 

Was ich jetzt denke nur implicity Aufruf XML.toString () XML-> String zu konvertieren. setChildren () ist das, was ich gesucht habe.

Wenn Sie versuchen, das Stammelement eines Dokuments zu ändern, die Sie nicht wirklich brauchen zu-- nur das vorhandene Dokument werfen und ersetzen. Alternativ einfach wickeln Sie Ihr Element in einem richtigen Wurzelelement (Sie sollen nicht den Wurzelknoten ohnehin bearbeiten), und Sie würden eingestellt werden.

Natürlich, das ist nicht Ihre Frage nicht beantworten. Es ist ein hässlich JS Hack, tun kann, was Sie wollen, aber bedenken Sie, dass es wahrscheinlich weit ist langsamer als die oben tun. Wie auch immer, hier ist es:

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

Sie können den fix_syntax_highlighter Kommentar ignorieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top