Javascript E4X:分配给根节点

Javascript E4X:分配给根节点,javascript,apache-flex,air,e4x,Javascript,Apache Flex,Air,E4x,我在这里使用的是AdobeFlex/Air,但据我所知,这适用于所有JavaScript。我已经遇到这个问题好几次了,一定有一个简单的解决办法 假设我使用e4x拥有以下XML: var xml:XML = <root><example>foo</example></root> 但是,如果我有这个: var xml:XML = <root>foo</root> 显然,这不起作用,因为我正在尝试将字符串分配给XML对象。如果

我在这里使用的是AdobeFlex/Air,但据我所知,这适用于所有JavaScript。我已经遇到这个问题好几次了,一定有一个简单的解决办法

假设我使用e4x拥有以下XML:

var xml:XML = <root><example>foo</example></root>
但是,如果我有这个:

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

显然,这不起作用,因为我正在尝试将字符串分配给XML对象。

如果您试图更改文档的根元素,您实际上不需要-只需扔掉现有文档并替换它即可。或者,只需将您的元素包装在更合适的根元素中,您无论如何都不应该编辑根节点,这样您就可以进行设置

当然,这并不能回答你的问题。有一个丑陋的JS黑客可以做你想做的事情,但请记住,它可能比做上面的慢得多。无论如何,这是:

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

您可以忽略fix\u syntax\u highlighter注释。

如果您试图更改文档的根元素,您实际上不需要-只需扔掉现有文档并替换它即可。或者,只需将您的元素包装在更合适的根元素中,您无论如何都不应该编辑根节点,这样您就可以进行设置

当然,这并不能回答你的问题。有一个丑陋的JS黑客可以做你想做的事情,但请记住,它可能比做上面的慢得多。无论如何,这是:

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

您可以忽略fix\u语法\u高亮注释。

似乎您混淆了变量所包含的值。任务

node = textInput.text;
更改变量节点指向的值,它不会更改节点当前指向的对象的任何内容。要执行您想要执行的操作,可以使用XML类的setChildren方法:


您似乎混淆了变量所包含的值。任务

node = textInput.text;
更改变量节点指向的值,它不会更改节点当前指向的对象的任何内容。要执行您想要执行的操作,可以使用XML类的setChildren方法:


啊,谢谢你,提奥,看来我确实被弄糊涂了。我认为困惑的根源在于我能够分配

textInput.text = node; 

我现在猜这只是隐式调用XML.toString来转换XML->String。我一直在寻找赛特儿童。

啊,谢谢你,提奥——看来我确实被弄糊涂了。我认为困惑的根源在于我能够分配

textInput.text = node; 
我现在猜这只是隐式调用XML.toString来转换XML->String。我一直在寻找孩子