wie man Ergebnisse aus xml-sax-parser in python
Ich arbeiten auf xml-sax-parser analysieren xml-Dateien und unten ist mein code
xml-Datei-code:
<job>
<title>Registered Nurse-Epilepsy</title>
<job-code>881723</job-code>
<detail-url>http://search.careers-hcanorthtexas.com/s/Job-Details/Registered-Nurse-Epilepsy-Job/Medical-City/xjdp-cl289619-jf120-ct2181-jid4041800?s_cid=Advance
</detail-url>
<job-category>Neuroscience Nursing</job-category>
<description>
<summary>
<div class='descriptionheader'>Description</div><P STYLE="margin-top:0px;margin-bottom:0px"><SPAN STYLE="font-family:Arial;font-size:small">Utilizing the standards set forth for Nursing Practice by the ANA and ONS, the RN will organize, modify, evaluate, document and maintain the plan of care for Epilepsy and/or Neurological patients. It will include individualized, family centered, holistic, supportive, and safe age-specific care.</SPAN></P><div class='qualificationsheader'>Qualifications</div><UL STYLE="list-style-type:disc"> <LI>Graduate of an accredited school of Professional Nursing.</LI> <LI>BSN preferred </LI> <LI>Current licensure with the Board of Nurse Examiners for the State of Texas</LI> <LI>Experience in Epilepsy Monitoring and/or Neurological background preferred.</LI> <LI>ACLS preferred, within 6 months of hire</LI> <LI>PALS required upon hire</LI> </UL>
</summary>
</description>
<posted-date>2012-07-26</posted-date>
<location>
<address>7777 Forest Lane</address>
<city>Dallas</city>
<state>TX</state>
<zip>75230</zip>
<country>US</country>
</location>
<company>
<name>Medical City (Dallas, TX)</name>
<url>http://www.hcanorthtexas.com/careers/search-jobs.dot</url>
</company>
</job>
Python-code: (Teil-code deaktivieren Sie meine Zweifel bis Anfang element-Funktion)
from xml.sax.handler import ContentHandler
import xml.sax
import xml.parsers.expat
import ConfigParser
import xml.sax
class Exact(xml.sax.handler.ContentHandler):
def __init__(self):
self.curpath = []
def startElement(self, name, attrs):
print name,attrs
self.clearFields()
def endElement(self, name):
pass
def characters(self, data):
self.buffer += data
def clearFields():
self.fields = {}
self.fields['title'] = None
self.fields['job-code'] = None
self.fields['detail-url'] = None
self.fields['job-category'] = None
self.fields['description'] = None
self.fields['summary'] = None
self.fields['posted-date'] = None
self.fields['location'] = None
self.fields['address'] = None
self.fields['city'] = None
self.fields['state'] = None
self.fields['zip'] = None
self.fields['country'] = None
self.fields['company'] = None
self.fields['name'] = None
self.fields['url'] = None
self.buffer = ''
if __name__ == '__main__':
parser = xml.sax.make_parser()
handler = Exact()
parser.setContentHandler(handler)
parser.parse(open('/path/to/xml_file.xml'))
Ergebnis:
Das Ergebnis zu den oben genannten print-Anweisung wird unten gegeben
job <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
title <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
job-code <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
detail-url <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
job-category <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
description <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
summary <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
posted-date <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
location <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
address <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
city <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
state <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
zip <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
country <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
company <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
name <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
url <xml.sax.xmlreader.AttributesImpl instance at 0x2c0ba70>
Sie können beobachten, wie oben bin ich immer name
und attrs
aus der print-Anweisung, aber
jetzt meine eigentliche Absicht, Wert, Namen, wie zum abrufen der Werte für alle diejenigen, die tags über weil ich bekomme nur Knoten-Namen, nicht aber Werte.
Bearbeiteten Code:
ich wirklich verwirrt, wie man die Zuordnung der Daten aus den Knoten, um die Schlüssel im Wörterbuch, wie oben angegeben
genau, ich brauche diese Daten, und ich werde später speichern, die in einem Wörterbuch zunächst, wie man die Daten ?
InformationsquelleAutor Shiva Krishna Bavandla | 2012-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf, um den Inhalt eines Elements müssen Sie überschreiben die
characters
Methode... fügen Sie diese zu Ihrem handler-Klasse:Seien Sie vorsichtig mit dieser, obwohl: Der parser ist nicht erforderlich, geben Sie alle Daten in einem einzigen Stück. Verwenden Sie einen internen Puffer, und Lesen Sie es, wenn nötig. In den meisten meiner xml/sax-code, den ich etwas wie das hier tun:
... und dann rufen Sie die Methode flush auf das Ende der Elemente, wo ich die Daten benötigen.
Für Ihr gesamtes use - case- vorausgesetzt, Sie haben eine Datei mit mehreren job-Beschreibungen und eine Liste wünschen, die hält, die jobs jeder job, ein Wörterbuch der Felder, etwas wie das hier tun:
Wenn Sie brauchen nur zu analysieren, einen einzigen Auftrag zu einer Zeit, können Sie zur Vereinfachung der Liste Teil, und werfen Sie Weg, die
startElement
Methode - stellen Sie einfach _result zu einem dict und ordnen Sie es direkt inendElement
.wie die Zuordnung der Ergebnisse aus den Knoten Ihre jeweiligen tag-Namen, indem Sie erstellen ein dictionary mit Schlüsseln als Knoten-Namen und-Werten, die als Knoten Werte, eigentlich bin ich versucht, dies zu tun
cau u bitte beantworten Sie meine obige bearbeiteten code, den ich wirklich stucked Ihre Zuordnung
Ich war auf meinem Weg zurück von der Arbeit, geben Sie mir einen moment, mein edit beantworten.
InformationsquelleAutor l4mpi
Um den Textinhalt eines Knotens, die Sie implementieren müssen, um eine Zeichen-Methode. E. g.
Ausgeben würde:
(sniped)
InformationsquelleAutor Gary van der Merwe
Ich würde empfehlen, mit einem pulldom. Dies ermöglicht das laden eines doc mit einem sax-parser, und wenn Sie finden einen Knoten, der Sie interessiert sind, laden nicht gerade, dass die Knoten in einer dom-fragment.
Hier ist ein Artikel über die Verwendung es, mit einigen Beispielen: https://www.ibm.com/developerworks/xml/library/x-tipulldom/index.html
InformationsquelleAutor Gary van der Merwe
Müssen Sie implementieren eine
Zeichen
- handler zu:aber diese möglicherweise gibt Sie den text in Blöcken statt als einen block pro tag.
Tun sich selbst einen großen Gunst, obwohl, und verwenden Sie die ElementTree-API statt; das API ist weit pythononic und einfacher zu verwenden als XML-DOM-API.
Wenn alles, was Sie wollen, ist die gerade, die Umstellung auf ein Wörterbuch, nehmen Sie einen Blick an diesem praktischen ActiveState Python-Kochbuch Rezept: Konvertierung von XML zum Wörterbuch und wieder zurück. Beachten Sie, dass es verwendet die ElementTree-API als auch.
Wenn Sie eine Reihe von vorhandenen Elementen, die Sie suchen möchten, benutzen Sie einfach diese in die
find()
Methode:Getan.
hier, was die Daten tatsächlich, ob er zufrieden ist in der Zeichen-Funktion ? . Eigentlich die Felder in das Wörterbuch sind schwer gefüllte Felder, weil ich dann diesen code ausführen für mehrere xml-urls eigentlich, wenn das Feld im Wörterbuch entspricht der xml-Knoten, dann wird das Ergebnis der Knoten zugeordnet werden muss, das dictionary-Feld. dies ist das eigentliche Konzept schließlich
Nicht sicher, was Sie Fragen, aber der code oben ist einfach genug, um zu verallgemeinern. Beachten Sie, dass ist ALSO kein code-writing-service. 🙂
hey, sorry das ich mich und das ist wahr Martijn , kann ich verstehen, auch u viel geholfen, eigentlich das, was ich versuche, ist das deklarieren einige Felder im Wörterbuch, nach dem abrufen von Daten mithilfe von xml-sax , ich brauche die Karte die abgerufenen Daten, um die Felder in das Wörterbuch, wenn xml-Knoten abgestimmt das Feld im dictionary
InformationsquelleAutor Martijn Pieters