TinyXML读取XML文件内容 [大三四八九月实习]
1 XML文件的节点与元素为什么要探讨这个问题呢,因为在TinyXML类的成员函数中,有指向下一个结点的成员函数(NextSibling)有指向下一个元素的成员函数(NextSiblingElement),元素在XML文件基本结构中基本已经形成概念,现在又冒出一个结点。还有的就是我们要访问的内容在TinyXML类中叫什么名字,用什么方法来访问?这个都是需要验证一下子的。 关于节点和元素的问题还是借助于[http://www.w3school.com.cn/xmldom/dom_nodes.asp]文章[ 不要细看XML代码,看代码后面的解说 ]: <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> </bookstore>
根节点 <bookstore>有四个 <book>节点。 第一个<book>节点有四个节点:<title>,<author>,<year>以及<price>,其中每个节点都包含一个文本节点,"Harry Potter","J K. Rowling","2005"以及 "29.99"。 文本总是存储在文本节点中 在 DOM处理中一个普遍的错误是,认为元素节点包含文本。 不过,元素节点的文本是存储在文本节点中的。 在这个例子中:<year>2005</year>,元素节点 <year>,拥有一个值为"2005"的文本节点。 "2005"不是 <year> 元素的值! 2 TinyXML读取XML文件中的内容实例(1)总结验证一下XML文件中的每个部分到底叫什么名字,在TinyXML中用什么方法访问,及每个函数对应的XML文件结构。
Figure1:简单的XML与TinyXML方法对应 经过程序验证,得出以上XML文件对应TinyXML中的方法为: [1] <ChildStation>:是整个文档的根元素(也是根节点),用TiXmlDocument:: RootElement()方法得到指向此元素(节点的指针),得到指向此根元素的指针之后,<ChildStation>中的“ChildStation”叫做Value,可以用TiXmlDocument:: RootElement()->Value();将其输出到屏幕中。 [2]<Name> …</Name>及<Address>…</Address >属于<ChildStation>的子元素(子结点),可以通过根元素利用FirstChildElement()获得]<ChildStation>下的第一个子元素,然后通过此子元素用NextSibliingElement()方法获得下一个跟<Name>处于同一级别( 属于<ChildStation>第二个子元素)的指针,一次类推。获取每个元素的文本内容用的是GetText()方法,通过此方法就能够获得以上“STM100”、“0001”等内容。 这样就能够读取每个元素下“<>”及“<>”与“</>”之间的内容。
只要访问到一个元素“<>…</>”利用[1][2]就可以访问到所有的内容,似乎足矣。
(2)读取实例针对以上的XML文本,可以用以上总结的[1][2]两点将Value和Text读取出来: void MyTinyXML::select_node( ) { //Get the root element pDoc->LoadFile(); pRootElement = pDoc->RootElement(); cout << " nroot value:" << pRootElement->Value(); cout << " nroot text:" << pRootElement->GetText(); TiXmlElement *pCurrentElement = NULL; //Go in to root's child element pCurrentElement = pRootElement->FirstChildElement(); while( pCurrentElement ) { //Print value cout << "child value:"<< pCurrentElement->Value(); //Print text //cout << "child text:"<< pCurrentElement->GetText(); //Next child element pCurrentElement = pCurrentElement->NextSiblingElement(); } if ( pCurrentElement ) { delete pCurrentElement; pCurrentElement = NULL; } } 说明:不见定义的都是类中的私有成员。 对于XML中没有的内容就不要用TinyXML代码读取了,不然会有意外的错误。 读取结果: Figure2:读取的XML文件内容 此次笔记记录完毕。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |