C++ 如何使用boost.Qi和名为标记的调用函数解析这样的XML?

C++ 如何使用boost.Qi和名为标记的调用函数解析这样的XML?,c++,boost,xml-parsing,boost-spirit-qi,C++,Boost,Xml Parsing,Boost Spirit Qi,所以我知道有关于steel的官方教程,但我不知道如何使用它解析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> <fi

所以我知道有关于steel的官方教程,但我不知道如何使用它解析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()的tag like file()相同的名称调用)我需要发送到函数对象,如:

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

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

我还没有一个有效的示例(我今天上午也在学习XML解析器示例),但是我想说您想要更改这个规则

qi::rule<Iterator, std::string(), ascii::space_type> start_tag;
qi::规则开始标签;

qi::规则开始标签;
如果tag_struct是一个
BOOST_FUSION_ADAPT_struct
,它接受诸如
文件夹名
版本
url
等内容,那么来自的代码应该大致相同-您需要更改xml_mini_打印机以进行输出。作为练习,我将自己尝试一下。如果我得到更新任何地方


编辑:呸,我卡住了!

我迫不及待地等待您的代码示例!=)谢谢您的帮助!我不确定boost::spirit是否适合您的任务。当然,这是可能的,而且它们提供了一个解析一小部分XML的最低限度示例。我认为,当目标语言没有可用的解析器时,应该使用Spirit,并使用一个快速、完整、经过良好测试、优化的XML解析器。很好,例如,an与Boost集成良好。
qi::rule<Iterator, tag_struct(), ascii::space_type> start_tag;