1

我在这里使用 Adob​​e Flex/Air,但据我所知,这适用于所有 JavaScript。我遇到过几次这个问题,并且必须有一个简单的解决方案!

假设我有以下 XML(使用 e4x):

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

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

xml.example = "bar";

但是,如果我有这个:

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

如何更改根节点的内容?

xml = "bar";

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

4

3 回答 3

5

您似乎混淆了变量所包含的值。那作业

node = textInput.text;

更改变量 node指向的值,它不会更改node当前指向的对象的任何内容。要做你想做的事,你可以使用类的setChildren方法XML

node.setChildren(textInput.text)
于 2008-09-15T13:36:18.273 回答
1

啊,谢谢你 Theo - 确实我在那里很困惑。我认为混乱的根源来自我能够分配的事实

textInput.text = node; 

我现在猜测只是隐式调用 XML.toString() 来转换 XML->String。setChildren() 是我正在寻找的。

于 2008-09-15T13:45:53.883 回答
0

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

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

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 注释。

于 2008-09-15T11:04:39.603 回答