在QDomDocument :: toString()中防止XML注释周围的空格

时间:2014-10-23 22:46:33

标签: c++ xml qt dom

我使用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"。但是,它仍会在评论之后添加换行符(但不是之前)。我可以想象实现一个自定义序列化器,但我不知道它是否像我想象的那么容易。

0 个答案:

没有答案