【发布时间】:2016-04-29 01:44:20
【问题描述】:
任何帮助都将不胜感激,即使这只是一个快速的想法。
没有库(除了 stl)或外部解析器
我应该创建一个 c++ 程序来读取 XML 文件的数据并将其存储在内存中,但是我很难找到一种方法来执行此操作。我希望我能从这里的某个人那里得到一些指导。还应使用正则表达式来识别文件数据或将其拆分。
标签名称不需要保留,虽然它会很理想,只是嵌套数据,所有数据都存储为文本(字符串)
这是一个示例,向您展示了我所说的使用堆栈和队列的含义。但是,它需要是非特定的。
<House> // tag: push <House> on stack
<Info> // tag: push <Coordinates> on stack
<Code>ABE</Code> // element: push_back on element queue
<City>Allentown</City> // element: push_back on element queue
<ID>PA</ID> // element: puch_back on element queue
</Info> // terminator: pop stack and complete node in queue
<Exact> // tag: push <Exact> on stack
<X>40.65</X> // element: push_back on element queue
<Y>75.43</Y> // element: push_back on element queue
</Exact> // terminator: pop stack and complete node in queue
</House> // terminator: pop stack and complete node in queue
到目前为止,它很蹩脚,但我刚刚能够设置要逐行读取的文件,并通过使用正则表达式检测它来跳过标题,如下所示:
string fileline;
regex header("[<][?](.*?)[?][>]");
while (getline(ifstreamobj, fileline))
{
if (regex_match(fileline, header))
{
cout<<"Skipping what appears to be a header"<<endl;
}
//?
}
cout << "END OF FILE, EOF" << endl;
我真的不知道该怎么办。我猜堆栈将是一堆字符串,标签名称将被推送/弹出
然后队列将是标签之间的实际数据
【问题讨论】:
-
我建议您使用一些现有的 XML 解析器。 This SO answer 的收藏似乎不错。
-
真正的xml解析不是开玩笑,是不是只需要解析xml的一个子集?此外,您的 xml 格式错误
<X>40.65</Latitude>. -
糟糕,现已修复。我需要像显示的那样解析整个 xml 文件,但我不会比嵌套的 3 更深
-
@Raw N,fman 说没有外部解析器。要么这是一个任务并且 fman 没有告诉我们(如果是这种情况,应该使用哪个 fman),或者 fman 正在为因某种原因不允许外部解析器的人工作(应该已经说明),或者 fman 是寻找挑战,是一个贪吃的惩罚。
-
@KyleA 这是涉及对数据进行统计的整个项目的一部分,但是,我需要解析一个 xml 文件来获取该数据。