2010-07-21 15 views
7

का उपयोग कर मैं निम्नलिखित एक्सएमएल फ़ाइल है:अद्यतन कर रहा है एक्सएमएल फ़ाइल बूस्ट property_tree

 
<xml version="1.0" encoding="utf-8"?> 
<Data> 
    <Parameter1>1</Parameter1> 
</Data> 

मैं एक नया नोड जोड़ना चाहते हैं: = "2" डाटा नोड के लिए पैरामीटर 2। इस कोड काम नहीं करता, सहेजी गई फ़ाइल अभी भी केवल एक पैरामीटर शामिल हैं:

 
    tree.clear(); 
    tree.add_child("Data", dataTree); 

मुझे पसंद नहीं है:

 
    boost::property_tree::ptree tree; 
    boost::property_tree::ptree dataTree; 

    read_xml("test.xml", tree); 
    dataTree = tree.get_child("Data"); 
    dataTree.put("Parameter2", "2"); 

    boost::property_tree::xml_writer_settings w(' ', 4); 
    write_xml("test.xml", tree, std::locale(), w); 

मैं dataTree.put के बाद इन दो पंक्तियों में जोड़ते हैं, मैं सही परिणाम प्राप्त यह समाधान, क्योंकि यह अधिक जटिल वृक्ष संरचनाओं के साथ समस्याएं पैदा करता है। क्या बच्चे नोड्स को हटाने/जोड़ने के बिना संपत्ति के पेड़ को अपडेट करना संभव है?

उत्तर

10

आपका कोड लगभग सही है, यह एक बच्चे नोड को अद्यतन करने का सही तरीका है।

हालांकि, एक छोटी सी बग है। जब आप टाइप करें:

dataTree = tree.get_child("Data"); 

आप dataTree "बच्चा" की एक प्रति के लिए आवंटित। तो, अगली पंक्ति प्रतिलिपि को संदर्भित करती है, न कि आपके पदानुक्रम के लिए। आपको लिखना चाहिए:

boost::property_tree::ptree &dataTree = tree.get_child("Data"); 

तो आप बच्चे को संदर्भ प्राप्त करते हैं।

पूरा उदाहरण है:

using namespace boost::property_tree; 
    ptree tree; 

    read_xml("data.xml", tree); 
    ptree &dataTree = tree.get_child("Data"); 
    dataTree.put("Parameter2", "2"); 

    xml_writer_settings<char> w(' ', 4); 
    write_xml("test.xml", tree, std::locale(), w); 
+1

धन्यवाद! बहुत मददगार, और अब मुझे बहुत ही असभ्य बूस्ट उपयोगकर्ता मंच में पूछने की आवश्यकता नहीं है :) –

संबंधित मुद्दे