如何使用 boost::property_tree 重置 xml 元素的属性?
How to RESET attribute of xml element using boost::property_tree?
我有一个 xml 文件,我需要修改该文件中的几个属性。
我的 xml 文件如下所示:
<ns0:App xmlns:ns0="AppSchema" MyDir1="C:\App\Dir1" MyDir2="C:\App\Dir2" ..... some other attributes>
<ns0:Backend DisableBackend="false">
<ns0:Logging EnableLogging="false" LogPath="c:\mylogs"/>
<ns0:ExternalTool EnableTool="false"/>
</ns0:Backend>
</ns0:App>
我需要修改此 xml 文件中的属性值,如 MyDir1、MyDir2、EnableLogging、EnableTool。
谷歌搜索帮助我从属性中获取值,但运气不佳 - 如何修改属性值或者我没有使用正确的语法。
有人可以指导我吗?
我试过的代码如下:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using namespace boost::property_tree;
int main()
{
std::string xml_original = "C:\temp\config.xml";
std::string xml_updated = "C:\temp\config_updated.xml";
ptree tree;
read_xml(sysCfg, tree);
std::cout<<"old value: " << tree.get<std::string>("App.<xmlattr>.MyDir1");
tree.put("App.<xmlattr>.MyDir1", "newPath");
xml_writer_settings<char> w(' ', 4);
write_xml(xml_updated, tree, std::locale(), w);
}
您必须包含命名空间。我还使用 std::string
作为 xml_writer_settings
:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
using namespace boost::property_tree;
int main()
{
std::string xml_original = "config.xml";
std::string xml_updated = "config_updated.xml";
ptree tree;
read_xml(xml_original, tree);
// must include the ns0 namespace
std::cout << "old value: " << tree.get<std::string>("ns0:App.<xmlattr>.MyDir1");
tree.put("ns0:App.<xmlattr>.MyDir1", "newPath");
xml_writer_settings<std::string> w(' ', 4);
write_xml(xml_updated, tree, std::locale(), w);
}
我有一个 xml 文件,我需要修改该文件中的几个属性。
我的 xml 文件如下所示:
<ns0:App xmlns:ns0="AppSchema" MyDir1="C:\App\Dir1" MyDir2="C:\App\Dir2" ..... some other attributes>
<ns0:Backend DisableBackend="false">
<ns0:Logging EnableLogging="false" LogPath="c:\mylogs"/>
<ns0:ExternalTool EnableTool="false"/>
</ns0:Backend>
</ns0:App>
我需要修改此 xml 文件中的属性值,如 MyDir1、MyDir2、EnableLogging、EnableTool。
谷歌搜索帮助我从属性中获取值,但运气不佳 - 如何修改属性值或者我没有使用正确的语法。
有人可以指导我吗?
我试过的代码如下:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using namespace boost::property_tree;
int main()
{
std::string xml_original = "C:\temp\config.xml";
std::string xml_updated = "C:\temp\config_updated.xml";
ptree tree;
read_xml(sysCfg, tree);
std::cout<<"old value: " << tree.get<std::string>("App.<xmlattr>.MyDir1");
tree.put("App.<xmlattr>.MyDir1", "newPath");
xml_writer_settings<char> w(' ', 4);
write_xml(xml_updated, tree, std::locale(), w);
}
您必须包含命名空间。我还使用 std::string
作为 xml_writer_settings
:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
using namespace boost::property_tree;
int main()
{
std::string xml_original = "config.xml";
std::string xml_updated = "config_updated.xml";
ptree tree;
read_xml(xml_original, tree);
// must include the ns0 namespace
std::cout << "old value: " << tree.get<std::string>("ns0:App.<xmlattr>.MyDir1");
tree.put("ns0:App.<xmlattr>.MyDir1", "newPath");
xml_writer_settings<std::string> w(' ', 4);
write_xml(xml_updated, tree, std::locale(), w);
}