Step by step.Just do it. Fighting!
boost中提供了对配置文件读取的支持:property_tree。
property_tree的核心基础是basic_ptree。其接口像std::list。可以执行很多基本的元素操作,比如使用begin()、end()等。此外还加入了操作属性树的get()、get_child()、get_value()、data()等额外的操作。
测试的xml 文件:
SigRaw.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<type>txt</type>
<separator>|</separator>
<fields>
<field name="start_time_s" id="1" type="u32" len="0" defvalue="0"/>
<field name="start_time_ns" id="2" type="u32" len="0" defvalue="0" />
</fields>
</root>
SigRaw_CQ.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<struct name="bssap" alias="b">
<rowkey class="com.dinglicom.clouder.decode.cq2.CdrKeyParserImpl">
<field section="city_code" name="calling_number" id="40" length="4" defvalue="0" />
<field value="b" name="called_number" id="50" length="8"/>
<field name="imsi" id="60" type="int" length="11" defvalue="0" decode="hex" placeholder="_" pos_placeholder="head"/>
<field name="imei" id="70" type="int" length="11" defvalue="0" decode="hex" placeholder="_" pos_placeholder="head"/>
</rowkey>
<timestamp class="com.dinglicom.clouder.decode.cq2.McTimestampParserImpl" formula="end_time_s*10+cdr_index">
</timestamp>
<indexs>
<cf name="CALLED_NUMBER" class="com.dinglicom.clouder.decode.cq2.CallednumParserImpl">
<field name="calling_number" id="10" type="int" length="4" defvalue="0" decode="hex" placeholder="0" pos_placeholder="head"/>
</cf>
<cf name="IMSI" class="com.dinglicom.clouder.decode.cq2.ImsiParserImpl">
<field name="imsi" id="11" type="long" length="8" defvalue="0" decode="hex" placeholder="0" pos_placeholder="head"/>
</cf>
</indexs>
<ag name="AG1">
<cf name="CF1">
<cq name="CF1" type="text" seperator=",">
<field name="calling_number_str" id="20" type="string" length="24" defvalue="0"/>
<field name="called_number_str" id="30" type="string" length="24" defvalue="0"/>
</cq>
<cq name="CF1" type="bin" seperator="">
<field name="calling_number_str" id="30" type=