PDA

View Full Version : Adding parent tag based on child attribute


mfsiddiq
07-02-2008, 05:47 AM
Hello everyone

May i know how i can add a parent tag to my xml based on child node attributes.For eg if this is my xml

<data>
<mango attr='sweet'>mangoCategory</mango>
<orange attr='sour'>orangeCategory</orange>
<chilly attr='spicy'>chillyCategory</chilly>
<banana attr='sweet'>bananaCategory</banana>
</data>

The o/p should look like this
<data>
<attr='sweet'>
<mango attr='sweet'>mangoCategory</mango>
<banana attr='sweet'>bananaCategory</banana>
</attr>
<attr='sour'>
<orange attr='sour'>orangeCategory</orange>
</attr>
<attr='spicy'>
<chilly attr='spicy'>chillyCategory</chilly>
</attr>

</data>

wvxvw
07-02-2008, 09:15 AM
var xml:XML = <data>
<mango attr='sweet'>mangoCategory</mango>
<orange attr='sour'>orangeCategory</orange>
<chilly attr='spicy'>chillyCategory</chilly>
<banana attr='sweet'>bananaCategory</banana>
</data>;
function sortByAttr(xl:XML):XML
{
var list:XMLList = xl.*;
var xn:XML;
const at:XML = <attr attr=""/>;
var atc:XML;
var foo:XML = <foo/>;
for each (xn in list) {
if(xn.name() == at.name()) continue;
if(!foo.attr.length()) {
atc = at.copy();
atc.@attr = xn.@attr;
foo.appendChild(atc);
}
if (foo.attr.(@attr == xn.@attr).length()) {
foo.attr.(@attr == xn.@attr)[0].appendChild(xn);

} else {
atc = at.copy();
atc.@attr = xn.@attr;
foo.appendChild(atc);
foo.attr.(@attr == xn.@attr)[0].appendChild(xn);
}
}
xl.replace('*', foo.children());
trace(xl.toXMLString());
return xl;
}
sortByAttr(xml);