2012-03-13 58 views
4

我有一個XML,其結構如下;AS3通過子值從XML中刪除子節點

<items> 
    <item>5</item> 
    <item>3006</item> 
    <item>25</item> 
    <item>458</item> 
    <item>15</item> 
    <item>78</item> 
</items> 

如何刪除的項目與價值458只是爲了澄清這一點,我不知道該項目的索引,所以只是要求刪除項目[指數]將不會在這裏做。 我必須按價值刪除。

任何提示?

回答

4

使用E4X過濾和使用功能的過濾器裏面,你可以刪除你想要的節點的可能性:

  • xml.item(文字()==值)會給你你正在尋找的節點爲
  • 的valueOf()會給你你過濾
  • 刪除將刪除節點

所以結合這些相關信息當前節點,你可以這樣做:

var xml:XML=<items> 
    <item>5</item> 
    <item>3006</item> 
    <item>25</item> 
    <item>458</item> 
    <item>15</item> 
    <item>78</item> 
</items>; 

function deleteValue(xml:XML, value:String):void{ 
    xml.item.((text()==value) && (delete parent().children()[valueOf().childIndex()])); 
} 

deleteValue(xml, "458"); 

trace(xml.toXMLString()); 
+1

作品。但讓我想哭。爲了可讀性,我將堅持使用for..loop – WORMSS 2012-03-13 11:55:46

+0

鑑於我訪問了我最初的XML的子組件,我的XML源XML將是一個XMLList(對不起,我剛剛意識到這一點),因此我需要將我的XMLList轉換爲XML首先,這給我一些問題。 – AlBirdie 2012-03-13 13:17:34

+0

沒關係,很棒! – AlBirdie 2012-03-13 13:47:04

7

這應該解決它。順便說一句,這將刪除名稱爲「項目」,已值458

delete xml.(item == "458"); 

遞歸刪除有名稱「項」和值458使用的所有孩子和subchildren所有直接孩子:

delete xml..(item == "458"); 
+0

這對我不起作用。我收到一個異常,指出刪除在XMLList上不起作用。我必須做的:刪除handXML.tile。(@type == boostType)[0]; – DoomGoober 2014-10-17 16:58:45

+0

@DoomGoober這個答案是基於這個特殊的例子,如果你有一個不同的xml結構,肯定是行不通的。請看看問題中提供的示例。你也確定你不是隻刪除第一組標題? – 2014-10-20 07:56:19

+0

我的評論不清楚。但是,刪除xml。(item ==「458」);也不會工作! xml。(item ==「458」)的計算結果爲一個XMLList。刪除不適用於XMLList,僅適用於XML本身。因此,實際獲取XML對象的唯一方法是使用索引器。刪除xml。(item ==「458」)[0]; – DoomGoober 2014-12-17 16:52:01