如何用boost.Qi解析这样的XML并调用名为tags的函数?

时间:2011-03-12 10:09:02

标签: 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()的file()标签相同的名称)我需要发送功能对象如:

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

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

1 个答案:

答案 0 :(得分:2)

我还没有一个有效的例子(我今天早上也要通过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以进行输出。我将自己作为一个练习。如果我到处都会更新。

编辑:呸我被困了!