#include "XmlConfig.h"
#include <QFile>
#include <QDebug>
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
XmlConfig::XmlConfig()
{
//domWiretFile("../bin/doc.xml");
// domReadyFile("../bin/doc.xml");
//streamXmlWriter("../bin/w.xml");
streamXmlReader("../bin/w.xml");
}
QDomProcessingInstruction createProcessingInstruction(const QString& target, const QString& data);//创建版本和编码格式
QDomNode appendChild(const QDomNode& newChild);//添加数据到节点
QDomElement createElement(const QString& tagName);//创建节点
QDomText createTextNode(const QString& data);//创建节点的文本
QDomAttr createAttribute(const QString& name);//创建属性
QDomAttr setAttributeNode(const QDomAttr& newAttr);//节点关联属性
//void save(QTextStream&, int, EncodingPolicy=QDomNode::EncodingFromDocument) const;//把整个QDomDocument以QTextStream形式保存到本地文件。
bool XmlConfig::domWiretFile(QString strFilePath)
{
QDomDocument doc;
QDomProcessingInstruction instruction; //添加处理命令 只能在第一行适用
instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
QFile file;
file.setFileName(strFilePath);
if(!file.open(QIODevice::ReadWrite | QIODevice::Truncate)) //文件不存在直接读写打开,如果存在直接清掉内容
{
qDebug()<<QString("文件打开失败").toUtf8();
return false;
}
QTextStream strem(&file);
QDomElement element; //xml的一个元素
QDomElement root; //创建一个根节点
root = doc.createElement("COMDATA");
element = doc.createElement("DATABASE"); //创建一个元素名为test1的头
QDomNode node = doc.createTextNode("QSQLITE"); //添加一个节点
//QDomComment elecom = doc.createComment("数据库驱动"); //添加注释
element.appendChild(node); //添加内容
//element.appendChild(elecom);
root.appendChild(element); //添加到根节点下面
element = doc.createElement("UESR");
node = doc.createTextNode("Administertor");
element.appendChild(node);
root.appendChild(element);
element = doc.createElement("PASSWOD");
node = doc.createTextNode("123456");
element.appendChild(node);
root.appendChild(element);
//添加元素下面的组
element = doc.createElement("NETWORK");
QDomElement elementChild1 = doc.createElement("NET");
QDomElement elementChild2= doc.createElement("NETGROUP");
QDomAttr arr = doc.createAttribute("IP");
arr.setValue("192.168.0.1");
elementChild1.setAttributeNode(arr);
arr = doc.createAttribute("PORT");
arr.setValue("5000");
elementChild1.setAttributeNode(arr);
arr = doc.createAttribute("IP");
arr.setValue("244.0.0.1");
elementChild2.setAttributeNode(arr);
arr = doc.createAttribute("PORT");
arr.setValue("5445");
elementChild2.setAttributeNode(arr);
element.appendChild(elementChild1); //添加组下面的元素
element.appendChild(elementChild2);
root.appendChild(element);
// QDomElement elementChild11 = doc.createElement("TEST");
// arr = doc.createAttribute("TESTXML");
// arr.setValue("false");
// elementChild11.setAttributeNode(arr);
// elementChild1.appendChild(elementChild11);
// root.appendChild(element);
// <?xml version="1.0" encoding="UTF-8"?>
// <COMDATA>
// <DATABASE>QSQLITE</DATABASE>
// <UESR>Administertor</UESR>
// <PASSWOD>123456</PASSWOD>
// <NETWORK>
// <NET IP="192.168.0.1" PORT="5000"/>
// <NETGROUP IP="244.0.0.1" PORT="5445"/>
// </NETWORK>
// </COMDATA>
doc.appendChild(root);
doc.save(strem, 4);
return true;
}
//bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );QFile和QDomDocument关联,从QFile对象中读取XML数据。
//QDomElement documentElement() const; //获取dom树的根标签
//QString tagName() const; //获取根/子标签的标签名字,对应于createElement函数的参数
// QString text() const; //获取根/子标签的文本,对应于createTextNode函数的参数
//QDomNode firstChild() const;//根/子标签下的子标签
// QDomNode nextSibling() const; //下一个标签
//bool isNull() const; //判断标签是否为空,用于是否标签到最后面结束了。
//QDomElement toElement() const; //把QDomNode 转换成QDomElement ,即基类转换成子类
//bool hasAttribute(const QString& name) const; //判断标签节点是否有属性
//对应于createAttribute函数操作
//QDomAttr attributeNode(const QString& name);//获取标签节点的属性
//QString name() const;//获取标签节点的属性名称
//QString value() const;//获取标签节点的属性值
bool XmlConfig::domReadyFile(QString strFilePath)
{
QFile file;
file.setFileName(strFilePath);
if(!file.open(QIODevice::ReadOnly)) //文件不存在直接读写打开
{
qDebug()<<QString("文件打开失败").toUtf8();
return false;
}
QDomDocument doc;
if(!doc.setContent(&file))
{
file.close();
return false;
}
QDomElement element = doc.documentElement();
qDebug()<<element.nodeName();
QDomNode node = element.firstChild();
while(!node.isNull())
{
QDomElement element = node.toElement(); // try to convert the node to an element.
if(!element.isNull())
{
qDebug()<<element.tagName() << ":" << element.text();
QDomNode nodeson = element.firstChild(); //得到OBJECT标签
while(!nodeson.isNull())
{
QDomElement elementson = nodeson.toElement();
if(!elementson.isNull())
{
qDebug()<< "---" <<elementson.tagName();
if (elementson.hasAttribute("IP"))
{
qDebug()<< "---" << "IP=" << elementson.attributeNode("IP").value();
}
if (elementson.hasAttribute("PORT"))
{
qDebug()<< "---" << "PORT=" << elementson.attributeNode("PORT").value();
}
QDomNode nodeson1 = elementson.firstChild(); //得到OBJECT标签
while(!nodeson1.isNull())
{
QDomElement elementson1 = nodeson1.toElement();
if(!elementson1.isNull())
{
qDebug()<< "---" <<elementson1.tagName();
if (elementson1.hasAttribute("IP"))
{
qDebug()<< "---" << "IP1=" << elementson1.attributeNode("IP").value();
}
if (elementson1.hasAttribute("PORT"))
{
qDebug()<< "---" << "PORT1=" << elementson1.attributeNode("PORT").value();
}
}
nodeson1 = nodeson1.nextSibling();
}
}
nodeson = nodeson.nextSibling();
}
}
node = node.nextSibling();
}
file.close();
return true;
}
//写操作
void writeStartDocument();
//写文档头,作用类似于创建一个xml文档,并在文档开头部分写入版本信息和编码信息默认为:
// <?xml version="1.0" encoding="UTF-8"?>
void writeEndDocument();
//当调用这个函数时,即表示文档信息