将 Boost ptree 节点转换为 XML 字符串
Converting Boost ptree node to XML string
我正在使用 boost(版本 1.70.0)属性 树。有没有办法将节点转换为 XML 字符串,包括节点本身,而不仅仅是节点的子节点?
如果我有这个XML:
<Root>
<SomeOtherElement>..</SomeOtherElement>
<Collection>
<Item Attr1=".." attr2="" />
<Item Attr1=".." attr2="" />
</Collection>
</Root>
auto node = pt.get_child("Root.Collection");
std::ostringstream os;
write_xml(os, node);
然后我回来:
<Item Attr1=".." attr2="" />
<Item Attr1=".." attr2="" />
但我希望得到:
<Collection>
<Item Attr1=".." attr2="" />
<Item Attr1=".." attr2="" />
</Collection>
我找不到任何有关如何操作的示例。因为我可以手动重建;我知道元素名称,我应该能够获取所有属性(如果有的话)。这将需要一些处理和字符串连接。
您可以创建一个助手 属性 树,只包含提取的树。这涉及一些额外的复制,但否则应该可以正常工作:
auto node = pt.get_child("Root.Collection");
ptree extraction{};
extraction.put_child("Root.Collection", node);
boost::property_tree::write_xml(std::cout, extraction);
我正在使用 boost(版本 1.70.0)属性 树。有没有办法将节点转换为 XML 字符串,包括节点本身,而不仅仅是节点的子节点?
如果我有这个XML:
<Root>
<SomeOtherElement>..</SomeOtherElement>
<Collection>
<Item Attr1=".." attr2="" />
<Item Attr1=".." attr2="" />
</Collection>
</Root>
auto node = pt.get_child("Root.Collection");
std::ostringstream os;
write_xml(os, node);
然后我回来:
<Item Attr1=".." attr2="" />
<Item Attr1=".." attr2="" />
但我希望得到:
<Collection>
<Item Attr1=".." attr2="" />
<Item Attr1=".." attr2="" />
</Collection>
我找不到任何有关如何操作的示例。因为我可以手动重建;我知道元素名称,我应该能够获取所有属性(如果有的话)。这将需要一些处理和字符串连接。
您可以创建一个助手 属性 树,只包含提取的树。这涉及一些额外的复制,但否则应该可以正常工作:
auto node = pt.get_child("Root.Collection");
ptree extraction{};
extraction.put_child("Root.Collection", node);
boost::property_tree::write_xml(std::cout, extraction);