Hallo Zusammen,
wie ihr sicherlich schon aus dem Betreff entnehmen könnt habe ich eine frage bezüglich Python Lark und XML.
Ich würde gerne ein Einheitliches Parsing Skript schreiben, mit Lark kann ich Grammatiken definieren und als Baum ausgeben, genau das was ich möchte.
Jetzt habe ich im Internet etwas nachgeforscht und bin leider auf keine gescheite Doku bzw. Anleitung gekommen.
Habt ihr irgendwelche Ideen wie ich mithilfe von Lark eine XML Datei Parsen kann?
(ggf. Sogar beispiel Codes)
Würde mich über eine Rückmeldung sehr freuen.
Mit freundlichen Grüßen
Python Lark und XML
-
- User
- Beiträge: 85
- Registriert: Freitag 18. Januar 2019, 08:02
Hey,
vielen dank für eine Alternative
Ich habe mich für Lark entschieden weil ich damit gleich einen Baum darstellen kann und theoretisch alles mögliche Parsen kann.
Ich kann ja mit Lark mithilfe von BNF eigene Grammatiken definieren und somit nicht nur XML parsen.
Mein Ziel ist es eigentlich mit Lark Grammatiken für JSON / XML / Textdateien zu definieren dann habe ich alles beisamen.
Ich hoffe ich konnte mein Anliegen beschreiben und hoffe auf weitere Vorschläge
vielen dank für eine Alternative
Ich habe mich für Lark entschieden weil ich damit gleich einen Baum darstellen kann und theoretisch alles mögliche Parsen kann.
Ich kann ja mit Lark mithilfe von BNF eigene Grammatiken definieren und somit nicht nur XML parsen.
Mein Ziel ist es eigentlich mit Lark Grammatiken für JSON / XML / Textdateien zu definieren dann habe ich alles beisamen.
Ich hoffe ich konnte mein Anliegen beschreiben und hoffe auf weitere Vorschläge
@sparrow: Beautiful Soup ist für HTML und das ist nochmal deutlich komplexer zu parsen, als XML.
@Kirikkayis: was fehlt Dir am Tutorial, was bei Lark dabei ist? Dass jemand Lark für XML benutzt ist kaum vorstellbar und das Beispiel für JSON ist auch nur ein Beispiel, weil das auch niemand mit Lark machen würde. Wenn Du also XML parsen willst, mußt Du selbst einen Parser definieren. Dafür gibt es die Spezifikation https://www.w3.org/TR/xml/ , die schon in BNF-Form vorliegt.
@Kirikkayis: was fehlt Dir am Tutorial, was bei Lark dabei ist? Dass jemand Lark für XML benutzt ist kaum vorstellbar und das Beispiel für JSON ist auch nur ein Beispiel, weil das auch niemand mit Lark machen würde. Wenn Du also XML parsen willst, mußt Du selbst einen Parser definieren. Dafür gibt es die Spezifikation https://www.w3.org/TR/xml/ , die schon in BNF-Form vorliegt.
Ich kenne lark nicht. Aber ich halte dein Vorhaben für fehlgeleitet. XML zu Parsen ist komplex. Da geht es nicht nur um ein paar BNF-Klauseln. Die Unterstützung verschiedener encodings, namensräume, cdata sections, entities etc machen das alles andere als trivial. Zusätzlich dazu können XML Dokumente sehr groß werden. Dann sind die klassischen Baumstrukturen nicht mehr im Speicher repräsentierbar.
Wenn das ein Lernexperiment ist - alles ok. Produktiv hat so etwas nichts verloren.
Wenn das ein Lernexperiment ist - alles ok. Produktiv hat so etwas nichts verloren.
-
- User
- Beiträge: 85
- Registriert: Freitag 18. Januar 2019, 08:02
Hey,
danke für die ganzen Rückmeldungen.
Wie @__deets___ schon sagte bzw. vermutete handelt es sich hier um ein Projekt (Praxisprojekt).
Leider komme ich nur überhaupt nicht weiter.
Folgende XML datei habe ich :
nun soll ich mit lark eine grammatik definieren die z.B. alle "year"´s anzeigt.
danke für die ganzen Rückmeldungen.
Wie @__deets___ schon sagte bzw. vermutete handelt es sich hier um ein Projekt (Praxisprojekt).
Leider komme ich nur überhaupt nicht weiter.
Folgende XML datei habe ich :
Code: Alles auswählen
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<kapa name= "Kappa1"/>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<kapa name="Kappa2"/>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<kapa name= "Kappa3"/>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
- __blackjack__
- User
- Beiträge: 13006
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Kirikkayis: Kannst Du noch mal die Aufgabenstellung/das Ziel *genau* definieren? Das klingt nämlich extrem sinnlos etwas selbst zu programmieren was es schon fertig in der Standardbibliothek gibt und das dermassen *umfangreich* ist. Niemand der bei Verstand ist schreibt einen eigenen XML-Parser um XML zu verarbeiten.
Die Jahre bekommt man beispielsweise ganz einfach so:
Und für JSON gibt es mit dem `json`-Modul auch schon etwas fertiges in der Python-Standardbibliothek. Hier könnte ich mir einen eigenen Parser als Projekt schon eher vorstellen, aber im Gegensatz zu einem XML-Parser ist ein JSON-Parser dann vielleicht sogar ein bisschen zu simpel. Welcher Zeitrahmen ist denn für das Projekt vorgesehen?
Die Jahre bekommt man beispielsweise ganz einfach so:
Code: Alles auswählen
In [451]: from xml.etree import ElementTree as etree
In [452]: root = etree.fromstring(source)
In [453]: [node.text for node in root.iter('year')]
Out[453]: ['2008', '2011', '2011']
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis