XMLDocument doc;
doc.LoadFile(filename);
if(doc.ERROR()){
cout << "open failed!" << endl;
类似C语言中文件打开fopen后,需要检查打开是否失败,有函数ErrorID。正常打开返回XML_SUCCESS=0,函数原型为:
XMLError ErrorID() const {
return _errorID;
XMLError:错误信息使用枚举值。
enum XMLError {
XML_SUCCESS = 0,
XML_NO_ATTRIBUTE,
XML_WRONG_ATTRIBUTE_TYPE,
XML_ERROR_FILE_NOT_FOUND,
XML_ERROR_FILE_COULD_NOT_BE_OPENED,
XML_ERROR_FILE_READ_ERROR,
XML_ERROR_PARSING_ELEMENT,
XML_ERROR_PARSING_ATTRIBUTE,
XML_ERROR_PARSING_TEXT,
XML_ERROR_PARSING_CDATA,
XML_ERROR_PARSING_COMMENT,
XML_ERROR_PARSING_DECLARATION,
XML_ERROR_PARSING_UNKNOWN,
XML_ERROR_EMPTY_DOCUMENT,
XML_ERROR_MISMATCHED_ELEMENT,
XML_ERROR_PARSING,
XML_CAN_NOT_CONVERT_TEXT,
XML_NO_TEXT_NODE,
XML_ELEMENT_DEPTH_EXCEEDED,
XML_ERROR_COUNT
- 获取根节点:(因为获取跟节点其实底层调用的还是FirstChildElement,所以直接使用FirstChildElement),因为xml文件是树形结构的文件,所以势必会有根节点、父子节点、兄弟节点。
XMLElement *root = doc.RootElement();
- 获取孩子节点
XMLElement *FirstChildElement();
XMLElement *FirstChildElement(string label);
XMLElement *curNode1 = root->FirstChildElement();
XMLElement *curNode2 = root->FirstChildElement()->FirstChildElement("item");
因为FirstChildElement返回值还是XMLElement类型的指针(类似输出流运算符返回流对象引用一样),所以还可以继续使用FirstChildElement获取接下来的孩子节点。
- 使用NextSiblingElement函数获取兄弟节点,从而实现遍历
XMLElement *nextNode = curNode->NextSiblingElement("item");
- 获取节点的文本信息,使用函数GetText()
string title = curNode->FirstChildElement("title")->GetText();
通过上面的几个函数,就可以实现对整个xml文档的遍历和文本提取了。
XML是一种标记语言,被广泛用来作为跨平台之间交互数据的形式,主要针对数据的内容,通过不同的格式化描述手段(XSLT,CSS等)可以完成最终的形式表达(生成对应的HTML,PDF或者其他的文件格式)。而TinyXML2是一个开源、简单、小巧、高效的C++ XML解析器,由于XML是由节点组成的,节点之间是树形结构,有根节点、父节点、子节点、兄弟节点等。所以可以把其当做树来处理和使用。下面我们来看一下在C++中使用TinyXML2对XML文件进行遍历和提取信息的方法。1.TinyXML2的相关数据类型
<?xml version="1.0" standalone="yes" encoding="utf-8"?>
<FileRoot>
<Attr1 ip="192.168.0.1" timeout="123.456000"/>
<Attr2 ip
C++调用tinyxml2读写xml本例子一共只需要3个文件获取所有代码请到github下载地址:哔哩哔哩有详细的视频讲解地址:main.cpptinyxml2.htinyxml2.cpp其他
本例子一共只需要3个文件
大家好,本文目的是实现C++调用tinyxml2读写xml文件。
第一个文件是自己编写的main.cpp文件;
第二个文件和第三个文件分别是tinyxml2.h和tinyxml2....
C++调用tinyxml2遍历xml所有节点且使用map输出的简单例子本例子一共只需要3个文件获取所有代码请到github下载地址:哔哩哔哩有详细的视频讲解地址:main.cppElectronicProduct.xmltinyxml2.htinyxml2.cpp其他
本例子一共只需要3个文件
大家好,本文目的是实现C++调用tinyxml2读写xml文件。
第一个文件是自己编写的main.cpp...
TCHAR appPath[MAX_PATH+1];
GetModuleFileName(NULL,appPath,MAX_PATH);
CString str_Path=appPath;
int pos = str_Path.ReverseFind('\\');
CString m_...
/*g++ -o test test.cpp -I../tinyxml2 -Wl,--rpath -Wl,/usr/local/lib /usr/local/lib/libtinyxml2.so*/
#include<stdio.h>
#include<string>
#include<iostream>
#include "tinyx...
- 前序遍历:先访问根节点,再访问左子树,最后访问右子树。
- 中序遍历:先访问左子树,再访问根节点,最后访问右子树。
- 后序遍历:先访问左子树,再访问右子树,最后访问根节点。
而在XML解析中,我们可以将XML文件看作一棵树,它的每个节点都有自己的标签、属性和内容。因此,在解析XML文件时,我们也可以采用类似于二叉树的遍历方式来遍历XML树。
具体来说,我们可以使用tinyxml2库中的函数来遍历XML树。以下是一个简单的示例代码,演示如何遍历XML树中的所有节点:
#include "tinyxml2.h"
#include <iostream>
using namespace tinyxml2;
void TraverseXML(XMLElement* element) {
if (element == nullptr) {
return;
// 访问当前节点
std::cout << "Node name: " << element->Name() << std::endl;
// 访问当前节点的属性
const XMLAttribute* attribute = element->FirstAttribute();
while (attribute != nullptr) {
std::cout << "Attribute name: " << attribute->Name() << ", value: " << attribute->Value() << std::endl;
attribute = attribute->Next();
// 访问当前节点的内容
std::cout << "Node value: " << element->GetText() << std::endl;
// 遍历当前节点的子节点
XMLElement* child = element->FirstChildElement();
while (child != nullptr) {
TraverseXML(child);
child = child->NextSiblingElement();
int main() {
XMLDocument doc;
doc.LoadFile("example.xml");
XMLElement* root = doc.FirstChildElement();
TraverseXML(root);
return 0;
这段代码中,我们首先定义了一个TraverseXML函数,用于遍历XML树中的所有节点。该函数的参数是一个XMLElement指针,表示当前节点。在函数内部,我们首先访问了当前节点的标签、属性和内容,然后遍历了当前节点的所有子节点。
在主函数中,我们首先使用XMLDocument类的LoadFile函数来加载XML文件,然后获取XML树的根节点,并将其作为参数传递给TraverseXML函数,从而遍历整个XML树。
希望这个通俗易懂的讲解能够帮助你理解如何使用tinyxml2遍历所有节点。如果你还有其他问题,可以随时问我哦!