簡體   English   中英

使用QXmlStreamReader進行XML解析不會返回所有元素

[英]XML parsing using QXmlStreamReader doesn't return all elements

我正在嘗試使用QXmlStreamReader解析XML -file。 使用以下代碼,我只從示例xml文件中獲取第一個測試用例。

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")

這是我的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>

Testcases解析第一個Testcase ,QXmlStreamReader返回它的結尾,因此停止進一步解析。 如何從xml文件中讀取所有測試用例?

當數據QXmlStreamReader以遞增方式讀取數據時,並非QIODevice緩沖區中的所有數據都可用。 從慢速設備(例如網絡套接字)讀取數據時尤其如此,但在從本地文件讀取數據時也會發生這種情況。

在QXmlStreamReader文檔“增量解析”部分中,閱讀有關如何處理以塊為單位的數據的更多信息。

此外,您的XML無效,它應該讀取<Attributes ... />而不是<Attributes ...> 例如,對於第一個:

<Attributes name="testattr1" strname="Testattribute 1" type="float" value="1.0"/>

QXmlStreamReader的error(),errorString(),errorLine()和errorColumn()應該為您提供調試此類問題所需的所有信息。 (無論如何,檢查錯誤並正確報告是一種很好的做法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM