2017-10-29 3 views
1

私はXMLファイルを解析するためにブーストライブラリを使用しており、手動でptreeを作成する必要があります。 boost ptreeを使用してxmlファイルの下に作成したいと思います。 XMLの上に実現するために異なるXML属性を持つブーストptreeを手動で作成するにはどうすればよいですか?

<?xml version="1.0"?> 
<Txn> 
    <Resp errCode="0" errInfo="" /> 
    <A exptime="20171230">xyz Information</A> 
    <B>xyz Information</B> 
    <C type="Active">xyz Information</C> 
</Txn> 

、以下 は私のサンプルコードです:

boost::property_tree::ptree pt; 
boost::property_tree::ptree ptr1; 
boost::property_tree::ptree ptr2; 
boost::property_tree::ptree ptr3; 

ptr1.put("<xmlattr>.errCode", Txn.resp.errCode); 
ptr1.put("<xmlattr>.errInfo", Txn.resp.errInfo); 

ptr2.push_back(boost::property_tree::ptree::value_type("A", boost::property_tree::ptree(data))); 
ptr2.push_back(boost::property_tree::ptree::value_type("C", boost::property_tree::ptree(data))); 

ptr2.put("A.<xmlattr>.exptime", data); 
ptr2.put("C.<xmlattr>.type", data); 


ptr3.put("<xmlattr>", data); 

pt.add_child("Txn.Resp", ptr1); 
pt.add_child("Txn", ptr2); 
pt.add_child("Txn.B", ptr3); 

ここで子供ACは常に親Txnと別個のものとして作成しかし、私はTxn

にすべての子を追加したいです

。なぜ私は子どもAとCが違うのか理解できませんでした。 誰かが正しい方法で私を助けてくれたら、とても助かります。ここで

+0

私はこの問題点に私の質問を更新しました。ありがとう –

答えて

1

は、私は考えることができる最も簡単なことだ:

Live On Coliru

#include <boost/property_tree/xml_parser.hpp> 
#include <iostream> 

using boost::property_tree::ptree; 
static auto pretty = boost::property_tree::xml_writer_make_settings<std::string>(' ', 4); 

int main() { 
    ptree root; 
    root.add("Txn.Resp.<xmlattr>.errCode", 0); 
    root.add("Txn.Resp.<xmlattr>.errInfo", ""); 

    root.add("Txn.A", "xyz Information"); 
    root.add("Txn.A.<xmlattr>.exptime", "20171230"); 

    root.add("Txn.B", "xyz Information"); 

    root.add("Txn.C", "xyz Information"); 
    root.add("Txn.C.<xmlattr>.type", "Active"); 

    write_xml(std::cout, root, pretty); 
} 

プリント:

<?xml version="1.0"?> 
<Txn> 
    <Resp errCode="0" errInfo="" /> 
    <A exptime="20171230">xyz Information</A> 
    <B>xyz Information</B> 
    <C type="Active">xyz Information</C> 
</Txn> 

キーポイントは、属性を追加する前に、要素ノードを作成することです、そうでない場合は、代わりに

Live On Coliru

<?xml version="1.0" encoding="utf-8"?> 
<Txn> 
    <Resp errCode="0" errInfo=""/> 
    <A exptime="20171230"/> 
    <A>xyz Information</A> 
    <B>xyz Information</B> 
    <C type="Active"/> 
    <C>xyz Information</C> 
</Txn> 
+0

ありがとう。問題を解決するのに役立ちます。 –

関連する問題