c++ - 如何从 XML 文件中读取信息 C++

标签 c++ attributes nodes rapidxml

<分区>

Possible Duplicate:
rapidxml: how to iterate through nodes? Leaves out last sibling

我正在尝试使用 rapidXML 从 XML 文件中获取一些信息,但无法正常工作。

XML 文件如下所示:

<MODESMESSAGE>
   <DATETIME>20070622141943</DATETIME>
   <MODES>400F2B</MODES>
   <CALLSIGN>BAW134</CALLSIGN>
   <ALTITUDE>120300</ALTITUDE>
   <GROUNDSPEED>451</GROUNDSPEED>
   <TRACK>234</TRACK>
   <VRATE>0</VRATE>
   <AIRSPEED></AIRSPEED>
   <LATITUDE>-14.1102</LATITUDE>
   <LONGITUDE>-31.5789</LONGITUDE>
</MODESMESSAGE>

这就是我的代码的样子

#include <iostream>
#include <cstdlib>
#include "rapidxml.hpp"
#include <iostream>
#include <fstream>
#include <vector>

using namespace rapidxml;
using namespace std;

xml_document<> doc;    // character type defaults to char

int main(){
    ifstream myfile("test.xml");
    xml_document<> doc;
    vector<char> buffer((istreambuf_iterator<char>(myfile)), istreambuf_iterator<char>( ));
    buffer.push_back('\0');
    doc.parse<0>(&buffer[0]);
    xml_node<> *node = doc.first_node();
    xml_attribute<> *att = node->first_attribute();
    cout << node->name();
    cout << att->name(); 
}

我可以编译程序,但是当我运行它时它就停止工作了。我可以获取第一个节点 (MODEMESSAGE),但无法获取其余节点,即 DATETIME 或 MODES。

我该怎么办?

最佳答案

“DATETIME”和“MODES”是“MODEMESSAGE”的内部节点,因此您应该像这样访问它们:

xml_node<> *messagenode = doc.first_node("MODEMESSAGE");
xml_node<> *datetimenode = messagenode->first_node("DATETIME");
xml_node<> *modesnode = messagenode->first_node("MODES");

关于c++ - 如何从 XML 文件中读取信息 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13253544/

相关文章:

c - 为什么这段代码有效而另一段代码无效? (指针和链表)

c++ - 有没有比 lex/flex 更好(更现代)的工具来为 C++ 生成标记器?

c++ - 枚举类型的运算符重载

c# - Amazon SimpleDB - 有没有办法列出域中的所有属性?

python - 为什么Python不调用模块中的函数?

javascript - 如何仅将没有文本节点的类型的元素设置为 sibling ?

c++ - io_getevents 在短于超时的时间内返回的作业数量少于请求的数量

c++ - 将静态 libcurl 添加到 Code::Blocks IDE

自定义 View 中的 Android 属性

java - 只绘制应该在屏幕上的节点?