Hi,
ich hab gestern erst mit Python angefangen und ich glaub das ist daher eine ziemliche Basic-Frage, aber ich hänge jetzt seit knapp ner Stunde dran und komm nicht weiter.
Also:
Wie les ich z.B. das author Feld dieser XML aus?
http://gdata.youtube.com/feeds/api/videos/1RN6pT3zL44
Die ganzen Tutorials zeigen das nur anhand von schön geordnetes XMLs. Ich habe bis jetzt eTree benutzt.
Schonmal danke im voraus!
XML auslesen
@capitalG: Ich weiss jetzt nicht was ein schön geordnetes XML ist, beziehunsgweise wie eines ungeordnet sein kann. Es muss ja der Spezifikation folgen und aus der Sicht sind alle XML-Dateien gleich.
Oder meinst Du jetzt das es nicht so schön formatiert ist, dass Du die Baumstruktur leicht erkennen kannst? Dann formatier es um oder betrachte es in einem XML-Editor der auch eine Baumansicht bietet. Ein Webbrowser wie Firefox kann da auch schon hilfreich sein. Da dann vielleicht noch zusätzlich Firebug und Firepath installieren. Das sieht man dann schnell das es als XPath ``entry/author/name/text()`` ist.
Oder meinst Du jetzt das es nicht so schön formatiert ist, dass Du die Baumstruktur leicht erkennen kannst? Dann formatier es um oder betrachte es in einem XML-Editor der auch eine Baumansicht bietet. Ein Webbrowser wie Firefox kann da auch schon hilfreich sein. Da dann vielleicht noch zusätzlich Firebug und Firepath installieren. Das sieht man dann schnell das es als XPath ``entry/author/name/text()`` ist.
Vielen Dank für die schnelle Hilfe!
Ich hab mir jetzt das XML Plugin für notepad++ geholt, aber viel übersichtlicher sieht es jetzt auch nicht aus, und die Baumstruktur bringt dort nicht so viel, ich probier mal firebug.
Ich bekomms leider noch immer nicht ausgelesen, irgendwie steig ich bei der Dokumentation ( http://docs.python.org/3.3/library/xml. ... ttree.html )nicht durch, sorry
Die Konsole spuckt mir immer [] aus, und wenn ich text() benutze gibt es einen Syntax Error. Gibts vieleicht ein deutsches Tutorial/Doku dazu? Über google hab ich nix gefunden.
Ich hab mir jetzt das XML Plugin für notepad++ geholt, aber viel übersichtlicher sieht es jetzt auch nicht aus, und die Baumstruktur bringt dort nicht so viel, ich probier mal firebug.
Ich bekomms leider noch immer nicht ausgelesen, irgendwie steig ich bei der Dokumentation ( http://docs.python.org/3.3/library/xml. ... ttree.html )nicht durch, sorry
Code: Alles auswählen
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
print(root.findall("./entry/author/text/"))
@capitalG: `text()` geht mit dem ElementTree aus der Standardbibliothek nicht. Da musst Du den letzten Schritt über Python lösen. Oder `lxml.etree` installieren, das kann XPath.
Hi, ich bin jetzt nochmal XML-ETree durchgegangen, aber irgendwie bekomm ich es nicht heraus, wie ich nun einen genauen Wert aus einer XML-Datei auslesen kann, ist dies nun möglich oder nicht? Ich bekomm es nur über root[0][1].text hin, aber ich hätte statt den Zahlen lieber die Zweig-Namen, also sozusagen root[entry][author][name].text . Kann doch eigentlich nicht so schwer sein, das ist doch das intuitivste was man eigentlich mit einer XML machen will.
Kann mir vlt einer einfach den Code hinschreiben, ich probier schon seit 2 Stunden rum und komm einfach nicht weiter.
Kann mir vlt einer einfach den Code hinschreiben, ich probier schon seit 2 Stunden rum und komm einfach nicht weiter.
@capitalG: Dann nimm doch »find«:
Code: Alles auswählen
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
names = [entry.text for entry in root.findall("entry/author/name")]
http://gdata.youtube.com/feeds/api/videos/1RN6pT3zL44
BlackJack hat gemeint "entry/author/name/text()" wäre der Pfad um z.B. den Autor auszulesen.
BlackJack hat gemeint "entry/author/name/text()" wäre der Pfad um z.B. den Autor auszulesen.
erstens ist »entry« ja schon Dein Rootelement und zweitens haben alle Tags einen Namespace.
Code: Alles auswählen
name=root.findtext('{http://www.w3.org/2005/Atom}author/{http://www.w3.org/2005/Atom}name')
Hi,
ich hab echt irgendwie mit XML Probleme, ansonsten ist ja Python ja echt eine sehr übersichtliche Sprache. Also, ich habe folgende XML:
Wie verändere ich diese XML, also dass z.B. nummer von Meta-ID in der neue XML nicht mehr 789 ist sondern z.B. 765 und das ganze abgespeichert wird?
Schonmal Vielen Dank im voraus!
ich hab echt irgendwie mit XML Probleme, ansonsten ist ja Python ja echt eine sehr übersichtliche Sprache. Also, ich habe folgende XML:
Code: Alles auswählen
<?xml version="1.0"?>
<Standard text="test" nummer="123">
<Meta text="test2" nummer="456">
<Meta-ID text="test3" nummer="789" />
</Meta>
</Standard>
Schonmal Vielen Dank im voraus!
-
- User
- Beiträge: 37
- Registriert: Donnerstag 17. Mai 2012, 21:28
@capitalG: z.B. so (Python2):
Das abspeichern sollte jetzt nicht wirklich schwierig sein, ein einfaches '.write(' statt des print ginge zur Not
Code: Alles auswählen
import xml.etree.ElementTree as ET
def init_xml():
return """
<?xml version="1.0"?>
<Standard text="test" nummer="123">
<Meta text="test2" nummer="456">
<Meta-ID text="test3" nummer="789" />
</Meta>
</Standard>
"""
def main():
serialized = init_xml().strip()
root = ET.fromstring(serialized)
meta = root.find('./Meta/Meta-ID')
meta.attrib['nummer'] = '999'
print ET.tostring(root)
if __name__ == '__main__':
main()
Code: Alles auswählen
In [17]: !cat test.xml
<?xml version="1.0"?>
<Standard text="test" nummer="123">
<Meta text="test2" nummer="456">
<Meta-ID text="test3" nummer="789" />
</Meta>
</Standard>
In [18]: doc = etree.parse('test.xml')
In [19]: doc.find('.//Meta-ID').attrib['nummer'] = '765'
In [20]: doc.write('test2.xml')
In [21]: !cat test2.xml
<Standard nummer="123" text="test">
<Meta nummer="456" text="test2">
<Meta-ID nummer="765" text="test3" />
</Meta>
</Standard>