2012-10-27 61 views
1

的參考例子,我發現刪除XML對象的節點是非常難

var x1:XML = <x1> 
       <a id = "52">AYY</a> 
       <a>AYY 2 </a> 
       <b>BEE</b> 
       <c>CEE</c> 
      </x1>; 

trace(x1.toXMLString()); 
trace("___________"); 

delete [email protected]; 

trace(x1.toXMLString()); 
trace("___________"); 

delete x1.b; 

trace(x1.toXMLString()); 
trace("___________"); 

delete x1.a; 

trace(x1.toXMLString()); 

輸出

<x1> 
    <a id="52">AYY</a> 
    <a>AYY 2</a> 
    <b>BEE</b> 
    <c>CEE</c> 
</x1> 
___________ 
<x1> 
    <a>AYY</a> 
    <a>AYY 2</a> 
    <b>BEE</b> 
    <c>CEE</c> 
</x1> 
___________ 
<x1> 
    <a>AYY</a> 
    <a>AYY 2</a> 
    <c>CEE</c> 
</x1> 
___________ 
<x1> 
    <c>CEE</c> 
</x1> 

如果我只是想刪除一個元素?或者我想刪除那個沒有子元素的元素?

我只能使用delete x1.a.荒謬!我花了幾個小時,找不到一個簡單的方法。

var list:XMLList = x1.elements('a'); 
for each(var x:XML in list){ 
    if(....){ 
     //make something done 
     //i want to delete this x from the xml object.while keep other node untouched. 
    } 
} 

讓我知道你處理這個問題的方式。

回答

2

它很容易...看看:

var x1:XML = <x1> 
       <a id = "52">AYY</a> 
       <a>AYY 2 </a> 
       <b>BEE</b> 
       <c>CEE</c> 
      </x1>; 

trace(x1.toXMLString() + "\n"); 

var nodesToDelete:XMLList = x1.a; 

trace(nodesToDelete.toXMLString() + "\n"); 

delete nodesToDelete[0]; 

trace(x1.toXMLString() + "\n"); 

輸出:

<x1> 
    <a id="52">AYY</a> 
    <a>AYY 2</a> 
    <b>BEE</b> 
    <c>CEE</c> 
</x1> 

<a id="52">AYY</a> 
<a>AYY 2</a> 

<x1> 
    <a>AYY 2</a> 
    <b>BEE</b> 
    <c>CEE</c> 
</x1> 

而且你甚至可以做這個:

delete x1.a[0]; 
2

您可以使用完整的E4X語法來匹配樹中的節點並刪除這些節點。例如這樣的:

var x1:XML = 
    <x1> 
     <a id="52">AYY</a> 
     <a>AYY 2</a> 
     <b>BEE</b> 
     <c>CEE</c> 
    </x1>; 

trace(x1.toXMLString()); 

delete x1.a.(hasOwnProperty('@id') && @id=='52')[0]; 

trace('---'); 
trace(x1.toXMLString()); 

輸出:

<x1> 
    <a id="52">AYY</a> 
    <a>AYY 2</a> 
    <b>BEE</b> 
    <c>CEE</c> 
</x1> 
--- 
<x1> 
    <a>AYY 2</a> 
    <b>BEE</b> 
    <c>CEE</c> 
</x1>