2008-11-17 67 views
3
/* I start with this: */ 

<Report> 
    <prop1>4</prop1> 
    <prop2>2255</prop2> 
    <prop3>true</prop3> 
    <prop4>false</prop4> 
    <prop5>true</prop5> 
</Report> 

/* I want this result (change the value of node "prop5"): */ 

<Report> 
    <prop1>4</prop1> 
    <prop2>2255</prop2> 
    <prop3>true</prop3> 
    <prop4>false</prop4> 
    <prop5>false</prop5> 
</Report> 

/* I tried this: */ 

var reportXML:XML = 
    <Report> 
     <prop1>4</prop1> 
     <prop2>2255</prop2> 
     <prop3>true</prop3> 
     <prop4>false</prop4> 
     <prop5>true</prop5> 
    </Report>; 

var myArray:Array = [{xmlNodeName: "prop5", value: false}]; 

for each (var item:Object in myArray) 
{ 
    report.xml[item.xmlNodeName] = item.value.toString(); 
} 

/* But this just adds a new node, resulting in this: */ 

<Report> 
    <prop1>4</prop1> 
    <prop2>2255</prop2> 
    <prop3>true</prop3> 
    <prop4>false</prop4> 
    <prop5>true</prop5> 
    <prop5>false</prop5> 
</Report>; 

回答

4

這似乎是在做你想要什麼。這只是你的代碼,修正了一些錯別字。

 var reportXML:XML = 
      <Report> 
       <prop1>4</prop1> 
       <prop2>2255</prop2> 
       <prop3>true</prop3> 
       <prop4>false</prop4> 
       <prop5>true</prop5> 
      </Report>; 

     var myArray:Array = [{xmlNodeName: "prop5", value: false}]; 

     for each (var item:Object in myArray) 
     { 
      reportXML[item.xmlNodeName] = item.value.toString(); 
     } 

     trace(reportXML); 
+0

我會給你這個榮譽....我現在正在工作。無論是僞代碼還是真實代碼。謝謝。 – 2008-12-03 21:30:16

-2

使用ActionScript 3 E4X語法我想這將是這樣的:

report.prop5[0] = false; 
+0

這也沒有工作。這創建了一個具有不同名稱空間的新節點(名稱空間基於我所在類的名稱)。 – 2008-11-17 16:48:38

1

我只是驗證了這個工程:

private var reportXML:XML = 
    <Report> 
     <prop1>4</prop1> 
     <prop2>2255</prop2> 
     <prop3>true</prop3> 
     <prop4>false</prop4> 
     <prop5>true</prop5> 
    </Report>; 

private function changeXML():void { 
    reportXML.prop5[0] = 'false'; 
    trace(reportXML.prop5); // traces 'false' 
} 
+0

這仍然不能回答我的原始問題。看看我的原始示例 - 我希望這是動態的。我有一個對象數組,指定要更新的節點。發佈這篇文章的目的是爲了找到一種不必將「prop5」硬編碼到我的應用程序中的方法。 – 2008-11-18 16:48:51

1

如果你只有你可以去這樣

var node:XML 
inp = new textfield(style, node.text()); 
inp.addEventListener(TextEvent.TEXT_INPUT, change, false, 0, true); 
addChild(inp); 

private function change(e:TextEvent):void 
{ 
XML(node.parent())[node.name()][node.childIndex()] = inp.text+e.text; 
} 
2

的對象被創建後,我已經無法爲XML對象中編輯元素和Adobe的文檔」不是個節點如果這是可能的話,則清除。

對於動態設置值,我創建了一個臨時字符串,並在此處添加了所有XML節點和屬性。 然後,您可以簡單地創建指定您的臨時字符串作爲唯一參數的xml對象。

喜歡的東西:

var tempString:String = "<XML_PARENT><SOME_SUB_NODE>"; 
tempString += "<SOMETHING_ELSE value=\"" + someTextField.text + "\"/>"; 
tempString += "</SOME_SUB_NODE></XML_PARENT>"; 

var xmlObj:XML = new XML(tempString); 

現在,如果你追蹤xmlObj,你會得到

<XML_PARENT> 
    <SOME_SUB_NODE> 
     <SOMETHING_ELSE value=""/> 
    </SOME_SUB_NODE> 
<XML_PARENT> 

這將讓你動態分配任何你想要的字符串,然後建立後的XML事實。如果您想要編輯現有的XML對象,那麼它並不完全有用,但是您可以只使用toString()並相應地修改該字符串。 它至少可以幫助開始動態構建XML文件!