tinyxml学习2
在TinyXML中,根據XML的各種元素來定義了一些類:
TiXmlBase:整個TinyXML模型的基類。
TiXmlAttribute:對應于XML中的元素的屬性。
TiXmlNode:對應于DOM結構中的節點。
TiXmlComment:對應于XML中的注釋。
TiXmlDeclaration:對應于XML中的申明部分,即<?versiong="1.0" ?>。
TiXmlDocument:對應于XML的整個文檔。
TiXmlElement:對應于XML的元素。
TiXmlText:對應于XML的文字部分。
TiXmlUnknown:對應于XML的未知部分。?
TiXmlHandler:定義了針對XML的一些操作。
下載和編譯
本文運行環境是: Redhat 5.5 + g++version 4.6.1 + ?GNU Make 3.81 +?tinyxml_2_6_2
下載地址是:http://sourceforge.net/projects/tinyxml/
解壓之后得到文件夾tinyxml,tinyxml的頭文件和cpp文件,都在這個文件夾,為了我們的管理我們的項目工程,我們還是把tinyxml做一個整理。
由于tinyxml不僅支持Linux編譯,同時也支持windows下編譯,所以解壓之后不僅有h文件,cpp文件,還有vc工程的一些工程文件,這里我們只在Linux上使用,所以只留下h文件和cpp文件,其他文件一概刪除
這里我列出整理后的工作目錄:
tinyxml/ //工作目錄 |-- include //頭文件根目錄 | |-- tinyxml //tinyxml頭文件,包括tinystr.h tinyxml.h |-- src //cpp源碼文件根目錄 |-- tinyxml //tinyxml源碼文件夾,包括tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp |-- main.cpp //我們的主函數,調用tinyxml的示例代碼 |-- conf //我們示例中用的xml文件所在的文件夾 |-- makefile //makefile,不用我們多說了吧,不懂請看我博客的makefile最佳實踐?
最簡單的例子
我們在conf目錄下建立student.xml,xml代碼如下:
<School name="軟件學院"> <Class name = "C++"> <Student name="tinyxml" number="123"> <email>tinyxml@163.com</email> <address>中國</address> </Student> <Student name="jsoncpp" number="456"> <email>jsoncpp@gmail.com</email> <address>美國</address> </Student> </Class> </School>使用tinyxml,我們只需要在頭文件中包含 <tinyxml.h>就行了。
打印整個XML代碼如下:
void printSchoolXml() {using namespace std;TiXmlDocument doc; const char * xmlFile = "conf/school.xml"; if (doc.LoadFile(xmlFile)) { doc.Print(); } else {cout << "can not parse xml conf/school.xml" << endl;} }?
讀取XML
代碼如下:
void readSchoolXml() {using namespace std;const char * xmlFile = "conf/school.xml";TiXmlDocument doc; if (doc.LoadFile(xmlFile)) {doc.Print();} else {cout << "can not parse xml conf/school.xml" << endl;return;}TiXmlElement* rootElement = doc.RootElement(); //School元素 TiXmlElement* classElement = rootElement->FirstChildElement(); // Class元素 TiXmlElement* studentElement = classElement->FirstChildElement(); //Students for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) {TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute(); //獲得student的name屬性 for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) {cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl; } TiXmlElement* studentContactElement = studentElement->FirstChildElement();//獲得student的第一個聯系方式 for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) {string contactType = studentContactElement->Value();string contactValue = studentContactElement->GetText();cout << contactType << " : " << contactValue << std::endl; } } }寫入xml
這里我們將通過xml寫入代碼操作,寫入幾乎和conf/school.xml同樣內容到conf/school-write.xml,代碼如下:
void writeSchoolXml() {using namespace std;const char * xmlFile = "conf/school-write.xml"; TiXmlDocument doc; TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", ""); TiXmlElement * schoolElement = new TiXmlElement( "School" ); TiXmlElement * classElement = new TiXmlElement( "Class" ); classElement->SetAttribute("name", "C++");TiXmlElement * stu1Element = new TiXmlElement("Student");stu1Element->SetAttribute("name", "tinyxml");stu1Element->SetAttribute("number", "123");TiXmlElement * stu1EmailElement = new TiXmlElement("email");stu1EmailElement->LinkEndChild(new TiXmlText("tinyxml@163.com") );TiXmlElement * stu1AddressElement = new TiXmlElement("address");stu1AddressElement->LinkEndChild(new TiXmlText("中國"));stu1Element->LinkEndChild(stu1EmailElement);stu1Element->LinkEndChild(stu1AddressElement);TiXmlElement * stu2Element = new TiXmlElement("Student");stu2Element->SetAttribute("name", "jsoncpp");stu2Element->SetAttribute("number", "456");TiXmlElement * stu2EmailElement = new TiXmlElement("email");stu2EmailElement->LinkEndChild(new TiXmlText("jsoncpp@163.com"));TiXmlElement * stu2AddressElement = new TiXmlElement("address");stu2AddressElement->LinkEndChild(new TiXmlText("美國"));stu2Element->LinkEndChild(stu2EmailElement);stu2Element->LinkEndChild(stu2AddressElement);classElement->LinkEndChild(stu1Element); classElement->LinkEndChild(stu2Element); schoolElement->LinkEndChild(classElement); doc.LinkEndChild(decl); doc.LinkEndChild(schoolElement); doc.SaveFile(xmlFile); }?
下載工程
點擊下載
下載之后的編譯和運行步驟
unzip tinyxml.zip cd tinyxml make ./main轉載于:https://www.cnblogs.com/nktblog/p/4027093.html
總結
以上是生活随笔為你收集整理的tinyxml学习2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式之-观察者模式(Observer
- 下一篇: 敏捷书籍推荐列表