程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++之TinyXML的使用介紹

C++之TinyXML的使用介紹

編輯:C++入門知識

.引子:         最近在做GBT28181國標平台對接的工作,涉及到一些進程間消息通訊,消息體有xml格式,之前測試的時候都是拿他們當做字符串去解析,現在正兒八經地開發的時候,就想到了用xml庫去解析,由於之前在HW最後一個項目用到的xml庫就是這個,所以這裡延續使用它。總體來說還是比較好用的:         二.編譯、使用:               Windows下使用方法:1.直接用其VS工程進行編譯生成lib庫,2.拷貝源碼到自己工程中使用。我這裡選擇了第二種,主要是以後想自己看看這塊的源碼,並且程序容易debug。        1. 將tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp拷貝到自己的工程裡        2. 引入頭文件tinystr.h、tinyxml.h        3.直接編譯使用;           三.介紹:         在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的一些操作。           四.代碼示例:   讀xml:

void readXml() {  
    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;    
        }  
  
    }    
}  
void writeXml() {  
    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("[email protected]") );  
    TiXmlElement * stu1AddressElement = new TiXmlElement("address");  
    stu1AddressElement->LinkEndChild(new TiXmlText("合肥"));  
    stu1Element->LinkEndChild(stu1EmailElement);  
    stu1Element->LinkEndChild(stu1AddressElement);  
  
    TiXmlElement * stu2Element = new TiXmlElement("Student");  
    stu2Element->SetAttribute("name", "feilong");  
    stu2Element->SetAttribute("number", "123");  
    TiXmlElement * stu2EmailElement = new TiXmlElement("email");  
    stu2EmailElement->LinkEndChild(new TiXmlText("[email protected]"));  
    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);    
}  

void writeXml() {
	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("[email protected]") );
	TiXmlElement * stu1AddressElement = new TiXmlElement("address");
	stu1AddressElement->LinkEndChild(new TiXmlText("合肥"));
	stu1Element->LinkEndChild(stu1EmailElement);
	stu1Element->LinkEndChild(stu1AddressElement);

	TiXmlElement * stu2Element = new TiXmlElement("Student");
	stu2Element->SetAttribute("name", "feilong");
	stu2Element->SetAttribute("number", "123");
	TiXmlElement * stu2EmailElement = new TiXmlElement("email");
	stu2EmailElement->LinkEndChild(new TiXmlText("[email protected]"));
	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);  
}

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved