c++ - 如何使用 boost.Qi 解析此类 XML 并调用名为标签的函数?

标签 c++ boost xml-parsing boost-spirit-qi

所以我知道Boost.Qi XML parsing上有官方教程但我完全不知道如何用它解析这样的 XML:

<host url="http://www.site.com"/>
<run app="myApp" version=443 url="/folderName/innerFolder/myApp.exe"/>
<folder name="folderName" version=443>
<folder name="innerFolder" version=443>
<file name="innerFile.txt" version=443 url="/folderName/innerFolder/innerFile.txt">
<file name="myApp" version=443 url="/folderName/innerFolder/myApp.exe"/>
</folder>
<file name="fileName"  url="/folderName/fileName.exe" version=442/>
</folder>

它看起来很简单,但我不知道如何解析我的 xml..(我需要的很简单 - 调用一个函数(调用与标签相同的名称,如 host() 的文件())我需要发送函数对象,如:

typedef boost::variant<int, std::string, void*> variant_type;
std::map<std::string, variant_type> tagObj;
tagObj["url"] = 10;

那么 - 如何让 boost.Qi 解析我的 XML 并在解析时调用我的函数?

最佳答案

我还没有一个有效的例子(我今天早上也在研究 xml 解析器的例子)但我会说你想改变这个规则

qi::rule<Iterator, std::string(), ascii::space_type> start_tag;

qi::rule<Iterator, tag_struct(), ascii::space_type> start_tag;

其中 tag_struct 是一个 BOOST_FUSION_ADAPT_STRUCT,它接受诸如 folder nameversion url 等内容然后代码来自example然后应该或多或少相同 - 您将需要更改输出的 xml_mini_printer。作为练习,我将亲自尝试一下。如果我到任何地方都会更新。

编辑:呸,我卡住了!

关于c++ - 如何使用 boost.Qi 解析此类 XML 并调用名为标签的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281885/

相关文章:

c++ - 尽管使用等效语句但出现段错误的原因

c++ - 我如何重载 new/STL 以使未知对象更快?

c++ - Boost Graph Library 无向图 无平行边实现

c++ - 什么是 boost::ptr_vector::pop_front() 返回类型?

ios5 - 如何在 xcode 4.3 中使用 GDataXML 更改 xml 标记的值?

node.js - 如何使用 Node xml2js 模块转义字符?

c++ - 使用以前版本的编译器构建的编译器是否可以防止代码注入(inject)?

c++ - FFmpeg av_read_frame 和最大数据包大小

c++ - 为 Android NDK 编译 Boost 库的子集

c# - 我想将 XML Like 字符串拆分为 c# 或 sql 中的标记