XML语言数据读写理解2
首先我们需要了解一下对于计算机来说,XML语言到底是怎么构成的。一般来说,XML语言的第一行会是这种形式:
<?xml version="1.0" encoding="UTF-8"?>
这表示xml的版本和它的编码格式,一般就是GB2312或者UTF-8,这个一般我们不需要自己去修改,所以我们只需要读出来就好了。这里先贴一段程序,然后详细介绍一下,这一节我们就以这个程序为模板了:
<?xml version="1.0" encoding="UTF-8"?> <!-- QDomNode firstChild = doc.firstChild();
xml:firstChild.nodeName();
version encoding:firstChild.nodeValue();
-->
<!DOCTYPE Appearance>
<Mode> <!-- QDomElement rootElement = doc.documentElement() -->
<!-- QDomNode childNode = rootElement.firstChild() 判断是不是元素,如果是,就转换为元素值 -->
<A id = "1">
<T param1="42323" param2="2356" param3= "3d2"/>
<R param1="6256" param2="23562" param3= "f232f"/>
</A> <!-- childNode.nextSibling() 寻找下一个兄弟节点 -->
<A id = "2">
<R param1="433f3f" param2="frsfs" param3= "f2g34g"/>
<R param1="243442" param2="324232" param3= "j665"/>
</A>
<B id = "3">
<B param1="sdfsdfs" param2="fef2" param3= "43tg"/>
<W param1="123123" param2="32ff" param3= "efea"/>
</B>
<C id = "4">
<B param1="143221" param2="kyr5y" param3= "fwf"/>
<B param1="124531" param2="4g4gs" param3= "4w4g"/>
</C>
<D id = "5">
<B param1="13231233" param2="3qfgg" param3= "44444tw"/>
<B param1="45435" param2="aacevev" param3= "dghh"/>
</D>
</Mode>
怎么使用QT类QDomDocument以及QDomElement将这个XML文件里面的东西读出来呢?首先我们先尝试把第一行读出来:
QDomNode firstChild = xml.firstChild();
dw->addContents(firstChild.nodeName());
dw->addContents(firstChild.nodeValue());
//dw->addContents(QString) 是自己设计的用来弹出一个窗口显示数据的程序,你也可以用qDebug来显示数据。每次输出都换行。
输出结果为:
xml
version='1.0' encoding='UTF-8'
但是如果去掉下面这些内容:
<?xml version="1.0" encoding="UTF-8"?> <!-- QDomNode firstChild = doc.firstChild();
xml:firstChild.nodeName();
version encoding:firstChild.nodeValue();
-->
<!DOCTYPE Appearance>
再执行同样的程序,就会打印:
Mode
也就是说把底下的mode给打印出来了。所以我们其实可以加个判断:
QDomNode firstChild = xml.firstChild();
if (firstChild.nodeName()=="xml") {
dw->addContents(firstChild.nodeName());
dw->addContents(firstChild.nodeValue());
}
else {
dw->addContents("No version , No Format");
}
表示判断第一行是不是关于自定义的xml文件信息,如果是就打印出来,如果不是就输出来提醒一下。其实这个信息在很多时候用处也不大,所以这里就先给忽略了。
之后,我们要根据自己xml文件的格式来解析里面的各个节点和子节点。其实可以笼统地认为xml文件就是由很多节点和子节点构成的,其中子节点作为节点也包含一些子节点。为了让我们的理解更全面,我们下一节会写一个复杂的xml文件然后从头开始解析。