Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-01-2006, 17:05   #1 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
XML Iterator

Guten Tag liebe Flasher,

hier mal 2 kleine XML Iteratoren die einen XML Tree liniear durchlaufen, wenn man das so nennen will / kann .

und zwar folgende XML Struktur, letztlich ist die struktur egal
Code:
<data>
<node id="1">
    <node id="1_1" />
    <node id="1_2" />
    <node id="1_3" />
</node>
<node id="2" />
<node id="3" />
<node id="4">
    <node id="4_1" />
    <node id="4_2">
        <node id="4_2_1" />
        <node id="4_2_2" />
        <node id="4_2_3" />
    </node>
    <node id="4_3" />
</node>
<node id="5" />
</data>
jetzt will ich den Tree so durchlaufen das ich in einen knoten springe wenn dieser kinderknoten hat. die ausgabe soll wie folgt aussehen

ID: 1
ID: 1_1
ID: 1_2
ID: 1_3
ID: 2
ID: 3
ID: 4
ID: 4_1
ID: 4_2
ID: 4_2_1
ID: 4_2_2
ID: 4_2_3
ID: 4_3
ID: 5

das gleiche soll nun auch rückwärts loofen
also das die ausgabe dann so ausschaut

ID: 5
ID: 4_3
ID: 4_2_3
ID: 4_2_2
ID: 4_2_1
ID: 4_2
ID: 4_1
ID: 4
ID: 3
ID: 2
ID: 1_3
ID: 1_2
ID: 1_1
ID: 1

im anhang findet Ihr 2 klassen die diese Aufgabe nun übernehmen, Wäre nett wenn jemand ein paar gute Namen für die Klassen hätte und mögliche Ideen. Derzeit heißen die Klassen XMLForwardIterator und XMLBackwardIterator und die passen mir eigentlich gar nicht . Zudem gibt es einen depthCursor der einem die aktuelle tiefe zurückgibt.


mfg
alex
Angehängte Dateien
Dateityp: zip Iteratoren.zip (1,1 KB, 51x aufgerufen)
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 28-01-2006, 19:57   #2 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
Habs mir nicht angesehen aber wenn es das ist was ich denke dann wäre das
PHP Äquvalent der XMLReader. Bei Java
siehts afair ähnlich aus.
__________________
elias ist offline   Mit Zitat antworten
Alt 29-01-2006, 08:02   #3 (permalink)
Banned
 
Benutzerbild von _level0
 
Registriert seit: Jan 2006
Beiträge: 849
hi ich suchte gerade was um alle knoten eines xml objektes durchlaufen zu lassen...

und hab mir nun 15 minuten deine forward klasse angesehen...

muss ich die so aufrufen:
PHP-Code:
//HZL
import XMLForwardIterator;

var 
myFwIter = new XMLForwardIterator(myXML);
_global.count:Number 0;
_global.maxDepth:Number 0;

//MC
this.onEnterFrame = function(){
myCheck=myFwIter.next();
myDepth=myFwIter.getDepth();
if (
myFwIter.next() != null){
trace(myFwIter.getDepth()+"_"+myFwIter.next().toString);
if (
_global.maxDepth<myDepth){
_global.maxDepth=myDepth
};
if (
myDepth==0){
_globalNodeCount++;
};
_global.count++;
} else {
trace("XML Object wurde in "+_global.count+" Durchläufen durchlaufen und hat "+(_global.count-_globalNodeCount-1)+" Knoten und childknoten insgeamt");
delete this.onEnterFrame;
}

blöd frag

.... was ich bei klassen immer so hasse... die leute entwickeln sie weil sie eine wichtige funktionalität brauchen, aber wenn die klasse fertig ist bekommt man kein beispiel dazu und muss sie selbst auseinandernehmen .. dann kamma se auch gleich sebst schreiben .. dauert vom denkprozess genausolang.... [OT] rummotz[/OT]

Geändert von _level0 (29-01-2006 um 08:26 Uhr)
_level0 ist offline   Mit Zitat antworten
Alt 29-01-2006, 08:10   #4 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
LOL haste recht, ist allerdings sonst nicht meine art ohne beispiel was rauszugeben war gestern aber etwas zu bequem
also das ganze kannst du so anwenden

PHP-Code:
= new XML()
// ... enlesen eines XML Doc´s

var xfi XMLForwardIterator = new XMLForwardIteratorx.firstChild );

var 
node XMLNode;
while( 
node xfi.next() ) {
    
trace"Depth: " xfi.getDepth() );
    
trace"ID: " node.attributes.id );
    
trace"---------------------------------------" );


damit kannst du das ganze schön easy durchlaufen.

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 06-02-2006, 10:04   #5 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
hi atothek,
wir hatten ja schon das vergnügen bezüglich dieses threads.

ich finde deine iterator klasse super gut, bin allerdings noch ziemlich am basteln, um es auf meine (zugegeben speziellen) wünsche zurechtzuschustern.

Am liebsten wäre es mir sogar, das script direkt in meine FLA zu packen, denn ich baue mir darin einen MovieClip, den ich später gerne in andere FLAs kopieren können möchte. Und ich finde es bequemer, nicht immer die AS klasse mitkopieren zu müssen.

Kannst du mir vielleicht so ganz einfach mal sagen, ob es umständlich wäre, deine klasse in die zeitleiste eines MCs zu transferieren?

und wenn du viel zeit hast, kannst du mir vielleicht noch so ein, zwei stichwörter sagen, die mir helfen könnten, das zu machen?

gruß, twister
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 06-02-2006, 15:52   #6 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
Hi twister,

ich schreib dir heute abend mal was dazu bin gerade zu busy

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 07-02-2006, 07:29   #7 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
Kleines update da hatte sich doch noch ein kleiner fehler eingeschlichen

Ich sitze gerade an einem Tree Beispiel, heute Abend kommt dann mehr

mfg
alex
Angehängte Dateien
Dateityp: zip Iteratoren.zip (1,8 KB, 37x aufgerufen)
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 10-02-2006, 21:26   #8 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
cool, danke!
ich weiß zwar nicht, was sich geändert hat, aber bugfixe sind immer gut :-)

die letzten tage war ich zwar weg, aber das thema ist nach wie vor eine wichtige baustelle für mich.

Ich versuche ja immer noch herauszufinden, wie ich den code aus deiner klasse direkt in einen MC schreiben kann, aber ich bin noch dran ...

gruß, twister
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 10-02-2006, 22:09   #9 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
Hey twister ich denke ich werd am WE nen beispiel zusammen schustern stichwort Tree . also ichb verstehe nicht warum du den code in die timeline verlegen willst??? aber ansich nimmste das hier dann gehts
ist mal auf die schnelle rübergeholt

PHP-Code:
function XMLForwardIteratordata XMLNode ) {
    
this.data data;
    
this.current null;
    
this.finished null;
    
this.depth null;
    
    
this.reset();
}

var 
pro XMLForwardIterator.prototype;

pro.reset = function(){
    
this.current null;
    
this.finished false;
    
this.depth 0;
}

pro.next = function() : XMLNode {
    if( 
this.current == null && !this.finished )
        
this.current this.data.firstChild;
    else if( !
this.finished )
        
this.current this.move();
    
    if( 
this.current == null )
        
this.finished true;
    return 
this.current;
}

pro.getDepth = function() : Number {
    return 
this.depth;
}

pro.move = function() : XMLNode {
    
    if( 
this.current.childNodes.length <= || ( this.current.childNodes.length && this.current.firstChild.nodeType == ) ) {
        if( 
this.current.nextSibling != undefined )
            return 
this.current.nextSibling;
        else {
            if( 
this.current.parentNode != data ) {
                
this.depth--;
                if( 
this.current.parentNode.nextSibling != undefined )
                    return 
this.current.parentNode.nextSibling;
                else {
                    var 
XMLNode this.current.parentNode;
                    while( 
n.nextSibling == undefined && != undefined && != this.data.firstChild ) {
                        
this.depth--;
                        
n.parentNode;
                    }
                    return 
n.nextSibling;
                }
            } else
                return 
null;
        }
    } else if( 
this.current.childNodes.length ) {
        
this.depth++;
        return 
this.current.firstChild;
    }
}

delete pro;


var 
XML null;
var 
xfi null;

= new XML();
x.ignoreWhite true;
x.parseXMLtxt.text );

txt.text '';

xfi = new XMLForwardIteratorx.firstChild );
var 
0
while ( 
node xfi.next() ) {
    var 
depth xfi.getDepth();
    var 
mc createMc"item" i);
    
mc._x 20 + ( 15 depth );
    
mc._y 20 + ( mc._height ) * i;
    
mc.labelTxt.text node.attributes.title != undefined node.attributes.title node.firstChild.nodeValue
    i
++
}


function 
createMcnamedepth ){
    var 
mc createEmptyMovieClipnamedepth );
    
mc.beginFill0xcc3300100 );
    
mc.lineTo014 );
    
mc.lineTo10014 );
    
mc.lineTo100);
    
mc.lineTo0);
    
mc.endFill();
    
mc.createTextField"labelTxt"100010014 );
    
    return 
mc;

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 11-02-2006, 17:34   #10 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
vielen dank, alex!
der grund, warum ich das machen will:
ich möchte mir ein akkordeon-menü bauen, was sich automatisch aus einer xml-datei dynamisch aufbaut.

ein beispiel habe ich schonmal hier gebaut:
http://www.vivavision.de/hoermann/a

dieses menü baut sich dynamisch aus arrays bis in die vierte navigationsebene auf.
allerdings habe ich da noch einen ziemlich umständlichen code programmiert, der zudem wie gesagt nur bis in die verite navigationsebene geht.

wenn ich irgendwann mal ein menü gebaut habe, was sich dynamisch durch eine xml-struktur aufbaut, möchte ich dieses menü als einen gesamten movieclip vorliegen haben. diesen movieclip möchte ich dann als gesamtes kopieren können.
wenn ich den code in der klasse lassen würde, müsste ich zu jeder zukünftigen webseite, in der ich das menü benutze, die *.as datei kopieren.
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele