C++ 如何在pugixml中获取节点的内部XML?
我解析一个文档,并希望以字符串的形式检索XML树的一部分。文件(示例):C++ 如何在pugixml中获取节点的内部XML?,c++,xml,pugixml,C++,Xml,Pugixml,我解析一个文档,并希望以字符串的形式检索XML树的一部分。文件(示例): 我认为这是一种方式 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</Fo
我认为这是一种方式
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>" />
这将导致s
具有价值
<Foo bar="baz>42</Foo>
我认为这是一种方式
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>" />
这将导致s
具有价值
<Foo bar="baz>42</Foo>
我找到了一个解决方案,只是谷歌没有很好地索引它们,所以我不得不手动查找。我的解决方案是使用pugi::xml\u writer
和node.print
。在文档中,它们甚至已经显示了std::string
的实现:
struct xml_string_writer: pugi::xml_writer
{
std::string result;
virtual void write(const void* data, size_t size)
{
result.append(static_cast<const char*>(data), size);
}
};
我找到了一个解决方案,只是谷歌没有很好地索引它们,所以我不得不手动查找。我的解决方案是使用pugi::xml\u writer
和node.print
。在文档中,它们甚至已经显示了std::string
的实现:
struct xml_string_writer: pugi::xml_writer
{
std::string result;
virtual void write(const void* data, size_t size)
{
result.append(static_cast<const char*>(data), size);
}
};
当我使用pugi::xml\u writer
和node.print
时,我得到了非常干净的xml。我将发布我的解决方案作为另一个答案。当我使用pugi::xml\u writer
和node.print
时,我得到了非常干净的xml。我会把我的答案作为另一个答案贴出来。这比我的好得多,应该是公认的答案。这比我的好得多,应该是公认的答案。
std::string InnerXML(pugi::xml_node target)
{
xml_string_writer writer;
for (pugi::xml_node child = target.first_child(); child; child = child.next_sibling())
child.print(writer, "");
return writer.result;
}