2008-09-15 5 views
1

ここではAdobe Flex/Airを使用していますが、これはJavaScriptのすべてに適用されます。私はこの問題に数回出くわしました。そこには簡単な解決策があるはずです!私はこれを持っている場合、しかしE4X:ルートノードへの割り当て

xml.example = "bar"; 

:私は、次のコードを使用して、実施例ノードの内容を変更することができる

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

私は(E4Xを使用して)次のXMLがあるとします。

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

ルートノードの内容を変更するにはどうすればよいですか?

xml = "bar"; 

私はXMLオブジェクトに文字列を割り当てようとしているため、明らかに機能しません。

答えて

4

変数に含まれる値に変数を混同しているようです。割り当て

node = textInput.text; 

は、それがnodeが現在指しているオブジェクトには何も変わりませんし変数nodeポイント値を変更します。確かに私はそこに混乱していたようだ -

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

はああはあなたにテオに感謝:あなたはXMLクラスのsetChildrenメソッドを使用することができます何をしたいのかすることができません。私はconfustionのルートは私が今XML->文字列を変換するXML.toStringを呼び出すだけで暗黙的に()であると思いますどの

textInput.text = node; 

を割り当てることができたという事実から来たと思います。 setChildren()は私が探していたものです。

関連する問題