使用tinyxml解析和修改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"

解析方法:


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;
}

修改方法:


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()));
        }
    }
}

解析例子:

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;
}

修改例子:

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);
    }
}

猜你喜欢

转载自blog.csdn.net/caicai_xiaobai/article/details/132087752