写一个XML文件 TinyXML 是一个mini的C++ XML解析库,它是非验证的,它可以很容易的集成到其他的程序中.它解析一份XML doc,以此创建一个可以被读、写,保存的DOM.它主要的类层次架构,函数原形详细说明参看: http://www.grinninglizard.com/tinyxml/index.html // 以下以简单的程序TinyXMLTest为例 TinyXML中最根本的就是Document,所以无论是需要写一个XML文件,还是要读,都必须从一个Document开始,就是(1)的动作,在此没有给构造函数一个参数是因为我们的目的是为了写出一个XML文件,文件的名字就是传给TiXmlDocument的参数。声明,文档,注释,文本,元素,不明类型都是TinyXmlNode的子类,都是一个Node,TinyXmlNode是一个很复杂的东西,它如上所示: #include #include"tinyxml.h" using namespace std; int main(int argc, char** argv) { // (1) create a XML document TiXmlDocument *myDoc = new TiXmlDocument(); Document类型的节点建立好以后,就需要给该DOM树结构一个根,即下面的(2),(3),(5),由于TinyXml是非验证的,所以理论上他是可以有两个Document的,(在内部通过对类型的判断来避免这一情况的发生),由于根是一个元素,而元素本质上就是一个容器,他可以有子元素,文本等,由于属性可以有多个,所以在内部它有一个TinyXmlAttrbuiteSet的成员,用以储存之,而在TinyXmlAttrbuiteSet中所存的Attrbuites是通过带”哨兵”的链表来实现.在每次链接时,都是放置在最后一个位置 //(2) create the Root and connect it TiXmlElement *RootElement = new TiXmlElement("人员组"); myDoc->LinkEndChild(RootElement); //(3 )create a person and connect it TiXmlElement *PersonElement = new TiXmlElement("人员"); RootElement ->LinkEndChild(PersonElement); 如(4)所示,如果一个元素有属性需要设置,通过调用SetAttribute()方法,可以实现目标,在设置时,会在Element的内部的链表上搜索,如果已经有相应的属性名,那么视之为改写,如果没有则添加. //(4) set the attribute fo Person PersonElement ->SetAttribute("ID", "1"); //(5) create Elementy name && age and connect them TiXmlElement* NameElement = new TiXmlElement("姓名"); TiXmlElement* AgeElement = new TiXmlElement("年龄"); PersonElement ->LinkEndChild(NameElement); PersonElement ->LinkEndChild(AgeElement); 如6所示,文本应该是XML中最好处理的tag类型了,它在DOM树结构中只能以“叶子”的形式存在. //(6) set element Name && age and connect it TiXmlText *NameContent = new TiXmlText("周星星"); TiXmlText *AgeContent = new TiXmlText("20"); NameElement ->LinkEndChild(NameContent); AgeElement ->LinkEndChild(AgeContent); 最麻烦的应该就是(7)了,首先以”w”方式打开star.xml文件(如果不存在,则创建),在SaveFile的内部经过一些预处理后,就进入了一个从TinyXmlBase,继承而来的方法Print,在打印的过程中,按深度优先,前序方式进行。 (1) 打印出自己的名字和第一个’<’ eg: (2) 判断是否有属性,有则依次打印,直到结束 eg: (3) 根据是否有子元素确定是打印出”/>” 还是’>’ (4) 若有子元素,递归 (5) 打印完成,关闭文件 (6) SaveFile返回 // (7) save the file myDoc ->SaveFile("star.xml");
TinyXML 源码剖析(之一)
最新推荐文章于 2024-09-24 14:27:57 发布