2008-09-15 72 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()就是我一直在尋找的東西。

相關問題