XML语言数据读写理解6

85 阅读2分钟

接着上一节开始,我们继续添加如下代码:

QDomElement elementA11 = doc.createElement("A");
elementA11.setAttribute("id", "1");
QDomElement elementA12 = doc.createElement("A");
elementA12.setAttribute("id", "2");
QDomElement elementB1 = doc.createElement("B");
elementB1.setAttribute("id", "3");
QDomElement elementC1 = doc.createElement("C");
elementC1.setAttribute("id", "4");
QDomElement elementD1 = doc.createElement("D");
elementD1.setAttribute("id", "5");
QDomElement elementA21 = doc.createElement("A");
elementA21.setAttribute("id", "1");
QDomElement elementA22 = doc.createElement("A");
elementA22.setAttribute("id", "2");
QDomElement elementB2 = doc.createElement("B");
elementB2.setAttribute("id", "3");
QDomElement elementC2 = doc.createElement("C");
elementC2.setAttribute("id", "4");
QDomElement elementD2 = doc.createElement("D");
elementD2.setAttribute("id", "5");
firstEle.appendChild(elementA11);
firstEle.appendChild(elementA12);
firstEle.appendChild(elementB1);
secondEle.appendChild(elementC1);
secondEle.appendChild(elementD1);
firstEle2.appendChild(elementA21);
firstEle2.appendChild(elementA22);
firstEle2.appendChild(elementB2);
secondEle2.appendChild(elementC2);
secondEle2.appendChild(elementD2);

    我们看到每个创建的元素下面都有一句 elementA11.setAttribute("id", "1"); 表示我们给它添加了属性,效果如下:

    最后就是添加数据了。数据和其他节点唯一的区别就是属性多了几个而已:

    然后我们加入如下代码:

QDomElement elementA11_T = doc.createElement("T");
elementA11_T.setAttribute("param1","dwdw");elementA11_T.setAttribute("param2", 127);elementA11_T.setAttribute("param3", 131);
QDomElement elementA11_R = doc.createElement("R");
elementA11_R.setAttribute("param1","fdfg");elementA11_R.setAttribute("param2", 117);elementA11_R.setAttribute("param3", 111);
elementA11.appendChild(elementA11_T);
elementA11.appendChild(elementA11_R);

    之后显示的效果如下:

    最后提供一下完整的文件写入代码:
//打开或创建文件
QString fileName{ "C:\\Developer\\Rendering\\Rendering\\XML\\Motor.xml" };
QFile file(fileName);
//QIODevice::Truncate表示清空原来的内容

QDomDocument doc;
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
QDomElement root = doc.documentElement();
root = doc.createElement("ROOT");
doc.appendChild(root);

QDomElement mode = doc.documentElement();
mode = doc.createElement("Mode");
QDomElement mode2 = doc.documentElement();
mode2 = doc.createElement("Mode2");
root.appendChild(mode);
root.appendChild(mode2);

QDomElement firstEle = doc.documentElement();
firstEle = doc.createElement("firstEle");
QDomElement secondEle = doc.documentElement();
secondEle = doc.createElement("secondEle");
QDomElement firstEle2 = doc.documentElement();
firstEle2 = doc.createElement("firstEle2");
QDomElement secondEle2 = doc.documentElement();
secondEle2 = doc.createElement("secondEle2");
mode.appendChild(firstEle);
mode.appendChild(secondEle);
mode2.appendChild(firstEle2);
mode2.appendChild(secondEle2);

QDomElement elementA11 = doc.createElement("A");
elementA11.setAttribute("id", "1");
QDomElement elementA12 = doc.createElement("A");
elementA12.setAttribute("id", "2");
QDomElement elementB1 = doc.createElement("B");
elementB1.setAttribute("id", "3");
QDomElement elementC1 = doc.createElement("C");
elementC1.setAttribute("id", "4");
QDomElement elementD1 = doc.createElement("D");
elementD1.setAttribute("id", "5");
QDomElement elementA21 = doc.createElement("A");
elementA21.setAttribute("id", "1");
QDomElement elementA22 = doc.createElement("A");
elementA22.setAttribute("id", "2");
QDomElement elementB2 = doc.createElement("B");
elementB2.setAttribute("id", "3");
QDomElement elementC2 = doc.createElement("C");
elementC2.setAttribute("id", "4");
QDomElement elementD2 = doc.createElement("D");
elementD2.setAttribute("id", "5");
firstEle.appendChild(elementA11);
firstEle.appendChild(elementA12);
firstEle.appendChild(elementB1);
secondEle.appendChild(elementC1);
secondEle.appendChild(elementD1);
firstEle2.appendChild(elementA21);
firstEle2.appendChild(elementA22);
firstEle2.appendChild(elementB2);
secondEle2.appendChild(elementC2);
secondEle2.appendChild(elementD2);

QDomElement elementA11_T = doc.createElement("T");
elementA11_T.setAttribute("param1","dwdw");elementA11_T.setAttribute("param2", 127);elementA11_T.setAttribute("param3", 131);
QDomElement elementA11_R = doc.createElement("R");
elementA11_R.setAttribute("param1","fdfg");elementA11_R.setAttribute("param2", 117);elementA11_R.setAttribute("param3", 111);
elementA11.appendChild(elementA11_T);
elementA11.appendChild(elementA11_R);

if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
	qDebug() << "open for add error!!";
}

//输出到文件
QTextStream out_stream(&file);
doc.save(out_stream, 4); //缩进4格
file.close();

    这样就能把整个xml数据写入到文件里面了。注意,为了简略,只往里面填了一组数据。

    但是,光能读和写也不行,我们还得想办法尝试一下怎么样能在已有的文件中添加和删除子节点,这样才能更好地操作xml数据。那将是下一节的内容了。