Как я могу передать данные через цикл в XML-файл из текстового файла в C ++?

0

Я пытаюсь передать некоторые данные из основного файла txt в файл XML через C++. Я понимаю, как писать теги, но как я могу чередовать их с жесткого кодирования на добавление динамического списка? Я использую этот класс, чтобы помочь мне.

#include <fstream>
#include <iostream>
#include <string>
#include "xmlwriter.h"

using namespace std;
using namespace xmlw;

int main()
{
  ofstream f("output.xml");
  XmlStream xml(f);

  xml << prolog() // write XML file declaration

      << tag("blocks") 
          << attr("version") << "1"
          << attr("app") << "Snap! 4.0, http://snap.berkeley.edu"

            << tag("block-definition") 
              << attr("category") << "sensing"
              << attr("type") << "command"
              << attr("s") << "data reporter"

            << tag("header") << endtag()
            << tag("code") << endtag()
            << tag("inputs") << endtag()

            << tag("script") 
              << tag("block") 
                << attr("s") << "doSetVar"
                    << tag("l") 
                      << chardata() << "datalist" 
                    << endtag()

                  << tag("block") 
                    << attr("s") << "reportNewList"

                    << tag("list")

                    insertdata();


      << endtag("block-definition"); // close all tags up to specified

  // look: I didn't close "sample-tag", it will be closed in XmlStream destructor

  return 0;
}

void insertdata(){
  string line;
  ifstream myfile ("DATALOG.txt");
  if (myfile.is_open())
  {
    while ( getline (myfile,line) )
    {
      << tag("l") 
      << chardata() << line 
      << endtag()
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 
}
  • 0
    Очень просто. Используйте библиотеку XML. Вам не нужно дублировать усилия.
Теги:
file-writing

1 ответ

0
Лучший ответ

Вам нужно направить этот вывод в insertdata() на объект xml:

  << tag("l") 
  << chardata() << line 
  << endtag()

Один из способов сделать это - передать ссылку на xml в качестве параметра:

void insertdata(XmlStream &x) {
    ...
    x << tag("l") 
    << chardata() << line 
    << endtag();
    ...

Затем назовите его соответствующим образом в main():

    ...
    << tag("list");

    insertdata(xml);

    xml << endtag("block-definition"); // close all tags up to specified
  • 0
    Спасибо вам большое!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню