2010-12-01 15 views
1

qxmlstreamwriterを使用して、出力ファイルにxmlの複数行のセクションをコメントしようとしています。私はループ内にあり、入れ子構造を繰り返しています。構造体が "isCommented"と書かれている場合は、 "<! - - "(スペースなし)を挿入する必要があります。 出力のXML形式を書き続けます。私がその構造の終わりに達すると、私は終わりのコメントを挿入する必要があります: " - >"。 qxmlstreamwriter :: writeCharacters(QString)メソッドは、 "<"のような特殊文字を取り出して再解釈するので十分ではありません。私はすでにネストされたコメントのケースを根絶しています...それは問題ではありません(内側と外側のループは両方ともコメントされないことが保証されています)。以下は、私のコードの例を次に示します。QXmlStreamWriterの複数行のコメント

... 
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を書くことができました。

お時間をいただきありがとうございます。

答えて

0

QXmlStreamWriter APIを見ると、それは可能ではないと思います。一時的なQByteArrayで別のQXmlStreamWriterを使用し、バイト配列の内容をコメントとして元のライターに書き込むことができます。

+0

返信いただきありがとうございます。 writer.startComment()/ writer.endComment()の機能をサポートする他のqXMLパーサクラスについて知っていますか? – GatorGuy

+0

いいえ、私はすべての作家がテキストの単一のエンティティにコメントを処理すると思います。 を基になるデバイスに書き込もうとする可能性があり、XMLライターが気づいていないことを願っていますが、それは醜いハックになり、壊れる可能性があります。私は一時的な作家のために行くと、その処理を隠すためにいくつかの素敵なconvienceメソッドを追加します。 –

関連する問題