Как сбросить атрибут элемента XML с помощью 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>

Мне нужно изменить значения атрибутов, таких как MyDir1, MyDir2, EnableLogging, EnableTool в этом XML-файле.

Поиск в Google помог мне получить значение из атрибута, но не повезло — как изменить значение атрибута или, может быть, я не смог использовать правильный синтаксис.

Кто-нибудь может направить меня в этом?

Код, который я попробовал, как показано ниже:

#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);
}

0

Решение

Вы должны включить пространство имен. Я также использовал 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]