使用tinyxml解析和修改XML文件

首先要清楚XML文件包含哪些元素:

他是由元素、文本或者两者混合物组成。元素可以拥有属性,元素是指从开始标签到结束标签的部分。

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<books>
          <book id="1001">
           
                <name>面纱</name>
                <info>请记住我,虽然再见必须说</info>
          </book>
           <book id="1002">
                <name>人生第一次</name>
                <info>愿他们、我们的一生平淡而有意义</info>
          </book>
</books> 

开始操作

1.在网上下载到tinnyxml的源码

2.导入tinyxml的头文件

复制代码
#include "./TinyXML/tinyxml.h"

解析方法:

cpp 复制代码
QString XMLreadwrite::parseIPAddress() const
{
    QList<QString> nodeList;
    nodeList.append("net");
    nodeList.append("fix_ip");
    QString attrText = "ip";

    TiXmlNode *pNode = (TiXmlNode*)FindTextNode(nodeList);
    QString data = ParseNodeData(pNode, attrText);

    return data;
}

修改方法:

cpp 复制代码
void XMLreadwrite::ModifyNodeData(TiXmlNode *pNode, QString text, QString data) const
{
    for(pNode = pNode->FirstChild();
        pNode;
        pNode = pNode->NextSibling())
    {
        if(QString(QLatin1String(pNode->Value())) == text)
        {
            qDebug()<<"......."<<text<<data;
            const char cData[1024] = {0};
            memcpy((void*)cData,data.toStdString().c_str(),data.size());
            //首先清除所有文本
            pNode->Clear();
            //然后插入文本
            TiXmlText  *pValue = new TiXmlText(cData);
            pNode->LinkEndChild(pValue);
            qDebug()<<"Modified successfully"<<QString(QLatin1String(pNode->ToElement()->GetText()));
        }
    }
}

解析例子:

cpp 复制代码
QString XMLreadwrite::parseCodeFormat() const
{
    QList<QString> nodeList;
    nodeList.append("param_video");
    QString attrText = "attr_format";

    TiXmlNode *pNode = (TiXmlNode*)FindTextNode(nodeList);
    QString nodeAttr = QString(QLatin1String(pNode->ToElement()->Attribute("name")));
    QString data = "";
    if(nodeAttr == "Visible")
    {
        data = ParseNodeData(pNode, attrText);
    }

    return data;
}

修改例子:

cpp 复制代码
void XMLreadwrite::modifyCodeFormat(QString data)
{
    QList<QString> nodeList;
    nodeList.append("param_video");
    QString attrText = "attr_format";

    TiXmlNode *pNode = (TiXmlNode*)FindTextNode(nodeList);
    QString nodeAttr = QString(QLatin1String(pNode->ToElement()->Attribute("name")));
    if(nodeAttr == "Visible")
    {
        ModifyNodeData(pNode, attrText, data);
    }
}
相关推荐
码农幻想梦3 天前
实验四 XML
xml
dilvx4 天前
二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2
android·xml
菜鸟阿康学习编程9 天前
JavaWeb 学习笔记 XML 和 Json 篇 | 020
xml·java·前端
索然无味io9 天前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
Ase5gqe11 天前
大数据-259 离线数仓 - Griffin架构 修改配置 pom.xml sparkProperties 编译启动
xml·大数据·架构
JavaEdge.13 天前
IDEA导入Maven工程不识别pom.xml
xml·maven·intellij-idea
前网易架构师-高司机13 天前
行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%
xml·yolo·行人检测数据集
梦幻加菲猫13 天前
加菲工具格式化XML:让数据呈现更清晰
xml·web·网页开发·xml格式化
我曾经是个程序员13 天前
C#操作Xml节点
xml·c#
violin-wang13 天前
XML映射文件
xml·java·前端·mybatis