Ich versuche, einen Leser von gebrochenem XML zu erholen. Die Verwendung der Option libxml2.XML_PARSE_RECOVER mit der DOM-API (libxml2.readDoc) funktioniert und es wird von Entitätsproblemen wiederhergestellt.Python libxml2 Leser und XML_PARSE_RECOVER
Die Verwendung der Option mit der Reader-API (die aufgrund der Größe der zu analysierenden Dokumente erforderlich ist) funktioniert jedoch nicht.
Beispielcode (mit kleinen Beispiel):
import cStringIO
import libxml2
DOC = "<a>some broken & xml</a>"
reader = libxml2.readerForDoc(DOC, "urn:bogus", None, libxml2.XML_PARSE_RECOVER | libxml2.XML_PARSE_NOERROR)
ret = reader.Read()
while ret:
print 'ret: %d' % ret
print "node name: ", reader.Name(), reader.NodeType()
ret = reader.Read()
Irgendwelche Ideen, wie ich erholen richtig es nur wird in einer ewigen Schleife (mit reader.Read() liefert -1) stecken?
Ja: 'während ret == 1:'. Siehe http://xmlsoft.org/xmlreader.html. –
Danke, aber das wird nicht wiederhergestellt, bricht einfach ab. Also für das oben genannte würde ich nur das Tag erhalten. Das DOM api resultiert in einem Dokumentenbaum mit der Wiederherstellung, die einfach das & fällt - das ist im Idealfall, was ich (gleichwertig) von der Leser API möchte. – bee