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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用TinyXMLXML解析到自定义的struct中的基本步骤: 1. 定义struct以表示XML元素的结构。例如,如果您要解析以下XML: ``` <person> <name>John</name> <age>30</age> </person> ``` 您可以定义一个名为Person的struct: ``` struct Person { std::string name; int age; }; ``` 2. 使用TinyXML打开XML文件并获取根元素。例如: ``` TiXmlDocument doc("file.xml"); if (!doc.LoadFile()) { // error handling } TiXmlElement* root = doc.FirstChildElement("person"); if (!root) { // error handling } ``` 3. 使用TinyXML的API将XML元素解析到struct中。例如: ``` Person person; TiXmlElement* nameElement = root->FirstChildElement("name"); if (nameElement) { person.name = nameElement->GetText(); } TiXmlElement* ageElement = root->FirstChildElement("age"); if (ageElement) { ageElement->QueryIntAttribute("value", &person.age); } ``` 这里,我们首先获取XML元素`<name>`和`<age>`,然后将它们的文本和属性值分别存储到person结构中。 完整的示例代码如下: ``` #include <iostream> #include <string> #include "tinyxml.h" struct Person { std::string name; int age; }; int main() { TiXmlDocument doc("file.xml"); if (!doc.LoadFile()) { std::cerr << "Error opening file" << std::endl; return 1; } TiXmlElement* root = doc.FirstChildElement("person"); if (!root) { std::cerr << "Error: no <person> element found" << std::endl; return 1; } Person person; TiXmlElement* nameElement = root->FirstChildElement("name"); if (nameElement) { person.name = nameElement->GetText(); } TiXmlElement* ageElement = root->FirstChildElement("age"); if (ageElement) { ageElement->QueryIntAttribute("value", &person.age); } std::cout << "Name: " << person.name << std::endl; std::cout << "Age: " << person.age << std::endl; return 0; } ``` 这个例子演示了如何使用TinyXMLXML解析到自定义的struct中。请注意,这只是一个基本示例,您可能需要根据您的实际需求进行修改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值