Я думаю pugi::xml_node::print()
- это путь.
pugi::xml_node node = root.child("MyData");
pugi::xml_node child = node.first_child();
std::stringstream ss;
child.print(ss);
std::string s = ss.str();
Проблема в том, что s
теперь будет иметь значение
<Foo bar="baz>42</Foo> </MyData> <OtherData>Something</OtherData> > </MyConfig>" />
- Это текстовое дерево от узла и далее;
- Это беспорядок с html escape-последовательностями, а не
<
и >
Не идеально, но это, очевидно, можно решить с помощью некоторых манипуляций со строками.
// replace < with <
size_t off = 0;
while ((off = s.find("<", off)) != s.npos)
s.replace(off, 4, "<");
// replace > with >
off = 0;
while ((off = s.find(">", off)) != s.npos)
s.replace(off, 4, ">");
// truncate at the closing tag
size_t end_open = s.find(">", 0);
size_t end_close = s.find(">", end_open + 1);
s = s.substr(0, end_close + 1);
Что будет привести к s
, имеющему значение
<Foo bar="baz>42</Foo>