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

ああ、テオに感謝します-確かに私はそこで混乱していたようです。混乱の根源は、私が割り当てられたという事実から来たと思います

textInput.text = node; 

私が今推測しているのは、XML.toString()を暗黙的に呼び出してXML->Stringを変換することです。setChildren()は私が探していたものです。

于 2008-09-15T13:45:53.883 に答える
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コメントは無視してかまいません。

于 2008-09-15T11:04:39.603 に答える