I had mentioned it was un tested :)

try the below (its tested), should get your on the right track, and i'm sure
it can be improved just a quick sample.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="stripoutlevel()"
xmlns:mx="http://www.adobe.com/2006/mxml"; layout="absolute">


 <mx:Script>
  <![CDATA[

   public var myXML:XML = new XML("<root>" +
     "<level1>" +
     "<level2><level3></level3><level3></level3></level2>" +
     "<level2></level2>" +
     "</level1>" +
     "<level1>" +
     "<level2><level3></level3><level3></level3></level2>" +
     "</level1>" +
     "</root>");


  public function stripoutlevel():void{

    var tempLevel1:XML;
    for each (var item:XML in myXML..level2) {
     if (item.children().length() !=0){
      tempLevel1 = item.parent();
      tempLevel1.appendChild(item..level3.copy());
     }
     delete myXML..level2[item.childIndex()];
     }

    trace(myXML);


   }

  ]]>
 </mx:Script>



</mx:Application>


  -----Message d'origine-----
  De : [email protected] [mailto:[EMAIL PROTECTED] la
part de phipzkillah
  Envoyé : mercredi 10 janvier 2007 23:01
  À : [email protected]
  Objet : [flexcoders] Re: XML manipulation


  I can't seem to get that to work...

  --- In [email protected], "Jason Hawryluk" <[EMAIL PROTECTED]> wrote:
  >
  > Yes in that case you would, and before deleting the level 2 append
  level3 to
  > level 2's parent.
  >
  >
  >
  > Kind of (not at all tested) like this..
  >
  >
  >
  > for each (var item:XML in myxml..level2) {
  > item.parent.append(item..level3);
  >
  > delete item;
  >
  > }
  >
  >
  >
  > you may actually need 2 loops one for the delete. If the above technique
  > doesn't work try the copy()
  >
  >
  >
  > item.parent.append(item..level3.copy());
  >
  >
  >
  > sorry no time to actually test anything here.
  >
  >
  >
  > jason
  >
  >
  >
  >
  > -----Message d'origine-----
  > De : [email protected]
  [mailto:[EMAIL PROTECTED] la
  > part de phipzkillah
  > Envoyé : mercredi 10 janvier 2007 21:58
  > À : [email protected]
  > Objet : [flexcoders] Re: XML manipulation
  >
  >
  > That makes sense and I guess I should have rephrased my question. I
  > have multiple levels of level1 and I need to preserve the hierarchy.
  > I would assume you would need a for loop to do this. Any ideas?
  >
  > <level1>
  > <level2>
  >
  > <level3/>
  > <level3/>
  > <level3/>
  >
  > </level2>
  > </level1>
  >
  > <level1>
  > <level2>
  >
  > <level3/>
  > <level3/>
  >
  > </level2>
  > </level1>
  >
  > Transformed to...
  >
  > <level1>
  >
  > <level3/>
  > <level3/>
  > <level3/>
  >
  > </level1>
  >
  > <level1>
  >
  > <level3/>
  > <level3/>
  >
  > </level1>
  > --- In [email protected], "Jason Hawryluk" <jh@> wrote:
  > >
  > > Yes; basically
  > >
  > > Grab level3 into an xmllist var
  > >
  > > delete level 2 append level 3 to level 1.
  > >
  > > var tempxml:XMLList = myxml..level3;
  > > delete myxml.level2;
  > > myxml.append(tempxml);
  > >
  > > the above code is off the top of my head. May and may not work :)
  > >
  > > jason
  > >
  > >
  > > -----Message d'origine-----
  > > De : [email protected]
  [mailto:[EMAIL PROTECTED] la
  > > part de phipzkillah
  > > Envoyé : mercredi 10 janvier 2007 21:28
  > > À : [email protected]
  > > Objet : [flexcoders] Re: XML manipulation
  > >
  > >
  > > Ben,
  > >
  > > Thanks for your help. It works great!
  > >
  > > I have another question that I'm not sure if you will be able to
  > > answer or not. If I have 3 levels of hierarchy in my XML and I want
  > > to remove level 2 (but not its children - level 3) how would you go
  > > about doing that? Eliminate level 2 while promoting level 3.
  > >
  > > <level1>
  > > <level2>
  > >
  > > <level3/>
  > > <level3/>
  > > <level3/>
  > >
  > > </level2>
  > > </level1>
  > >
  > > Transformed to...
  > >
  > > <level1>
  > >
  > > <level3/>
  > > <level3/>
  > > <level3/>
  > >
  > > </level1>
  > >
  > > --- In [email protected], "ben.clinkinbeard"
  > > <ben.clinkinbeard@> wrote:
  > > >
  > > > Wow, I had no idea deleting a set of nodes would be this hard.
  > > > Apparently this is how its done:
  > > >
  > > > for each(var node:XML in myXML..remove)
  > > > {
  > > > delete(myXML..remove[node.childIndex()]);
  > > > }
  > > >
  > > > HTH,
  > > > Ben
  > > >
  > > >
  > > > --- In [email protected], "phipzkillah" <pkrasko@> wrote:
  > > > >
  > > > > How can I remove a selection of children from an xml tree.
  > > > >
  > > > > var myXML:XML =
  > > > > <root>
  > > > > <cluster>
  > > > > <remove>
  > > > > <garbage/>
  > > > > <garbage/>
  > > > > <garbage>
  > > > > <garbage1/>
  > > > > <garbage2/>
  > > > > <garbage3/>
  > > > > </garbage>
  > > > > </remove>
  > > > > <remove>
  > > > > <garbage>
  > > > > <garbage1/>
  > > > > <garbage2/>
  > > > > </garbage>
  > > > > <garbage/>
  > > > > </remove>
  > > > >
  > > > > <keep>
  > > > > <info/>
  > > > > <info/>
  > > > > <info>
  > > > > <goodStuff/>
  > > > > <goodStuff/>
  > > > > <goodStuff>
  > > > > <good1/>
  > > > > <good2/>
  > > > > </goodStuff>
  > > > > </info>
  > > > > </keep>
  > > > > </cluster>
  > > > > </root>
  > > > >
  > > > > ......................
  > > > >
  > > > > Now I want to keep all the good stuff.
  > > > >
  > > > > I want the final xml tree to look like this:
  > > > > <root>
  > > > > <cluster>
  > > > > <keep>
  > > > > <info/>
  > > > > <info/>
  > > > > <info>
  > > > > <goodStuff/>
  > > > > <goodStuff/>
  > > > > <goodStuff>
  > > > > <good1/>
  > > > > <good2/>
  > > > > </goodStuff>
  > > > > </info>
  > > > > </keep>
  > > > > </cluster>
  > > > > </root>
  > > > >
  > > > > I tried doing this with no luck:
  > > > >
  > > > > myXML = delete myXML..remove;
  > > > >
  > > > > Any ideas why that doesn't work?
  > > > >
  > > >
  > >
  >



  

Reply via email to