Qt使用QXmlStreamWriter、QXmlStreamReader类操作读写Xml

Qt中使用QXmlStreamWriter、QXmlStreamReader类的xml读写的操作:

code:

void xml::xmlStreamWriter()
{
    QString strFile("test.xml");
    QFile *file  = new QFile(strFile);
    if (!file->open(QFile::WriteOnly | QFile::Text)) {
        qDebug() << QString("Cannot write file %1(%2).").arg(strFile).arg(file->errorString());
        return;
    }
    QXmlStreamWriter* wStream = new QXmlStreamWriter(file);
    wStream->setCodec("UTF-8"); // xml编码
    wStream->setAutoFormatting(true);   // 设置自动格式化启用,默认禁止自动化格式
    wStream->writeStartDocument();  // 开始文档
    wStream->writeStartElement("userinfo"); // 根节点
    wStream->writeAttribute("attr", "attr");    // 添加根节点属性
    wStream->writeTextElement("usersname", "100001");  // 子节点
    wStream->writeTextElement("password", "123456");
    wStream->writeTextElement("rememberPasswd", "false");  // 子节点
    wStream->writeTextElement("autoLogin", "false");
    wStream->writeEndElement();
    wStream->writeEndDocument();
    file->close();
}

void xml::xmlStreamReader()
{
    QString strFile("test.xml");
    QFile* file  = new QFile(strFile);
    if (!file->open(QFile::ReadOnly | QFile::Text)) {
        qDebug() << QString("Cannot read file %1(%2).").arg(strFile).arg(file->errorString());
        return;
    }
    QXmlStreamReader* rStream = new QXmlStreamReader(file);
    while (!rStream->atEnd()) {
        QXmlStreamReader::TokenType nType = rStream->readNext();
        if( nType == QXmlStreamReader::StartElement ){
            QString nameStr = rStream->name().toString();
            QXmlStreamAttributes  Attributes  = rStream->attributes();
            if(Attributes.hasAttribute("attr")){
                qDebug()<<Attributes.value("attr").toString();
            }
            if(QString::compare(nameStr,QString("usersname")) == 0) {
                rStream->readNext();
                useInfo->insert("usersname", rStream->text().toString());
                qDebug() << QStringLiteral("id:%1").arg(rStream->text().toString());
            }
            else if(QString::compare(nameStr,QString("password")) == 0) {
                rStream->readNext();
                useInfo->insert("password", rStream->text().toString());
                qDebug() << QStringLiteral("password:%1").arg(rStream->text().toString());
            }
            else if(QString::compare(nameStr,QString("rememberPasswd")) == 0) {
                rStream->readNext();
                useInfo->insert("rememberPasswd", rStream->text().toString());
                qDebug() << QStringLiteral("rememberPasswd:%1").arg(rStream->text().toString());
            }
            else if(QString::compare(nameStr,QString("autoLogin")) == 0) {
                rStream->readNext();
                useInfo->insert("autoLogin", rStream->text().toString());
                qDebug() << QStringLiteral("autoLogin:%1").arg(rStream->text().toString());
            }
        }
    }
}
在Windows下,可以使用Qt自带的QXmlStreamWriter和QXmlStreamReader读写XML文件。 以下是一个简单的示例代码,演示如何使用QXmlStreamWriter和QXmlStreamReader读写XML文件: ```c++ #include <QFile> #include <QXmlStreamWriter> #include <QXmlStreamReader> #include <QDebug> void writeXml() { // 打开XML文件 QFile file("example.xml"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qCritical() << "Failed to open file!"; return; } // 创建XML写入器 QXmlStreamWriter writer(&file); // 写入XML文件头 writer.writeStartDocument(); // 写入根元素 writer.writeStartElement("root"); // 写入子元素和属性 writer.writeStartElement("person"); writer.writeAttribute("id", "1"); writer.writeTextElement("name", "Alice"); writer.writeTextElement("age", "20"); writer.writeEndElement(); writer.writeStartElement("person"); writer.writeAttribute("id", "2"); writer.writeTextElement("name", "Bob"); writer.writeTextElement("age", "30"); writer.writeEndElement(); // 写入根元素结束标记 writer.writeEndElement(); // 写入XML文件结束标记 writer.writeEndDocument(); // 关闭文件和XML写入器 file.close(); writer.clear(); } void readXml() { // 打开XML文件 QFile file("example.xml"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qCritical() << "Failed to open file!"; return; } // 创建XML读取器 QXmlStreamReader reader(&file); // 逐行读取XML文件内容 while (!reader.atEnd()) { // 读取下一个XML元素 QXmlStreamReader::TokenType token = reader.readNext(); if (token == QXmlStreamReader::StartElement) { // 如果是元素开始标签,输出元素名称和属性 qDebug() << "Element: " << reader.name(); QXmlStreamAttributes attrs = reader.attributes(); for (int i = 0; i < attrs.count(); i++) { qDebug() << " Attribute: " << attrs[i].name() << "=" << attrs[i].value(); } } else if (token == QXmlStreamReader::Characters) { // 如果是纯文本内容,输出文本 qDebug() << "Text: " << reader.text(); } } // 关闭文件和XML读取器 file.close(); reader.clear(); } int main() { writeXml(); readXml(); return 0; } ``` 这个示例代码会在Windows下创建名为“example.xml”的XML文件,并写入一些元素和属性。然后再读取这个XML文件,并输出其中的元素名称、属性和文本内容。如果XML文件不存在或无法打开,程序会输出错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值