所以我知道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 name
、version
url
等内容然后代码来自example然后应该或多或少相同 - 您将需要更改输出的 xml_mini_printer。作为练习,我将亲自尝试一下。如果我到任何地方都会更新。
编辑:呸,我卡住了!
关于c++ - 如何使用 boost.Qi 解析此类 XML 并调用名为标签的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281885/