QDomDocument 到字符串
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 每次给定相同的输入都会产生相同的结果。
这很重要,因为我想对生成的数据进行单元测试,但如果数据在两次运行之间发生变化,就会变得更加困难。
QDomDocument
将给定节点的属性存储在 QHash
中,which protects itself against algoritmic complexity attacks 通过对任何给定键的哈希计算加盐随机盐.
当然,出于测试目的,这是一个计数器功能。 解决方案:运行 你的测试用例将环境变量 QT_HASH_SEED
设置为某个整数(0?),然后将其用作盐。
在进程外设置该变量是可行的,但如果您想为当前进程设置它(通过 qputenv
或类似方式),请注意您需要这样做 在构建任何 QHash
实例之前(由您或 Qt 本身,或通过您或其他人在 main
之前执行的全局代码其他加载的库,等等)。所以要非常小心。假设其他库很聪明,在调用任何 Qt 方法之前强制执行它。
运行 下面的代码不会每次都产生相同的属性排序。为什么会这样?
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 每次给定相同的输入都会产生相同的结果。
这很重要,因为我想对生成的数据进行单元测试,但如果数据在两次运行之间发生变化,就会变得更加困难。
QDomDocument
将给定节点的属性存储在 QHash
中,which protects itself against algoritmic complexity attacks 通过对任何给定键的哈希计算加盐随机盐.
当然,出于测试目的,这是一个计数器功能。 解决方案:运行 你的测试用例将环境变量 QT_HASH_SEED
设置为某个整数(0?),然后将其用作盐。
在进程外设置该变量是可行的,但如果您想为当前进程设置它(通过 qputenv
或类似方式),请注意您需要这样做 在构建任何 QHash
实例之前(由您或 Qt 本身,或通过您或其他人在 main
之前执行的全局代码其他加载的库,等等)。所以要非常小心。假设其他库很聪明,在调用任何 Qt 方法之前强制执行它。