gpt4 book ai didi

c++ - 如何在pugixml中获取节点的内部XML?

转载 作者:行者123 更新时间:2023-12-03 07:09:09 26 4
gpt4 key购买 nike

我解析文档,并希望将XML树的一部分作为字符串检索。该文档(示例):

<?xml version="1.0"?>
<MyConfig>
<MyData>
<Foo bar="baz>42</Foo>
</MyData>
<OtherData>Something</OtherData>
</MyConfig>

编码:
  pugi::xml_document doc;
doc.load_file(documentFileName);
pugi::xml_node root = doc.child("MyConfig");

// parse custom data
_customData = root.child("MyData"). <-- HOW TO GET INNER XML?

自定义数据的预期内容(如果格式丢失,我不在乎):
"<Foo bar="baz>42</Foo>"

这该怎么做?

最佳答案

我认为 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现在将有值(value)
<Foo bar="baz&gt;42&lt;/Foo&gt;     &lt;/MyData&gt;     &lt;OtherData&gt;Something&lt;/OtherData&gt; &gt; &#10;&lt;/MyConfig&gt;" />
  • 这是从节点开始的文本树,并且;
  • 杂乱的HTML转义序列,而不是<>

  • 这并不理想,但是显然可以通过一些字符串操作来解决。
    // replace &lt; with <
    size_t off = 0;
    while ((off = s.find("&lt;", off)) != s.npos)
    s.replace(off, 4, "<");

    // replace &gt; with >
    off = 0;
    while ((off = s.find("&gt;", 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具有值(value)
    <Foo bar="baz>42</Foo>

    关于c++ - 如何在pugixml中获取节点的内部XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335343/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com