C++ 如何在pugixml中获取节点的内部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&gt;42&lt;/Fo

我解析一个文档,并希望以字符串的形式检索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&gt;42&lt;/Foo&gt;     &lt;/MyData&gt;     &lt;OtherData&gt;Something&lt;/OtherData&gt; &gt; &#10;&lt;/MyConfig&gt;" />
这将导致
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&gt;42&lt;/Foo&gt;     &lt;/MyData&gt;     &lt;OtherData&gt;Something&lt;/OtherData&gt; &gt; &#10;&lt;/MyConfig&gt;" />
这将导致
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;
}