QT与xml

xml
XML有两个先驱:SGMLHTML,但是两者处理数据的能力较差,于是有了xml的诞生。
XML声明是XML文档的第一句,其格式如下:

<?xml version="1.0" encoding="utf-8"?>

在XML文档中,大小写是有区别的。<p><P>是不同的标记。
良好格式的XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。
XML规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。
QT与XML
有个博主上这个图写的超级清楚

static bool creatXml()//创建xml文件
{
    QFile file("data.xml");//创建文件
    if(file.exists())//判断是否存在
        return true;
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))//判断是否打开文件,用QIODevice,Truncate表示清空原来的内容

        return  false;
    QDomDocument doc;//可以访问这个对象中的每一个节点,每一个节点对应XML文件里的一个标记
    QDomProcessingInstruction instruction;
    instruction = doc.createProcessingInstruction("xml", "version = \"1.0\"encoding = \"UTF-8\"");
    doc.appendChild(instruction);//添加处理命令
    QDomElement root = doc.createElement(QString("销售清单"));//根节点
    doc.appendChild(root);//添加第一个子节点和子元素
    QTextStream out(&file);
    doc.save(out,4);//保存操作
    file.close();//关闭文件
    return true;
}

QString Sell::getDateTime(DateTimeType type)//判断需要时间类型,并返回合适的时间
{
    QDateTime datetime = QDateTime::currentDateTime();//获取现在时间
    QString date = datetime.toString("yyyy-MM-dd");
    QString time = datetime.toString("hh::mm");
    QString dateAndTime = datetime.toString("yyyy-MM-dd dddd hh:mm");
    if(type == Date)
        return  date;
    else if (type == Time)
        return  time;
    else
        return dateAndTime;
}

bool Sell::docRead()//读取xml文件
{
    QFile file("data.xml");
    if(!file.open(QIODevice::WriteOnly))//判断是否打开文件
        return false;
    if(!doc.setContent(&file))//获取文本
    {
        file.close();
        return false;
    }
    file.close();
    return true;
}
bool Sell::docWrite()//写入xml文件并保存
{
    QFile file("data.xml");
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))//判断是否打开文件
        return false;
    QTextStream out(&file);
    doc.save(out,4);//这里的4是缩进4格
    file.close();
    return true;
}
void Sell::writeXml()//修改xml文件
{
    if(docRead())//从文件中读取
    {
        QString currentDate = getDateTime(Date);//获取时间,类型为date
        QDomElement root = doc.documentElement();//获取根节点
        //根据是否有日期节点进行处理
        if(!root.hasChildNodes())
        {
            QDomElement date = doc.createElement(QString("日期"));//添加元素
            QDomAttr curDate = doc.createAttribute("date");//添加属性
            curDate.setValue(currentDate);//设置属性值
            date.setAttributeNode(curDate);//设置属性节点
            root.appendChild(date);//添加到根节点的子节点
        }
        else
        {
            QDomElement date = root.lastChild().toElement();
            //根据是否已经有今天的日期进行处理
            if(date.attribute("date") == currentDate)
            {
                creatNodes(date);
            }
            else
            {
                QDomElement date = doc.createElement(QString("日期"));
                QDomAttr curDate = doc.createAttribute("date");
                curDate.setValue(currentDate);
                date.setAttributeNode(curDate);
                root.appendChild(date);
                creatNodes(date);
            }
        }
    }
    docWrite();//写入文件
}
void Sell::creatNodes(QDomElement &date)//创建节点
{
    //应该需要与数据库相关联
    QDomAttr curDate = doc.createAttribute("add");
//    curDate.setValue();
    date.setAttributeNode(curDate);
    date.appendChild(curDate);
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值