相关疑难解决方法(0)

使用C++从xml文件中读取一行

我的XML文件有:

<Package> xmlMetadata </ Package>

我正在此文件中搜索标签,并且必须在控制台上打印此标签的开始和结束标签之间的文本.即在这种情况下,我希望在控制台上打印xmlMetadata.同样,它应该在文件中更进一步,如果它遇到同一文件中的另一个<Package>标记,则再次打印.

这是我的代码,但它是打印整个文件的内容:

{
    string line="< Package >";
    ifstream myfile (xmlFileName); //xmlFileName is xml file in which search is to done
    if (myfile.is_open())
    {
    while ( myfile.good() )
    {
      getline (myfile,line);
      std::cout<<line<< endl;
    }
    myfile.close();
    }
    else cout << "Unable to open file"; 
}
Run Code Online (Sandbox Code Playgroud)

在我的整个xml下面显示:

< ? xml version="1.0" ? >
< fileStructure >
< Main_Package >
   File_Navigate
< /Main_Package >
< Dependency_Details >

< Dependency >
   < Package >
      xmlMetadata
   < /Package >
   < Header …
Run Code Online (Sandbox Code Playgroud)

c++ xml

2
推荐指数
1
解决办法
3万
查看次数

RapidXML从文件中读取 - 这里有什么问题?

这两种读取输入文件的方法有什么区别?

1)使用 'ifstream.get()'

2)使用vector<char>with ifstreambuf_iterator<char> (我不太了解!)

(除了使用漂亮的矢量方法的明显答案)

输入文件是XML,如下所示,立即解析为rapidxml文档.(在其他地方初始化,参见示例main函数.)

首先,让我向您展示两种编写'load_config'函数的方法,一种使用ifstream.get(),一种使用vector<char>

方法1 ifstream.get()提供了工作代码和一个安全的rapidXML文档对象:

rapidxml::xml_document<> *load_config(rapidxml::xml_document<> *doc){
   ifstream myfile("inputfile");

   //read in config file
   char ch;
   char buffer[65536];
   size_t chars_read = 0;

   while(myfile.get(ch) && (chars_read < 65535)){
      buffer[chars_read++] = ch;
   }
   buffer[chars_read++] = '\0';

   cout<<"clearing old doc"<<endl;
   doc->clear();

   doc->parse<0>(buffer);

   //debug returns as expected here
   cout << "load_config: Name of my first node is: " << doc->first_node()->name() << "\n";

   return doc;
}
Run Code Online (Sandbox Code Playgroud)

方法2导致另一个库的cloberred rapidXML文档 - 特别是对curl_global_init(CURL_GLOBAL_SSL)的调用[参见下面的主要代码] - 但我还没有把它归咎于curl_global_init. …

c++ file-io rapidxml code-formatting libcurl

0
推荐指数
1
解决办法
3840
查看次数

标签 统计

c++ ×2

code-formatting ×1

file-io ×1

libcurl ×1

rapidxml ×1

xml ×1