Ich habe ein XML-Dokument in über einen Sockel kommen, die ich brauche zu analysieren und darauf zu reagieren on the fly (dh einen Teilbaum Parsing). Was ich möchte ist eine nicht blockierende Methode, so dass ich andere Dinge tun kann, während ich darauf warte, dass mehr Daten reinkommen (ohne Threading).nicht blockierenden Methode zum Parsen (Streaming) XML in Python
So etwas wie iterparse ideal wäre, wenn es Iterieren beendet, wenn der Lesepuffer leer ist, zB:
context = iterparse(imaginary_socket_file_wrapper)
while 1:
for event, elem in context:
process_elem(elem)
# iteration of context finishes when socket has no more data
do_other_stuff()
time.sleep(0.1)
Ich denke, SAX wäre auch eine Option sein, aber iterparse scheint nur einfacher für meine Bedürfnisse. Irgendwelche Ideen?
Update:
Mit Gewinde ist in Ordnung, aber stellt ein Maß an Komplexität, die ich zu umgehen hoffte auf. Ich dachte, dass nicht blockierende Aufrufe eine gute Möglichkeit wären, dies zu tun, aber ich stelle fest, dass dies die Komplexität der Analyse des XML erhöht.
Ich kann diese Antwort nicht genug reichen – donopj2
Danke Peter. Dank Ihrer Antwort habe ich endlich eine andere Antwort auf meine Frage gefunden. Siehe meine ausführlichere Antwort: https://stackoverflow.com/a/44414167/938111 – olibre