xml:
XML有两个先驱:SGML和HTML,但是两者处理数据的能力较差,于是有了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);
}