使用QXmlStreamWriter进行多行注释

时间:2010-12-01 13:55:31

标签: xml qt comments

我正在尝试使用qxmlstreamwriter将xml的多行部分注释到输出文件。我在一个循环中,遍历我的嵌套结构,如果一个结构被标记为“isCommented”,那么我需要插入一个“<! - - ”(不含空格) 然后继续编写输出的XML形式。当我到达结构的末尾时,我需要插入结束注释:“ - >”。 qxmlstreamwriter :: writeCharacters(QString)方法是不够的,因为它会选择特殊字符,例如“<”并重新解释它们。我已经处理了嵌套注释的根除案例......所以这不是问题(内部和外部循环都保证不会被评论)任何替代解决方案的想法?以下是我的代码示例:

...
QXmlStreamWriter writer(&myFile)

for (int i = 0; i < bigStruct.size(); i++){

  if (bigStruct.at(i)->isCommented){
    //start comment sequence
    //insert "<!--"
  }

  writer.writeStartElement("BigStruct");

  for (int j = 0; j < smallerStruct; j++){
      if (smallerStruct.at(i)->isCommented){
        //start comment sequence
        //insert "<!--"
      }

      writer.writeStartElement("SmallerStruct");

      writer.writeTextElement("Stuff", "blah");
      writer.writeTextElement("More Stuff", "blah blah blah");

      writer.writeEndElement();

      if (smallerStruct.at(i)->isCommented){
        //end comment sequence
        //insert "-->"
      }
  }

  writer.writeEndElement();

  if (bigStruct.at(i)->isCommented){
     //endcomment sequence
     //insert "-->"
  }
}

... 

示例XML输出可能看起来像

<BigStruct>
 <SmallerStruct>
    <Stuff>blah</Stuff>
    <More Stuff>blah blah blah</More Stuff>
 </SmallerStruct>
 <!--
  <SmallerStruct>
    <Stuff>blah</Stuff>
    <More Stuff>blah blah blah</More Stuff>
 </SmallerStruct>
 -->
</BigStruct>
<!--
<BigStruct>
    <SmallerStruct>
    <Stuff>blah</Stuff>
    <More Stuff>blah blah blah</More Stuff>
 </SmallerStruct>
</BigStruct>
-->

writeComment()是我第一次发表评论,然而,它只写了一行。当然,我可以在必要时用'\ n'字符创建一个大字符串,但创建该块所需的代码将逃避我的循环的程序流。 我需要的是一种基本上具有writer.startComment()和writer.endComment()的光滑方式...这样我可以在其他xml之后指定注释的开始和结束书面。因此,我可以在评论中使用qxmlstreamwriter编写XML。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我认为这不可能,看看QXmlStreamWriter API。您可以在临时QByteArray上使用另一个QXmlStreamWriter,并将字节数组的内容作为注释写入原始编写器。