我使用QDomDocument
处理XML(XHTML)文档,就像这个例子一样简单:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html>
<html>
<body>
<p><i>foo</i><!-- comment --><b>bar</b></p>
</body>
</html>
作为(X)HTML文档,文本应该在没有空格的情况下呈现&#34; foo&#34;和&#34; bar&#34;,因为(X)HTML中的注释不会产生空白(除非被某些人包围):
FOO 的栏的
但是,当QDomDocument
解析然后使用.toString()
进行字符串化时,我会收到以下来源:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html>
<html>
<body>
<p>
<i>foo</i>
<!-- comment -->
<b>bar</b>
</p>
</body>
</html>
然后使用空格渲染:
FOO 的 栏的
据我了解,QDomDocument
的输出似乎是一个不同的 XML文档,而不是原始文档。我通过检查文档树来检查解析的文档不包含空格:<i>
元素后面跟着一个注释节点,后跟<b>
元素;即中间没有文字节点。
多空白不匹配的事实(即缩进宽度)不是问题(IIRC,XML规范不区分多个空格和单个空格,HTML也是如此) 。但是对于最初之间没有空格的两个标签,我要求输出也没有空格。
这是QDomDocument::toString()
中的错误吗?我该如何解决这个问题?我可以阻止QDomDocument::toString()
在这里产生空白吗?我已经尝试将-1
作为可选参数indent
传递,其中记录为:"no whitespace at all is added"。但是,它仍会在评论之后添加换行符(但不是之前)。我可以想象实现一个自定义序列化器,但我不知道它是否像我想象的那么容易。