• 19.04.2024, 07:55
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

powerslide

unregistriert

xml-baum & rekursion .. need help

Freitag, 22. April 2005, 11:48

Hallo hallo,

ich sitz mal wieder an ner genialen aufgabe..
und zwar..

ich hab xml-dokumente.. diese sind leider beliebig groß
und enthalten beliebig viele rekursive aufrufe

die müssen weg!

steh nur momentan ein wenig auf dem schlauch..

also an nützlichen funktionen hab ich gefunden:

Quellcode

1
2
3
4
5
node.firstChild
child.nextSibling
node.parentNode
hasChildNodes()
removeChild(childNodes)


da ein xml-baum ja eigentlich entartet ist (wächst ja nur in eine richtung) ist es ziemlich einfach den baum vollständig zu durchlaufen.

man ruft quasi sooft node.firstchild auf bis dies None zurückliefert. dabei wird der zählindex "i" erhöht
(damit bewegt man sich tiefer in den baum)

dann ruft man child.nextSibling auf
erhöht ebenfalls einen zählindex "j"
(damit bewegt man sich seitwärts zum bruderknoten quasi)

dann fängt man von vorne an ...

wenn dann nextSibling auch None liefert
springt man mit parentNode eins hoch .. erniedrigt i setzt j auf 0 und versucht nextSibling.

naja das sollte irgendwann darauf hinauslaufen dass i = 1 und nextSibling NONE liefert.. womit der baum vollständig durchlaufen wäre.


das problem was ich nun habe.. die rekursion ..
ich müsste mir quasi immer von einem kind den tagName merken. dieses kind dann vollständig parsen und schauen ob der tagname nochmal vorkommt. wenn ja dann muss ich dieses kind töten. dann muss ich wieder hoch.. eine ebene unterhalb des ersten kindes und das ganze von vorne..

und jezz dreht sich alles bei mir im kopf!

ahhhhhhh! jemand ne idee? wie man sowas umsetzen kann?

slide

Re: xml-baum & rekursion .. need help

Freitag, 22. April 2005, 13:55

kannst du mal ein beispieldokument liefern und daran erklären, was genau du daraus machen willst?

wenn du nach namen suchst, hilft auch getElementByTagName() weiter. zudem gibt ist mit der NodeIrgendwasList noch die möglichkeit, zu iterieren.

powerslide

unregistriert

Re: xml-baum & rekursion .. need help

Freitag, 22. April 2005, 19:11

das mit getElementByTagName() hab ich inzwischen auch gefunden.. ich weiss nur nicht so recht wie ich das begrenze

also hier mal ein bsp:

Quellcode

1
2
3
4
5
6
7
8
9
10
<itemizedlist spacing="compact"> 
            <listitem> 
                <link linkend="sl-mdl-3.00097656250000">absbrake</link> 
                <itemizedlist spacing="compact"> 
                    <listitem> 
                        <link linkend="sl-sys-45.00097656250000">run it</link> 
                    </listitem> 
                </itemizedlist> 
            </listitem> 
        </itemizedlist>


daraus soll das werden:

Quellcode

1
2
3
4
5
6
7
8
9
10
<itemizedlist spacing="compact"> 
            <listitem> 
                <link linkend="sl-mdl-3.00097656250000">absbrake</link> 
                 
                     
                         
                     
                 
            </listitem> 
        </itemizedlist>


also einfach der rekursive aufruf gelöscht werden..

prinzipiell ist mir ja sogar klar wies funzen soll.. aber wie immer häng ich an der umsetzung

also ich durchwandere den baum..

bei jedem element such ich im unterbaum nach dem selben element.. und wenn ichs finde wirds gekickt.

eigentlich ganz einfach *grml*

Re: xml-baum & rekursion .. need help

Montag, 25. April 2005, 17:12

du könntest mit getElementByTagName() nach 'listitem' suchen. jedes gefundene element prüfst du auf hasChildNodes(). wenn ja iterierst du durch alle childNodes (ist ein attribut) und wirfst mit removeChild() die kindelemente raus, dessen tagname 'itemizedlist' lautet.

die methoden der api findest du hier: http://docs.python.org/lib/module-xml.dom.html (insbesondere bei den Node- und Element-Objects)