2015-06-09 46 views
0

運行下面的代碼不會每次都生成相同的屬性排序。這是爲什麼發生?QDomDocument toString

QDomDocument dom; 
QDomElement element= dom.createElement("MyElement"); 
element.setAttribute("attr1", "foo"); 
element.setAttribute("attr2", "bar"); 
element.setAttribute("attr3", "hello"); 
dom.appendChild(element); 

QString text = dom.toString(); 

我知道,XML規範指出屬性的排序並不顯著,但我預計QDomDocument ::的toString每次產生相同的結果給出相同的輸入。

這很重要,因爲我想對生成的數據進行單元測試,但是如果數據在運行之間發生變化會使其更加困難。

回答

2

QDomDocument存儲的給定節點的屬性在一個QHashwhich protects itself against algoritmic complexity attacks通過用隨機鹽鹽析任何給定密鑰的散列計算。

當然,出於測試目的,這是一個計數器功能。 解決方案:使用設置爲某個整數(0?)的環境變量QT_HASH_SEED運行您的測試用例,然後將其用作鹽。

設置變量出過程的正常和有效,但如果你想將其設置爲當前進程(通過qputenv或類似的),注意,你需要做的之前的任何QHash實例建立 (由你或者Qt本身,或者通過你或者其他一些加載庫在main之前執行的全局代碼等等)。所以要非常小心。假設其他庫很聰明,在調用任何Qt方法之前強制執行它。