2008-09-15 76 views
1

我在这里使用Adobe Flex/Air,但据我所知这适用于所有的JavaScript。我遇到了这个问题几次,并且必须有一个简单的解决方案!E4X:分配到根节点

假设我有下面的XML(使用E4X):

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

我可以使用下面的代码改变的示例节点的内容:

xml.example = "bar"; 

然而,如果我有这样的:

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

如何更改根节点的内容?

xml = "bar"; 

显然不工作,因为我试图将一个字符串分配给一个XML对象。

回答

4

看来你混淆了它们包含的值的变量。分配

node = textInput.text; 

改变价值变量node点,它不与node目前指向的对象改变任何东西。做你想做的事,你可以使用XML类的setChildren方法:

node.setChildren(textInput.text) 
0

如果您试图更改文档的根元素,您并不需要 - 只需扔掉现有文档并将其替换即可。或者,只需将您的元素包装在更合适的根元素中(无论如何您都不应该编辑根节点),并且您将被设置。

当然,这并不能回答你的问题。有一个丑陋的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_syntax_highlighter评论。

1

啊谢谢西奥 - 事实上,似乎我被搞糊涂了那里。我认为confustion的根从其实我是能够分配来

textInput.text = node; 

这一点我想现在只是含蓄调用XML.toString()来转换XML的>字符串。 setChildren()就是我一直在寻找的东西。

相关问题