etree - Subelement hinzufügen
@kaineanung: Wenn Du nicht weisst an welchem Index Du etwas einfügen möchtest reicht Dir vielleicht die `append()`-Methode die das Element einfach als letztes Kindelement hinten anhängt.
-
- User
- Beiträge: 145
- Registriert: Sonntag 5. April 2015, 20:57
@BlackJack
Wie ich weiß nicht wo ich es hinzufügen soll?
Doch doch. Nicht das wir aneinander vorbeireden: ich will den <a1>-Node (mitsamt seiner ganzen 'Unterbaum') an dem <a>-Node reinschieben. (siehe mein Besipiel oben)
Also ich weiß schon wohin ich das haben will, nur nicht welche Methode ich dafür benutzen kann.
Insert-Methode (vom etree-Objekt) erwartet als erstes Argument eben ein Index und da bin ich mir nicht sicher ob es die richtige Methode ist und wenn ja, wie ermittle ich den Index vom <a>-Node?
Wie ich weiß nicht wo ich es hinzufügen soll?
Doch doch. Nicht das wir aneinander vorbeireden: ich will den <a1>-Node (mitsamt seiner ganzen 'Unterbaum') an dem <a>-Node reinschieben. (siehe mein Besipiel oben)
Also ich weiß schon wohin ich das haben will, nur nicht welche Methode ich dafür benutzen kann.
Insert-Methode (vom etree-Objekt) erwartet als erstes Argument eben ein Index und da bin ich mir nicht sicher ob es die richtige Methode ist und wenn ja, wie ermittle ich den Index vom <a>-Node?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
<a1><a2>Mein Text</a2></a1>
Mit `append` kannst du das natuerlich auch machen, nur musst du es eben auf dem _richtigen_ Element, naemlich `a1` aufrufen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 145
- Registriert: Sonntag 5. April 2015, 20:57
@cofi
Das <a2> das SubElement von <a1> ist, das ist mir doch selbstverständlich klar.
Aber ich habe ja noch das <a>-Element in gleicher 'Ebene' mit dem <a1>.
Ich möchte jetzt das <a1>-Element IN DAS <a>-Element verschieben mitsam des <a2>-SubElements!
Das <a>-Element ist in gleicher Ebene mit dem <a1>-Element. Das <a1>-Element hat noch ein SubElement, nämlich <a2>.
Ich möchte nun <a1><a2></a2></a1> IN DAS <a></a> verschieben.
Also will ich das aus dem genannten Beispiel folgendes wird:
Wie mache ich das? Insert? Was anderes?
Vielleicht leigt es ja auch in der Darstellung das man es nicht erkennen kann?
Ich versuche es hiermit:
a1 soll verschoeben werden in a:
Das <a2> das SubElement von <a1> ist, das ist mir doch selbstverständlich klar.
Aber ich habe ja noch das <a>-Element in gleicher 'Ebene' mit dem <a1>.
Ich möchte jetzt das <a1>-Element IN DAS <a>-Element verschieben mitsam des <a2>-SubElements!
Code: Alles auswählen
<root>
<a></a>
<a1><a2></a2></a1>
<b></b>
</root>
Ich möchte nun <a1><a2></a2></a1> IN DAS <a></a> verschieben.
Also will ich das aus dem genannten Beispiel folgendes wird:
Code: Alles auswählen
<root>
<a><a1><a2></a2></a1></a>
<b></b>
</root>
Vielleicht leigt es ja auch in der Darstellung das man es nicht erkennen kann?
Ich versuche es hiermit:
Soll werden zu :<a></a><a1><a2></a2></a1>
Oder so verdeutlicht:<a><a1><a2></a2></a1></a>
Code: Alles auswählen
--a
|
--a1
| |
| --a2
|
--b
Code: Alles auswählen
--a
| |
| --a1
| |
| --a2
|
--b
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Oh, dass du du ein existierendes verschieben willst, statt ein neues einzufuegen.
Das ist aber auch das gleiche, nur muss man es halt noch loeschen:
Das ist aber auch das gleiche, nur muss man es halt noch loeschen:
Code: Alles auswählen
In [10]: tostring(top)
Out[10]: '<top><x><y /></x><z /></top>'
In [11]: z = top.find('z')
In [12]: top.remove(z)
In [13]: tostring(top)
Out[13]: '<top><x><y /></x></top>'
In [14]: top.find('x').find('y').append(z)
In [15]: tostring(top)
Out[15]: '<top><x><y><z /></y></x></top>'
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 145
- Registriert: Sonntag 5. April 2015, 20:57
@cofi
Achso, jetzt verstehe ich so langsam....
Ein Node ist ein Node und egal wieviele Subelemente er beinhaltet.
Ich finde das enstprechende Node, weise es einem temporären Node zu (bei dir das z) und 'appende' es an entsprechendes Node. Die subelemente des ausgewählten Nodes (nun in 'z' gespeichert' wandern natürlich automatisch mit!
Ah Ok, ich glaube ich habe es verstanden. Wird nachher gleich ausprobiert wenn ich zu Hause bin.
Aber jetzt bringst du mich auf was anderes:
Wieso benutze ich eigentlich die SubElement-Methode wenn ich ein Node erstellen und mit Find() das enstrepchende Node finden und daran anhängen kann?
Ich freue mich jedenfalls nachher heim zu kommen und gleich mal alles auszuprobieren Danke euch!
Achso, jetzt verstehe ich so langsam....
Ein Node ist ein Node und egal wieviele Subelemente er beinhaltet.
Ich finde das enstprechende Node, weise es einem temporären Node zu (bei dir das z) und 'appende' es an entsprechendes Node. Die subelemente des ausgewählten Nodes (nun in 'z' gespeichert' wandern natürlich automatisch mit!
Ah Ok, ich glaube ich habe es verstanden. Wird nachher gleich ausprobiert wenn ich zu Hause bin.
Aber jetzt bringst du mich auf was anderes:
Wieso benutze ich eigentlich die SubElement-Methode wenn ich ein Node erstellen und mit Find() das enstrepchende Node finden und daran anhängen kann?
Ich freue mich jedenfalls nachher heim zu kommen und gleich mal alles auszuprobieren Danke euch!