tinyxml工具创建XML的一个小坑

问题描述:
最近在用tinyxml保存XML文件的时候发现一个问题,程序保存几次XML格式的配置文件以后,就会发现配置文件格式出现问题了,不符合XML规范了。具体为多出了一部分内容。用tinyXML解析没有问题,但是用其他的就会出现问题,非常奇怪。

解决方案:
经过分析发现,原来tinyXML保存文件的时候是以读写的方式打开,而不是一般采用新建的方式。所以,将QIODevice::ReadWrite修改为QIODevice::WriteOnly即可

bool TiXmlDocument::SaveFile(const QString& filename) const
{
    //QString f_name=filename;
        QFile myf;
        myf.setFileName(filename);
        if(myf.open(QIODevice::ReadWrite ))
        {
            QTextStream qout(&myf);
            //qout.setCodec(QTextCodec::codecForName("utf-8"));

            if ( useMicrosoftBOM )
            {
                const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
                const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
                const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;

                qout<<TIXML_UTF_LEAD_0<<endl;//fputc( TIXML_UTF_LEAD_0, fp );
                qout<<TIXML_UTF_LEAD_1<<endl;//fputc( TIXML_UTF_LEAD_1, fp );
                qout<<TIXML_UTF_LEAD_2<<endl;//fputc( TIXML_UTF_LEAD_2, fp );
            }
        QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
        QPrint(qout,0);//need coding

        myf.close();
        }
        else
            return 0;

    return (myf.error()==0);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要将XML文件加载到tinyxml2中,可以使用`tinyxml2::XMLDocument`类的`LoadFile`方法来实现。例如,如果你有一个名为“example.xml”的XML文件,可以使用以下代码将其加载到tinyxml2中: ```c++ tinyxml2::XMLDocument doc; doc.LoadFile("example.xml"); ``` 接下来,你需要获取XML文件中的数据。你可以使用`tinyxml2::XMLDocument`类的`RootElement`方法获取XML文件的根元素。例如,如果你的XML文件的根元素名称为“root”,可以使用以下代码获取该元素: ```c++ tinyxml2::XMLElement* root = doc.RootElement(); ``` 一旦你获取到了XML文件的根元素,你就可以使用`tinyxml2::XMLElement`类的方法来获取子元素、属性和文本节点等信息。例如,假设你的XML文件中有一个名为“person”的元素,其中包含一个名为“name”的属性和一个名为“age”的文本节点,你可以使用以下代码获取这些信息: ```c++ tinyxml2::XMLElement* personElement = root->FirstChildElement("person"); const char* name = personElement->Attribute("name"); const char* age = personElement->GetText(); ``` 以上代码将获取XML文件中第一个名为“person”的元素,并从中获取名为“name”的属性和名为“age”的文本节点的内容。 最后,不要忘记在使用完成后,释放tinyxml2对象占用的内存。可以使用`tinyxml2::XMLDocument`类的`Clear`方法来清除XML文件的内容并释放内存。例如: ```c++ doc.Clear(); ``` 这样就完成了一个新的XML对象的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值