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);
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐