Boost读取xml信息

主要使用了

#include "boost\property_tree\ptree.hpp"
#include "boost\property_tree\xml_parser.hpp"

XML信息:

<?xml version = '1.0' encoding='UTF-8'?>
<LiToSim>
    <ProjectInfo>
    <ModuleCurve/>
    </ModuleElemType>
    </ModuleMaterial>
    </ModuleLimits>
    <ModuleLoad/>
    <Solver SimType="Static" OutDir="./">
        <Properties>
            <PropGroup Name="Solver Type">
                <List Name="Type" Data="Small_Displacement#Small_Displacement#Large_Displacement"/>
            </PropGroup>
            <PropGroup Name="Solver Control">
                <Int Name="Increment_Step" Data="10"/>
                <List Name="Converge_Type" Data="Converge_u#Converge_u#Converge_f"/>
                <Double Name="Converge_Value" Data="0.001"/>
                <List Name="Solver" Data="CG_Iterative#CG_Iterative#WaveFront#Skyline"/>
            </PropGroup>
            <PropGroup Name="Solver Run">
                <Int Name="Output Frequency" Data="1"/>
                <Button Name="Output Results" Data="Controls..."/>
                <Button Name="Solve" Data="Run..."/>
            </PropGroup>
        </Properties>
        <OutputCtrls>
				<List Name="OutputFormat" Data="Both#LiToSim#FerView#Both"/>
            <PropGroup Name="Displacement">
                <Bool Name="Ux" Data="false"/>
                <Bool Name="Uy" Data="false"/>
            </PropGroup>
            <PropGroup Name="Stress">
                <Bool Name="VonMises" Data="true"/>
            </PropGroup>
        </OutputCtrls>
    </Solver>
</LiToSim>

从上面这段XML中提取

代码:

extern void GetOutputFormat(const std::string& filemane)
{
    boost::property_tree::ptree pt;
    boost::property_tree::read_xml(filemane, pt);
    auto LiToSim = pt.get_child("LiToSim");
    auto solver = LiToSim.get_child("Solver");
    auto output = solver.get_child("OutputCtrls");
    std::string  name, data;
    for (auto i = output.begin(); i != output.end(); ++i)
    {
        name = i->second.get<std::string>("<xmlattr>.Name");
        if (name == "OutputFormat")
        {
            data = i->second.get<std::string>("<xmlattr>.Data");
            auto pos = data.find_first_of("#");
            data = data.substr(0, pos);
        }
    }
}

从上面的代码可以看出,用的最多的是get_child(“模块名”)的函数,这个函数可以找到XML对应的目录位置,采用 for (auto i = output.begin(); i != output.end(); ++i)的循环,对模块下的内容进行遍历,用i->second.getstd::string(".Name")的方法找到对应位置的属性,这里“Name”找出来就是"OutputFormat",然后再找“Data”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值