PDA

Volledige versie bekijken : xml length opvragen


LLMM
%Europe/Berlin %616 %2008, 15:48
hoi ,
weet iemand hoe ik de lengte van mijn xml te weten kan komen ?

dit is wat ik geprobeerd heb

private function FillTree(event:ResultEvent):void
{
var xml:XML = new XML(event.result);
xmlData = xml.results;

var len:uint = xmlData.length; ===> geeft 1
var len:uint = xmlData.Children().lenght =====> geeft 4

for(var i:uint = 0; i < len ; i++)
{
var id:String = xml..@id[i];
var name:String = xml..@name[i];

trace(len + " : "+ id + " " + name);
ArrStructure.addItem({ data: id , label: name });
}



dit is mijn xml structuur


<results id="1" name="Media showtext="Dit is de root, dus hieronder komen ALLE andere folders" isBranch="true">
<result id="2" name="Coca" showtext="" isBranch="true">
<result id="3" name="Red" showtext="cola red" isBranch="true">
<result id="6" name="Real " showtext="play" isBranch="true"/>
<result id="7" name="Wishmas " showtext="tree" isBranch="true"/>
</result>
<result id="5" name="Light" showtext="" isBranch="true"/>
</result>
<result id="4" name="Truv" showtext="truvo" isBranch="true"/>
<result id="8" name="_NEW" showtext="" isBranch="true"/>
<result id="9" name="_NEW" showtext="" isBranch="true"/>
</results>


wat ik graag als resultaat zou hebben is al de id 's
ook van de <results>

Mr. Black
%Europe/Berlin %642 %2008, 16:24
Maak eerst je XML eens wat duidelijker:

<results id="1" name="Media" showtext="Dit is de root, dus hieronder komen ALLE andere folders" isBranch="true">

<result id="2" name="Coca" showtext="" isBranch="true">

<result id="3" name="Red" showtext="cola red" isBranch="true">

<result id="6" name="Real " showtext="play" isBranch="true"/>
<result id="7" name="Wishmas " showtext="tree" isBranch="true"/>

</result>

<result id="5" name="Light" showtext="" isBranch="true"/>

</result>

<result id="4" name="Truv" showtext="truvo" isBranch="true"/>
<result id="8" name="_NEW" showtext="" isBranch="true"/>
<result id="9" name="_NEW" showtext="" isBranch="true"/>

</results>


Nu kun je zien dat er maar 4 result nodes zijn - in de eerste zitten er nog 2 en in de eerste daarvan nog 2. Zo'n opbouw is natuurlijk mogelijk maar het telkens gebruiken van de naam 'result' maakt het er niet overzichtelijker op.

Als je toch per se alle result nodes wilt hebben zul je een recursieve functie moeten gebruiken.


private function fillTree( event:ResultEvent ):void
{
var xml:XML = XML( event.result );

trace( xml.@id ); // id van de results node

trace( this.countNodes( xml ) ); // aantal nodes
}

private function countNodes( xml:XML ):int
{
var nodes:int = 0;

for each ( var subNode:XML in xml.result )
{
nodes ++;

nodes += this.countNodes( subNode );

trace( subNode.@id, subNode.@name ); // id en name attribuut van ieder node
}

return nodes;
}


Succes nog! :)

LLMM
%Europe/Berlin %719 %2008, 18:15
bedankt voor de moeite Mr Black
maar hij geeft als resultaat => 0

als ik dit doe
for each ( var subNode : XML in xml.result ) => resultaat 0
als ik dit doe
for each ( var subNode : XML in xml.results ) => resultaat 1

TheDutch
%Europe/Berlin %245 %2008, 06:53
Je kunt de XML ook direct op het Tree component gebruiken zonder dat je de XML hoeft om te zetten naar een ArrayCollection. Zie hier voor voorbeeld: http://livedocs.adobe.com/flex/2/langref/mx/controls/Tree.html#includeExamplesSummary

wat ik graag als resultaat zou hebben is al de id 's
ook van de <results>
Dat zou je zo moeten doen:

xml..@id //Geeft een XMLList terug met daarin de id's van alle nodes.

In je root node moet je de attribute "name" nog wel even afsluiten met een dubbele quote :).

LLMM
%Europe/Berlin %367 %2008, 09:49
ik gebruik die array meer voor een combobox op te vullen.
Dus de namen van al de xml tree zouden in een combobox moeten verschijnen
dus dan krijg je zoiets als

Media
Coco
Red
enz.