pugiget 所有文本节点 (PCDATA),而不仅仅是第一个

pugiget all text nodes (PCDATA), not just the first

本文关键字:不仅仅是 第一个 PCDATA 文本 节点 pugiget      更新时间:2023-10-16

目前,如果我尝试解析

<parent>
    First bit of text
    <child>
    </child>
    Second bit of text
</parent>

我只得到First bit of text

parent.text().get()

抓取parent中的所有文本节点的正确方法是什么?

  1. 有没有一个很好的实用程序功能?
  2. 如何遍历所有子项?

没有连接所有文本的函数;如果要获取文本节点子节点的列表,则有两个选项:

  1. XPath 查询:

     pugi::xpath_node_set ns = parent.select_nodes("text()");
     for (size_t i = 0; i < ns.size(); ++i)
         std::cout << ns[i].node().value() << std::endl;
    
  2. 带类型检查的手动迭代:

     for (pugi::xml_node child = parent.first_child(); child; child = child.next_sibling())
         if (child.type() == pugi::node_pcdata)
             std::cout << child.value() << std::endl;
    

请注意,如果您可以使用 C++11,那么第二个选项可以更简洁:

for (pugi::xml_node child: parent.children())
    if (child.type() == pugi::node_pcdata)
        std::cout << child.value() << std::endl;

(当然,您也可以使用 Ranged for 遍历xpath_node_set)

在我拥有的pugixml版本中,我可以使用print方法将所有内部xml从节点获取到流中。 例如: std::stringstream ss; node.print(ss); return ss.str();

相关文章: