Seite 3 von 3
Re: XML
Verfasst: Sonntag 13. Mai 2012, 19:32
von Hyperion
Nö. XPath sei Dank, bekommen wir schon eine Liste, die wir leicht "joinen" können:
Code: Alles auswählen
In [12]: "".join(root.xpath("//titel/text()"))
Out[12]: '\nHalloWelt!. Du bist schön!\n Und ich hoffe so! '
(Parsing wie oben, `root` ist Wurzelelement.)
Re: XML
Verfasst: Sonntag 13. Mai 2012, 19:38
von BlackJack
@Hyperion: Da fehlte ein '/':
Code: Alles auswählen
In [412]: print ''.join(doc.xpath('titel//text()'))
HalloWelt!. Du bist so schön!
Und ich hoffe das bleibt so!
@MarcelF6: Jetzt fängst Du an die Anforderungen zu ändern…
Re: XML
Verfasst: Sonntag 13. Mai 2012, 19:42
von Hyperion
BlackJack hat geschrieben:@Hyperion: Da fehlte ein '/':
Oops, stimmt. [ausredenmodus]Zu viel Ruby heute...

[/ausredenmodus]
Re: XML
Verfasst: Sonntag 13. Mai 2012, 19:55
von BlackJack
@Hyperion: Ach, in Ruby funktioniert XPath anders?

Re: XML
Verfasst: Sonntag 13. Mai 2012, 20:29
von MarcelF6
Ok, ihr habt mich beide endgültig überzeugt!

Ist schon erschreckend (und zugleich erstaunlich), wie man 15 zeiligen Code in 2, 3 Zeilen abhandeln kann (und dann erst noch schneller und schöner).
Ich habs vorher bei mir auch rasch versucht - mit einer zu meiner Version alternativen Funktion:
Code: Alles auswählen
import lxml.etree as ET
doc = ET.parse("datasheet.xml")
def test(knoten):
data = ET.tostring(doc)
root = ET.fromstring(data)
print ''.join(root.xpath(knoten+'//text()'))
Merkwürdigerweise wird aber immer (egal, was ich für 'knoten' einsetze) eine leere Zeile ausgegeben. Liegt das evtl. daran, dass ich die Datei zuerst parse?
Re: XML
Verfasst: Sonntag 13. Mai 2012, 20:50
von Hyperion
Oha.. Dein Code ist ziemlich befremdlich! Hast Du Dich mal mit Funktionen (Parameterübergabe und Rückgabe) befasst? Du scheinst da enorme Wissenslücken zu haben.
Wieso übergibst Du den Elementnamen (`knoten` ist imho kein so passender Name dafür), aber nicht den Tree?
Und an das Wurzelelement kommt man so:
Deine Methode ist ziemlich umständlich und ressourcenfressend (erst einen Tree in einen String wandeln, dann wieder den String parsen...)
Zeig uns doch mal bitte ein Beispiel, an dem wir Dein Problem nachvollziehen können...