在XML Flex中为根标记添加所有子节点的属性值

时间:2013-04-09 10:13:01

标签: xml flex

无法为子节点添加属性,就像你对大子节点所做的那样。如何做到这一点。我曾经使用过

for each(var node:XML in valueXml.item)
{          
  for(var j:int=0; j<valueXml.length(); j++)
  {
     node.@name = valueXml.item[j].item[0].@name;
  }
}

来自旧的xml:

<item>
  <item name="Subchild1"/>
  <item name="leaf1"/>
  <item name="leaf2"/>
</item>
<item>
  <item name="Subchild2"/>
  <item name="leaf3"/>
  <item name="leaf4"/>
</item>

我需要按如下方式添加它:

 <root>
   <item name="Subchild1">
     <item name="Subchild1"/>
     <item name="leaf1"/>
     <item name="leaf2"/>
   </item>
 <item name="Subchild2">
     <item name="Subchild2"/>
     <item name="leaf3"/>
     <item name="leaf4"/>
 </item>

 我想将每个子节点(“Subchild2”)的第一个子子节点([Subchild2,leaf3,leaf4])作为该子节点的属性名称添加。我如何实现这一点?

2 个答案:

答案 0 :(得分:1)

一旦你想要添加属性的节点,你可以简单地为它的第一个孩子的名字赋值。

var xml:XML = new XML(<root>
  <item>
    <item name="Subchild1"/>
    <item name="leaf1"/>
    <item name="leaf2"/>
  </item>
  <item>
    <item name="Subchild2"/>
    <item name="leaf3"/>
    <item name="leaf4"/>
  </item>
 </root>);


for each (var item:XML in xml.item) {
  item.@name = item.children()[0].@name;
}

答案 1 :(得分:0)

试试这个:

//你的xml

        private var xml:XML = new XML(
            <root>
                <item>
                  <item name="Subchild1"/>
                  <item name="leaf1"/>
                  <item name="leaf2"/>
                </item>
                <item>
                  <item name="Subchild2"/>
                  <item name="leaf3"/>
                  <item name="leaf4"/>
                </item>
            </root>
        );

//函数

    for each (var node:XML in xml.item)
    {
        var attrName:String = node.item[0].@name;
        node.@name = attrName;
    }

// trace给出:

<root>
  <item name="Subchild1">
    <item name="Subchild1"/>
    <item name="leaf1"/>
    <item name="leaf2"/>
  </item>
  <item name="Subchild2">
    <item name="Subchild2"/>
    <item name="leaf3"/>
    <item name="leaf4"/>
  </item>
</root>