2008-09-15 24 views
1

Burada Adobe Flex/Air kullanıyorum, ancak bildiğim kadarıyla bu, tüm JavaScript için geçerlidir. Bu soruna birkaç kez rastladım ve orada kolay bir çözüm olmalı!E4X: Kök düğümüne atama

varsayalım Ben aşağıdaki XML (kullanarak e4x):

var xml:XML = <root><example>foo</example></root> 
Aşağıdaki kod kullanılarak, örnek düğümün içeriğini değiştirebilir

: Bu varsa, ancak

xml.example = "bar"; 

:

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

Kök düğümünün içeriğini nasıl değiştiririm? Bir XML nesnesine bir dize atama girişiminde bulunduğumdan emin değilim.

cevap

4

İçerdikleri değişkenler için değişkenleri karıştırırsınız. atama

node = textInput.text; 

, bu node şu andaki hedefi bu nesneyle şey değişmez etmek değişkennode puan değeri değiştirir. Gerçekten orada karışıktı görünüyor -

node.setChildren(textInput.text) 
0

Bir belgenin kök elemanını değiştirmeye çalışıyorsanız, gerçekten yapmanız gerekmiyor — sadece varolan belgeyi dışarı atıp değiştirin. Alternatif olarak, öğenizi daha doğru bir kök öğeye sarın (yine de kök düğümünü düzenlememeniz gerekir) ve ayarlanmış olursunuz.

Elbette, bu sorunuza cevap vermiyor. İstediğinizi yapabileceğiniz çirkin bir JS hack var, ancak yukarıdakileri yapmaktan çok daha yavaş olduğunu unutmayın. Neyse, işte burada:

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

Sen fix_syntax_highlighter yorumunu göz ardı edebilirsiniz.

1

Ah size Theo teşekkür: Eğer XML sınıfının setChildren yöntemi kullanabilirsiniz ne yapmak istediğinizi yapmak için. Ben confustion kök ben atamak başardı aslında geldiğini düşünüyoruz şimdi tahmin

textInput.text = node; 

sadece implicity çağıran XML.toString olan()> Dize, XML dönüştürmek. setChildren() aradığım şey.