21xrx.com
2024-06-03 01:32:22 Monday
登录
文章检索 我的文章 写文章
C++ 解析 XML 字符串
2023-06-22 04:43:10 深夜i     --     --
C++ 解析 XML 字符串 节点

XML是一种用来传输和存储数据的标记语言,它允许用户定义自己的标记。在许多应用程序中,如网络爬虫和Web服务等,都需要解析XML。C++可以通过一些库来解析XML字符串,例如pugixml和TinyXML。

pugixml是一个非常流行的C++ XML解析库,可以根据XML字符串或文件创建DOM文档树,也可以对DOM树进行遍历、节点选择和修改等操作。以下是一个简单的使用pugixml解析XML字符串的例子:


#include "pugixml.hpp"

#include <iostream>

int main()

{

  const char* xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><name>John</name><age>30</age></root>";

  pugi::xml_document doc;

  pugi::xml_parse_result result = doc.load_string(xml_string);

  if (result)

  {

    pugi::xml_node root = doc.child("root");

    std::cout << "Name: " << root.child("name").text().get() << std::endl;

    std::cout << "Age: " << root.child("age").text().get() << std::endl;

  }

  else

  {

    std::cout << "XML parsing failed: " << result.description() << std::endl;

  }

  return 0;

}

在上面的代码中,我们首先定义一个XML字符串,然后创建一个pugi::xml_document对象,并使用load_string方法将XML字符串加载到DOM树中。如果加载成功,我们可以使用根节点“root”访问xml文档中的节点,如使用child方法获取“name”和“age”节点,并使用text方法获取节点的值。

另一个常用的XML解析库是TinyXML,它的使用方式类似于pugixml。以下是使用TinyXML解析XML字符串的示例代码:


#include "tinyxml2.h"

#include <iostream>

int main()

{

  const char* xml_string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><name>John</name><age>30</age></root>";

  tinyxml2::XMLDocument doc;

  tinyxml2::XMLError result = doc.Parse(xml_string);

  if (result == tinyxml2::XML_SUCCESS)

  {

    tinyxml2::XMLElement* root = doc.FirstChildElement("root");

    std::cout << "Name: " << root->FirstChildElement("name")->GetText() << std::endl;

    std::cout << "Age: " << root->FirstChildElement("age")->GetText() << std::endl;

  }

  else

  

    std::cout << "XML parsing failed: " << result << std::endl;

  

  return 0;

}

在这个示例代码中,我们通过创建tinyxml2::XMLDocument对象,并使用Parse方法将XML字符串加载到DOM树中。如果加载成功,我们可以使用FirstChildElement方法获取根节点“root”,并使用GetText方法获取节点的值。

无论是使用pugixml还是TinyXML,解析XML字符串都是很容易的。通过遍历DOM树,我们可以轻松地访问XML文档中的节点和属性,并执行我们需要的操作。这些库还提供了许多其他的功能,例如节点选择器和XML序列化,可以帮助我们更加灵活地处理XML数据。

  
  
下一篇: "C++评教系统"

评论区

{{item['qq_nickname']}}
()
回复
回复