由於你的問題是你不能使用QT XML類,因爲它的行爲,我假設你在你的項目中使用QT XML模塊沒有問題。唯一的辦法,我可以考慮檢測,驗證代碼,並驗證它是否爲有效的XML(僅語法)。
QString test = "<TestData>Valid XML</TestData>";
QString wrapper_start = "<?xml version=\"1.0\"?><dummyrootelement>";
QString wrapper_end = "</dummyrootelement>";
QDomDocument document;
if(document.setContent(wrapper_start + test + wrapper_end)) {
// Valid XML, handle test here
} else {
// Probably not valid XML
}
你需要wrapper_start和wrapper_end變量的原因是因爲你可以在兩者之間進行處理XML片段,你可能會考慮將此作爲XML需要進行處理:
<TestData>Data1</TestData><TestData>Data2</TestData>
但解析錯誤將會造成這種情況,因爲XML文檔需要一個根元素。
另外,請注意,上述方法不是我推薦的方法,但我已經提到過,因爲我理解任何需要維護遺留系統的人的痛苦和同情。如果您的應用程序依賴於屬性的排序,我強烈建議您至少考慮修改應用程序的體系結構。
注意,XML規範指出[屬性的順序並不重要(http://www.w3.org/TR/xml/# sec-starttags),因此XML處理程序在處理XML內容時不需要維護順序。 *修復*(不是解決方法)將正確讀取XML - 如果您有權訪問執行該操作的代碼。 – larsmoa
你好,謝謝,我知道屬性的順序並不重要,但是我從我的項目創建的XML文件被其他項目使用(可能不會在QT中創建),因此他們要求我保留屬性順序。所以我不得不現在去做。 – maxchirag
@maxchirag:你試過QXmlStreamWriter嗎?當您調用writeAttribute()時,它直接寫入底層I/O設備,因此這些屬性將按您在代碼中編寫的順序顯示。 –