• 10734阅读
  • 8回复

一个简单方法,读取xml文件,然后写入另外一个新的xml文件 [复制链接]

上一主题 下一主题
离线foxyz
 

只看楼主 倒序阅读 楼主  发表于: 2009-11-10
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
简单来说,读一个xml文件,然后对某些节点进行修改(本例子没有修改,增加修改也很简单),然后写入目标xml文件的例子。

  QFile srcFile(srcFileName);
    if (!srcFile.open(QFile::ReadOnly | QFile::Text)) {
        QMessageBox::warning(this, tr("Warning/ Convert"),
                          tr("Cannot open soruce file %1:\n%2.")
                          .arg(srcFileName)
                          .arg(srcFile.errorString()));
        return;
    }

    QFile tarFile(tarFileName);
    if (!tarFile.open(QFile::WriteOnly | QFile::Text | QIODevice::Truncate)) {
        QMessageBox::warning(this, tr("Warning/ Convert"),
                          tr("Cannot open target file %1:\n%2.")
                          .arg(tarFileName)
                          .arg(tarFile.errorString()));
        srcFile.close();
        return;
    }

    QXmlStreamReader reader(&srcFile);
    QXmlStreamWriter writer(&tarFile);

    writer.setAutoFormatting(true);
    writer.writeStartDocument();

   while (!reader.atEnd())
    {
        reader.readNext();

        if(reader.isStartElement())
        {
            QXmlStreamAttributes attr = reader.attributes();
            writer.writeStartElement(reader.name().toString());
            if(attr.size()>0)
            {
                writer.writeAttributes(attr);
            }
        }
        if(reader.isCharacters())
        {
            writer.writeCharacters(reader.text().toString());
        }
        if(reader.isEndElement())
        {
            writer.writeEndElement();
        }
    }

    writer.writeEndDocument();

    srcFile.close();
    tarFile.Close();
离线午小夜

只看该作者 1楼 发表于: 2009-11-10
作品展示?
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线foxyz

只看该作者 2楼 发表于: 2009-11-11
就是写个例子给大家参考一下. 关于使用xmlStreamReader和XmlstreamWriter,
特别是对于很大的xml文件。
离线wd007

只看该作者 3楼 发表于: 2009-11-11
这个不错的,辛苦
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线sylcool

只看该作者 4楼 发表于: 2010-01-05
好像是C++ GUI QT 4第十六章的例子~
S.D.Light
离线foxyz

只看该作者 5楼 发表于: 2010-01-05
这么老的一个帖子都被翻出来了阿! 呵呵.
这段代码后来被改写了. 现在用于大批量的按照规则修改 *.ui文件的某些properties,比如:title, 增加一些特定widget的properties
离线vaqeteart

只看该作者 6楼 发表于: 2010-03-23
谢谢分享!!按照这个代码,受益匪浅!!
离线luoyes

只看该作者 7楼 发表于: 2010-03-24
mark
离线longwenbiao
只看该作者 8楼 发表于: 2010-08-17
楼主真是牛逼,不过Qt就真的对xml没有好的读写办法吗?
快速回复
限100 字节
 
上一个 下一个