QDomNode的nodeValue()为空的原因与解决

这几天在把之前基于VCL写的淘宝TOPSDK用Qt重构,涉及到XML解析的部分调试了很久。遇到QDomNode取值时一直为空的情况,最后发现是平时习惯的微软DOM与W3C标准的DOM有区别造成的。

举个例子:

<tid>
12345678
</tid>

在此处,如果此时变量node(类型为QDomNode)指向了“<tid>”,那么要取到“12345678”这个值不能直接用node.nodeValue,而要用node.firstChild().nodeValue()

这是为毛!?很多人可能不理解,其实在标准W3C的DOM中,12345678这个值是属于一个隐含的文本域节点中的,就是实际上是下面这样的(text标签仅为解释原理):

<tid>
<text>12345678</text>
</tid>

微软下流就下流在各种业界标准他都想要小改一下,改得与标准不兼容而看起来又像那么回事。当初vj++想祸害java不能跨平台(没成功出了c#),人家用“/”他就非得用“”,别人搞3D是右手坐标系吧DirectX就非得用坑爹的左手坐标系。

这个dom的区别对我影响不大,反正解析器是我来定的,只要根据当前解析器的标准来写就好,可是如果是做网站前端的就苦逼了,ajax需要写多余的兼容判断。