El análisis XML usando QXmlStreamReader no devuelve todos los elementos
Frecuentes
Visto 2,118 veces
3
Estoy tratando de analizar XML
-archivo usando QXmlStreamReader
. Con el siguiente código, solo obtengo el primer caso de prueba del archivo xml de muestra.
from PyQt4.QtCore import QXmlStreamReader, QFile, QIODevice
class TestcaseReader(object):
def __init__(self, filename):
file = QFile(filename)
file.open(QIODevice.ReadOnly)
self.xml = QXmlStreamReader(file)
while not self.xml.atEnd():
self.xml.readNext()
if self.xml.isStartElement():
if self.xml.name() == "Testcase":
self.parse_testcase()
def parse_testcase(self):
print("Parse Testcase")
while self.xml.readNextStartElement():
if self.xml.name() == "Type":
measurement = self.xml.readElementText()
print("Type: " + measurement)
elif self.xml.name() == "Attributes":
name = self.xml.attributes().value("name")
strname = self.xml.attributes().value("strname")
elementtype = self.xml.attributes().value("type")
value = self.xml.attributes().value("value")
print("Attributes: ", name, strname, elementtype, value)
if __name__ == "__main__":
print("XML Reader")
xml = TestcaseReader("test.xml")
Aquí está mi archivo XML:
<?xml version="1.0" encoding="UTF-8" ?>
<Testcases>
<Testcase>
<Type>Testtype1</Type>
<Attributes name="testattr1" strname="Testattribute 1" type="float" value="1.0">
<Attributes name="testattr2" strname="Testattribute 2" type="str" value="test">
</Testcase>
<Testcase>
<Type>Testtype2</Type>
<Attributes name="testattr1" strname="Testattribute 1" type="float" value="2.0">
<Attributes name="testattr2" strname="Testattribute 2" type="str" value="test">
</Testcase>
</Testcases>
Después de analizar la primera Testcase
del Testcases
QXmlStreamReader devuelve que está al final y, por lo tanto, detiene el análisis adicional. ¿Cómo puedo leer todos los casos de prueba del archivo xml?
1 Respuestas
2
Como el QXmlStreamReader de datos lee los datos de forma incremental, es posible que no todos los datos estén disponibles en el búfer de QIODevice. Ese es particularmente el caso cuando se leen datos de un dispositivo lento, por ejemplo, un enchufe de red, pero también puede ocurrir cuando se leen archivos locales.
Obtenga más información sobre cómo manejar los datos que llegan en fragmentos que en el Sección "Análisis incremental" de la documentación de QXmlStreamReader.
Además, su XML no es válido, debería leer <Attributes ... />
en lugar de <Attributes ...>
. Por ejemplo, para el primero:
<Attributes name="testattr1" strname="Testattribute 1" type="float" value="1.0"/>
Los errores (), errorString (), errorLine () y errorColumn () de QXmlStreamReader deberían brindarle toda la información necesaria para depurar tales problemas. (y es una buena práctica verificar errores e informarlos adecuadamente de todos modos).
Respondido el 19 de Septiembre de 12 a las 08:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python xml qt pyqt qxmlstreamreader or haz tu propia pregunta.
Como ya señaló Frank Osterfeld, el XML no es válido. Cuando tenga problemas para analizar XML, lo primero que debe hacer es verificar si la entrada es válida. Para esta entrada, este validador da 4 errores y 2 advertencias. - user362638