Многострочный комментарий с QXmlStreamWriter - PullRequest
1 голос
/ 01 декабря 2010

Я пытаюсь закомментировать многострочный раздел xml в выходной файл, используя qxmlstreamwriter. Я нахожусь в цикле, перебирая мои вложенные структуры, и если структура помечена как isCommented, то мне нужно вставить «<! - -» (без пробелов) затем продолжайте писать XML-форму вывода. Когда я доберусь до конца этой структуры, мне нужно вставить конечный комментарий: «->». Метод qxmlstreamwriter :: writeCharacters (QString) будет недостаточен, так как он выбирает специальные символы, такие как «<», и повторно их интерпретирует. Я уже занимался искоренением случаев для вложенных комментариев ... так что это не проблема (внутренний и внешний цикл гарантированно не будут прокомментированы). Есть идеи для альтернативного решения? Ниже приведен пример моего кода: </p>

...
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 , Поэтому я мог написать XML, используя свой qxmlstreamwriter внутри комментария.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 01 декабря 2010

Я не думаю, что это возможно, глядя на API QXmlStreamWriter. Вы можете использовать другой QXmlStreamWriter для временного QByteArray и записать содержимое байтового массива в качестве комментария к исходному устройству записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...