2012-02-27 4 views
1

私はID以外のすべての属性を削除し、XMLのすべてのノードを入力したいXMLのすべての子孫から特定の属性を削除するにはどうすればよいですか?

var test:XML = new XML(<record id="5" name="AccountTransactions" 
    <field id="34" type="Nuber"/> 
    </record>); 

のようなXMLを持っています。このコードでは私はこれを行うことができません。あなたはループ以外のより良い解決策を提案できますか?

var atts:XMLListCollection = new XMLListCollection(test.descendants().attributes().((localName() != "id") && (localName() != "type"))); 
atts.removeAll(); trace(test) 

は、それはまだすべての属性を表示:/

+0

uは、感謝を – Triode

答えて

1
var test:XML = new XML('<record id="5" name="AccountTransactions"><field id="34" type="Nuber" score="ded"/><field id="35" type="Nuber" score="sc"/></record>'); 
    var attributes:XMLList = [email protected]*; 
    var length:int = attributes.length(); 
    for (var i:int = 0; i < length; i++) { 
     (attributes[i].localName() != "id" && attributes[i].localName() != "type") ? [delete attributes[i], length--] : void; 
    } 
    trace(test); 
+0

ループなしでこれを行うことはできますか?私は上記のコードで試した。私は非常に大きなXMLを解析する必要があります..ループは時間がかかります –

1
var xml:XML = new XML(
    <record id="5" name="AccountTransactions"> 
     <field id="34" type="Number"> 
      <test id="0"/> 
     </field> 
    </record>); 

//make array of attribute keys, excluding "id" and "type" 
var attributesArray:Array = new Array(); 
for each (var attribute:Object in xml.attributes()) 
{ 
    var attributeName:String = attribute.name(); 
    if (attributeName != "id" && attributeName != "type") 
    { 
     attributesArray.push(attributeName); 
    } 
} 

//loop through filtered attributes and remove them from the xml 
for each (var attributeKey:String in attributesArray) 
{ 
    delete [email protected][attributeKey]; 
    delete xml.descendants()[email protected][attributeKey]; 
} 
+0

あなたは私のために働いたウル正確なXML構造のおかげを投稿することができます! –

関連する問題