解析XML文档

时间:2016-12-27 20:29:39

标签: c++ xml parsing tags

我想用c ++解析XML文档,并能够识别特定标签中存在的文本。我检查过像TiyXML和PugiXML这样的解析器,但它们似乎都没有单独识别标签。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

使用RapidXml,您可以遍历节点和属性并识别其标记的文本。

#include <iostream>
#include <rapidxml.hpp>
#include <rapidxml_utils.hpp>
#include <rapidxml_iterators.hpp>

int main()
{
    using namespace rapidxml;

    file<> in ("input.xml"); // Load the file in memory.
    xml_document<> doc;
    doc.parse<0>(in.data()); // Parse the file.

    // Traversing the first-level elements.
    for (node_iterator<> first=&doc, last=0; first!=last; ++first)
    {
        std::cout << first->name() << '\n'; // Write tag.

        // Travesing the attributes of the element.
        for (attribute_iterator<> attr_first=*first, attr_last=0;
                attr_first!=attr_last; ++attr_first)
        {
            std::cout << attr_first->name() << '\n'; // Write tag.
        }
    }
}

答案 1 :(得分:0)

使用pugixml获取所有标记名称:

void dumpTags(const pugi::xml_node& node) {
  if (!node.empty()) {
    std::cout << node.name() << std::endl;
    for (pugi::xml_node child=node.first_child(); child; child=child.next_sibling())
      dumpTags(child);
  }
}

pugi::xml_document doc;
pugi::xml_parse_result result = doc.load("<tag1>abc<tag2>def</tag2>pqr</tag1>");
dumpTags(doc.first_child());