如何通过循环将数据从C ++中的txt文件提供到XML文件中?

时间:2014-12-06 17:52:49

标签: c++ xml file-writing

我试图通过C ++将基本txt文件中的一些数据提供给XML文件。我理解如何编写标签,但是如何从硬编码到添加一些动态列表?我正在使用this课来帮助我。

#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"; 
}

1 个答案:

答案 0 :(得分: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