日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

TinyXML学习记录及整理

發布時間:2023/12/18 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TinyXML学习记录及整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

整理自

http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html

http://www.cppblog.com/age100/archive/2010/05/12/115203.html

http://panpan.blog.51cto.com/489034/104961

及百度文庫。

?

TinyXML是一個開源的解析XML的解析庫,能夠用于C++,能夠在Windows或Linux中編譯。這個解析庫的模型通過解析XML文件,然后在內存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。

DOM模型即文檔對象模型,是將整個文檔分成多個元素(如書、章、節、段等),并利用樹型結構表示這些元素之間的順序關系以及嵌套包含關系。

首先從網上下載TinyXML的庫,文件夾的名字是TinyXpath,在工程里做如下配置:

?在附加包含路徑里添加:你的tinyxpath路徑/tinyxpath/include
?在附加庫路徑里添加:你的tinyxpath路徑/tinyxpath/lib
?在對象/庫路徑里添加:tinyxpathd.lib,如果使用release版本,則是tinyxpath.lib。
?另外,由于我開發的項目是多線程的,所以設置了多線程的環境,因此使用TinyXML沒有出現問題。本人將TinyXML寫在一個單獨的C++工程進行測試,發現如果不設置多線程的環境,會出現鏈接錯誤。我覺得原因可能是TinyXML使用了多線程環境,因此需要設置多線程的環境。在工程/設置下的C/C++選項卡中,選擇Code?Generation,在Use?run-time?library中選擇Debug?MultiThreaed?DLL即可。?

?

元素函數總結
ValueStr?????//返回元素名稱
SetValue?????//設置元素名稱
Parent?????//返回父節點對象

FirstChild????//返回第一個子節點
LastChild?????//返回最后一個子節點
IterateChildren???//返回下一個子節點

InsertEndChild???//在最后一個子節點后插入子節點
InsertBeforeChild???//在指定的子節點前插入子節點
InsertAfterChild???//在指定的子節點后插入子節點
ReplaceChild????//替換指定的子節點
RemoveChild????//刪除指定的子節點
Clear?????//刪除所有的子節點

PreviousSibling???//返回同級中前一個節點
NextSibling????//返回同級中后一個節點

NextSiblingElement???//返回同級中后一個元素
FirstChildElement???//返回第一個子元素節點
Attribute?????//返回元素中的屬性值
QueryValueAttribute?//返回元素中的屬性值
SetAttribute????//設置元素中的屬性值
FirstAttribute???//返回元素中第一個屬性對象
LastAttribute????//返回元素中最后一個屬性對象
RemoveAttribute???//刪除元素中指定的屬性對象?

?

如下是一個XML片段:
????<Persons>
????????<Person?ID="1">
????????????<name>周星星</name>
????????????<age>20</age>
????????</Person>
????????<Person?ID="2">
????????????<name>白晶晶</name>
????????????<age>18</age>
????????</Person>
????</Persons>


????在TinyXML中,根據XML的各種元素來定義了一些類:


TiXmlBase:整個TinyXML模型的基類。
TiXmlAttribute:對應于XML中的元素的屬性。比如<Person?ID="1">
TiXmlNode:對應于DOM結構中的節點。
TiXmlComment:對應于XML中的注釋。

TiXmlDeclaration:對應于XML中的申明部分, ?即<?versiong="1.0"??>。
TiXmlDocument:對應于XML的整個文檔。   ??如new?TiXmlDocument("xxx.xm");
TiXmlElement:對應于XML的元素。      比如<Person?ID="1">
TiXmlText:對應于XML的文字部分。?     ?比如<age>18</age>
TiXmlUnknown:對應于XML的未知部分。?
TiXmlHandler:定義了針對XML的一些操作。?

?

?

????一、讀取XML(假設我們的Xml文檔中的內容與上面的Xml內容一樣)
????//創建一個XML的文檔對象。
????TiXmlDocument?*myDocument?=?new?TiXmlDocument("Resources.xm");
????myDocument->LoadFile();
????//獲得根元素,即Persons。
????TiXmlElement?*RootElement?=?myDocument.RootElement();
????//輸出根元素名稱,即輸出Persons。
????cout?<<?RootElement->Value()?<<?endl;
????//獲得第一個Person節點。
????TiXmlElement?*FirstPerson?=?RootElement->FirstChildElement();
????//獲得第一個Person的name節點和age節點和ID屬性。
????TiXmlElement?*NameElement?=?FirstPerson->FirstChildElement();
????TiXmlElement?*AgeElement?=?NameElement->NextSiblingElement();
????TiXmlAttribute?*IDAttribute?=?FirstPerson->FirstAttribute();
????//輸出第一個Person的name內容,即周星星;age內容,即20;ID屬性,即1。
????cout?<<?NameElement->FirstChild()->Value?<<?endl;
????cout?<<?AgeElement->FirstChild()->Value?<<?endl;
????cout?<<?IDAttribute->Value()?<<?endl;


????二、生成XML內容
????//創建一個XML的文檔對象。
????TiXmlDocument?*myDocument?=?new?TiXmlDocument();
????//創建一個根元素并連接。
????TiXmlElement?*RootElement?=?new?TiXmlElement("Persons");
????myDocument->LinkEndChild(RootElement);
????//創建一個Person元素并連接。
????TiXmlElement?*PersonElement?=?new?TiXmlElement("Person");
????RootElement->LinkEndChild(PersonElement);
????//設置Person元素的屬性。
????PersonElement->SetAttribute("ID",?"1");
????//創建name元素、age元素并連接。
????TiXmlElement?*NameElement?=?new?TiXmlElement("name");
????TiXmlElement?*AgeElement?=?new?TiXmlElement("age");
????PersonElement->LinkEndChild(NameElement);
????PersonElement->LinkEndChild(AgeElement);
????//設置name元素和age元素的內容并連接。
????TiXmlText?*NameContent?=?new?TiXmlText("周星星");
????TiXmlText?*AgeContent?=?new?TiXmlText("20");
????NameElement->LinkEndChild(NameContent);
????AgeElement->LinkEndChild(AgeContent);
????//保存到文件
????myDocument->SaveFile("要保存的xml文件名");//保存到文件!!!!!!!!!!!


????這樣,便創建了一個如下的xml文件:
????<Persons>
????????<Person?ID="1">
????????????<name>周星星</name>
????????????<age>20</age>
????????</Person>
????</Persons>?

?

?

?

?

<Class?name="計算機軟件班">
????<Students>
????????<student?name="張三"?studentNo="13031001"?sex="男"?age="22">
????????????<phone>88208888</phone>
????????????<address>西安市太白南路二號</address>
????????</student>
????????<student?name="李四"?studentNo="13031002"?sex="男"?age="20">
????????????<phone>88206666</phone>
????????????<address>西安市光華路</address>
????????</student>
????</Students>
</Class>

?

????程序代碼XmlParseExample.cpp如下所示:

#include?<iostream>
#include?<string>
#include?<tinyxml.h>

??using?std::string;

??int?main()
{
??TiXmlDocument*?myDocument?=?new?TiXmlDocument();
??myDocument->LoadFile("Students.xml");
??TiXmlElement*?rootElement?=?myDocument->RootElement();??//Class
??TiXmlElement*?studentsElement?=?rootElement->FirstChildElement();??//Students
??TiXmlElement*?studentElement?=?studentsElement->FirstChildElement();??//Students
??while?(?studentElement?)?{
????TiXmlAttribute*?attributeOfStudent?=?studentElement->FirstAttribute();??//獲得student的name屬性
????while?(?attributeOfStudent?)?{
??????std::cout?<<?attributeOfStudent->Name()?<<?"?:?"?<<?attributeOfStudent->Value()?<<?std::endl;
??????attributeOfStudent?=?attributeOfStudent->Next();
????}
????TiXmlElement*?phoneElement?=?studentElement->FirstChildElement();//獲得student的phone元素
????std::cout?<<?"phone"?<<?"?:?"?<<?phoneElement->GetText()?<<?std::endl;
????TiXmlElement*?addressElement?=?phoneElement->NextSiblingElement();
????std::cout?<<?"address"?<<?"?:?"?<<?phoneElement->GetText()?<<?std::endl;
????studentElement?=?studentElement->NextSiblingElement();
??}
??return?0;
}

????程序運行結果如下:
name?:?張三
studentNo?:?13031001
sex?:?男
age?:?22
phone?:?88208888
address?:?88208888
name?:?李四
studentNo?:?13031002
sex?:?男
age?:?20
phone?:?88206666
address?:?88206666?

?

?

?

讀者對象:對TinyXml有一定了解的人。本文是對TinyXml工具的一些知識點的理解。

需要討論的請聯系:QQ?471202412?

1??TinyXml中對TiXmlNode進行了分類,是用一個枚舉進行描述的。

enum?NodeType

{

DOCUMENT,????文檔節點

ELEMENT,?????元素節點

COMMENT,?????注釋

UNKNOWN,?????未知節點

TEXT,????????文本節點

DECLARATION,?聲明節點

TYPECOUNT????還沒弄清楚

};

TiXmlNode?*?pNode->Type()?函數可以返回節點的類型。

枚舉的比較方法:TiXmlText::TEXT?==?pNode->Type();

?

這幾個類型非常重要,尤其是在遍歷xml時或者查找一個節點時

我對節點和元素的理解如下:為了說明問題,我使用下面的xml文檔來舉例說明

<?xml?version="1.0"?encoding="gb2312"?>

<Persons>

<person?Id="200"?Shengao=34?ClassName="計本0508">

<name>vertor</name>

<age>20</age>

<address?encode="utf-8">

<country>中國</country>

<province>山西</province>

<village>王大莊</village>

</address>

</person>

</Persons>

?

2.1?節點:一種對文檔結構的描述對象

2.2?元素:對文檔某一個數據塊的描述

2.3?文本是指沒有孩子的節點

???例如<village>大王莊</village>??文本節點是:"大王莊"?

???然而判斷一個節點是否是文本節點時并不是根據pNode->NoChildren()來判斷,而是根據節點的類型來判斷

???因為如果一個節點形如:<village></village>它也是沒有孩子節點的。

2.4?節點類可以轉換成元素對象。

????例如?TiXmlElement?*?pElement?=?pNode->ToElement();

????那什么時候需要轉換成元素呢?

??????當你需要元素的一些屬性值是就需要轉換了。

2.5?元素跟節點都有關于訪問孩子的函數,

元素訪問孩子的函數:

??FirstChildElement()?返回當前元素的孩子元素

??NextSiblingElement()?返回當前元素的同級元素

節點訪問節點孩子的函數:

??FirstChild() 返回當前節點的孩子節點

??NextSibing() 返回當前節點的同級下一個節點

個人覺得?元素訪問和節點訪問在一般的訪問下沒有區別,兩者都可以訪問的孩子

對于一些特殊的情況下才需要區分。比如你要訪問屬性時,就需要用元素來找到第一個屬性值。

2.6?對于遍歷一個xml文檔時,思路一般是這樣的:

??1?載入一個xml

??2?獲得根元素(不是根節點)

??3?循環訪問每一個根元素的子元素

??4?對每一個子元素進行解析。

4.1?獲取子元素的類型Type

4.2?switch(Type)

????case?TEXT:

輸出文本節點的值pNode->value()

????case?ELEMENT:

????????獲取元素的value(這里的value指的是元素的名字,例如:person元素)

循環獲取元素的每一個屬性

????a?得到元素的第一個屬性

????b?do——while循環獲取每一個屬性和值。

????case?COMMENT:?暫時不用管

????case?UNKNOWN:?暫時不用管

????case?DECLARATION:?

?????????獲取元素的版本,編碼方式等等

4.3?循環遍歷子元素的下一級元素(即孫子元素)?在這里也可以遍歷孫子節點。

????遞歸調用第四步。

基本思路就是這樣,具體代碼見后面

2.7?如果定位一個節點

??唯一確定一個節點的方法是根據節點名,屬性名,屬性值

??1?根據xml的遍歷思想找到與給定節點名一樣的節點

??2?如果這個節點有屬性并且屬性名和值與給定的一致,說明找到了。

??3?如果沒有一致的,說明解析失敗。

??4?如果沒有給定屬性名和值,則可以默認只查找與節點名一致的節點。

2.8?編碼問題

??用TinyXml加載一個xml文檔時,根據文檔的編碼方式來加載,在操作過程中需要進行編碼轉換

??如果encoding=utf-8?則在遍歷時,需要進行編碼轉換,具體轉換還沒找到方法。

?

2.9?指針的?new和釋放。

???TinyXml已經幫我們把指針分配的內存進行了管理,在析構函數中進行了處理,我們不需要處理new出來的指針

???如果我們顯示的delete時,有可能影響程序運行。

3.0?對于添加一個節點,刪除一個節點,更新一個節點時,都需要在最后SaveFile,我就好幾次忘了SaveFile,所以調了老半天。

3.1?總的來說,Tinyxml還是不錯的,以后繼續學習。

部分功能代碼

3.2?對于插入一個節點,首先獲取要插入節點的父節點,然后進行插入,最需要注意的是在查詢父節點的是時候,必須對應同一個文本對象來操作。有可能在兩個函數中同時打開了同一個xml文檔,雖然名字一樣,但是不是同一個xmldocument對象,所以操作會失敗。

最后要保存。

/************************************************************************/

/*??創建一個xml文檔????????????????????????????????????????????????????????????????????*/

/************************************************************************/

void?createXml()

{

?

//創建一個XML的文檔對象。

????TiXmlDocument?*myDocument?=?new?TiXmlDocument();

TiXmlDeclaration*?decl?=?new?TiXmlDeclaration("1.0","gb2312","yes");

myDocument->LinkEndChild(decl);

????//創建一個根元素并連接。

????TiXmlElement?*RootElement?=?new?TiXmlElement("Persons");

????myDocument->LinkEndChild(RootElement);

????

for(int?i=0;?i<10;i++)

{

//創建一個Person元素并連接。

TiXmlElement?*PersonElement?=?new?TiXmlElement("Person");

RootElement->LinkEndChild(PersonElement);

????

//設置Person元素的屬性。

PersonElement->SetAttribute("ID",?i);

//創建name元素、age元素并連接。

TiXmlElement?*NameElement?=?new?TiXmlElement("name");

TiXmlElement?*AgeElement?=?new?TiXmlElement("age");

PersonElement->LinkEndChild(NameElement);

PersonElement->LinkEndChild(AgeElement);

????

//設置name元素和age元素的內容并連接。

TiXmlText?*NameContent?=?new?TiXmlText("周星星");

TiXmlText?*AgeContent?=?new?TiXmlText("20");

NameElement->LinkEndChild(NameContent);

AgeElement->LinkEndChild(AgeContent);

}

????//保存到文件

?????myDocument->SaveFile("test.xml");

}

?

/************************************************************************/

/*??遍歷一個xml文檔???????????????????????????????????????????????????????????????????*/

/************************************************************************/

void?readXml()

{

//創建一個XML的文檔對象。

TiXmlDocument?*myDocument?=?new?TiXmlDocument("Person.xml");

myDocument->LoadFile();

?

//獲得xml的頭,即聲明部分

TiXmlDeclaration*?decl?=?myDocument->FirstChild()->ToDeclaration();

cout?<<?"xml文件的版本是:"?<<?decl->Version()?<<?endl;

cout?<<?"xml的編碼格式是:"?<<?decl->Encoding()?<<?endl;

?

//獲得根元素

TiXmlElement?*RootElement?=?myDocument->RootElement();

?

//輸出根元素名稱

cout?<<?RootElement->Value()?<<?endl;

?

TiXmlNode*?pNode??=?NULL;

string?msg?=?"";

for(pNode=RootElement->FirstChildElement();pNode;pNode=pNode->NextSiblingElement())

{

msg?+=?dumpNode(pNode,0);

}

cout?<<?msg?<<?endl;

?

}

?

************************************************************************/

/*描述:遍歷一個元素

??時間:2011-5-1

??參數說明:pNode節點,flag?節點嵌套層數

/************************************************************************/

string?dumpNode(TiXmlNode?*?pNode,int?flag)

{

string?msg?=?"";

?

if(pNode?==?NULL)

{

return?"";

}

TiXmlText?*?pText?=?NULL;

TiXmlNode?*?pChildNode?=?NULL;

int?t?=?pNode->Type();

if(t?==?TiXmlText::TEXT)??//節點類型是text節點

{

pText?=?pNode->ToText();

string?text?=?pText->Value();

if(!text.empty())

{

msg?=?msg?+?"="+?text;

}

?

?

}

else?if(t?==?TiXmlText::ELEMENT)?//節點類型是Element

{

msg?=?msg?+?"\r\n";

int?num?=?flag;

while(num?>=?1)

{

msg?=?msg?+?"\t";

num--;

}

?

msg?=?msg?+?pNode->Value();

?

//輸出屬性

TiXmlElement?*?pElement?=?pNode->ToElement();

?

TiXmlAttribute?*?pAttr?=?pElement->FirstAttribute();

TiXmlAttribute?*?pNextAttr?=NULL;

string?tmpAttrMsg?=?"[";

if(pAttr?!=?NULL)

{

string?tmpAttrVal?=?"";

string?tmpAttrName?=?"";

?

do

{

tmpAttrVal?=?pAttr->Value();

tmpAttrName?=?pAttr->Name();

tmpAttrMsg?+=?tmpAttrName+"="?+?tmpAttrVal+","; //各個屬性之間用逗號分隔

}while(pAttr?=?pAttr->Next());

tmpAttrMsg?=?tmpAttrMsg.erase(tmpAttrMsg.find_last_of(","));

}

tmpAttrMsg?+=?"]";

msg?+=?tmpAttrMsg;

?

}

//循環訪問它的每一個元素

for(pChildNode=pNode->FirstChild();pChildNode!=0;pChildNode?=?pChildNode->NextSibling())

{

?

msg?=?msg?+?dumpNode(pChildNode,flag+1);

?

}

return?msg;

?

?

}

/************************************************************************/

/*?查詢出唯一節點?????????????????????????????????????????????????????????*/

/*?參數說明:

???string?nodeName????節點名

???string?nodeAttrName?節點的屬性

???string?nodeAttrValue?節點屬性的值

/************************************************************************/

TiXmlNode?*?SelectSingleNode(string?nodeName,string?nodeAttrName,string?nodeAttrValue)

{

//加載一個XML的文檔對象。

?

TiXmlDocument?*xmlDoc?=?new?TiXmlDocument("Person.xml");

if(!xmlDoc->LoadFile()) //tinyXml會自動處理文檔的BOM

{

return?NULL;

}

if(xmlDoc?==?NULL)

{

return?NULL;

}

//獲得根元素

TiXmlElement?*RootElement?=?xmlDoc->RootElement();

if(RootElement?==?NULL)

{

cout?<<?"解析錯誤,無法獲取根元素"?<<?endl;

return?NULL;

}

TiXmlNode?*?pNode??=?NULL;

TiXmlNode?*?pSelectNode?=?NULL;

string?msg?=?"";

for(pNode=RootElement->FirstChildElement();pNode;pNode=pNode->NextSiblingElement())

{

?

pSelectNode?=?selectChildNode(pNode,nodeName,nodeAttrName,nodeAttrValue);

if(pSelectNode)

{

break;

}

}

?

if(pSelectNode)

{

cout?<<?"解析成功"?<<?endl;

cout?<<?pSelectNode->Value()?<<?endl;

return?pSelectNode;

}

else

{

cout?<<?"解析錯誤,無法獲取節點"?<<?endl;

return?NULL;

}

?

}

/************************************************************************/

/*

??根據父節點循環遍歷查找子節點

??參數說明

????noteName?節點名

noteAttrName?屬性名

noteAttrValue?屬性值

/************************************************************************/

TiXmlNode?*?selectChildNode(TiXmlNode?*?pNode,string?nodeName,string?nodeAttrName,string?nodeAttrValue)

{

if(pNode?==?NULL)

{

return?NULL;

}

TiXmlNode?*?pSelectedNode?=?NULL;

TiXmlNode?*?pChildNode?=?NULL;

int?t?=?pNode->Type();

switch?(t)

{

case?TiXmlText::DOCUMENT:

case?TiXmlText::DECLARATION:

case?TiXmlText::TEXT:

case?TiXmlText::UNKNOWN:

case?TiXmlText::COMMENT:

break;

case?TiXmlText::ELEMENT:

if(pNode->Value()?==?nodeName)

{

//cout?<<?pNode->Value()?<<?endl;

if(!nodeAttrName.empty()?&&?!nodeAttrValue.empty())

{

TiXmlElement?*?pElement?=?pNode->ToElement();

?

TiXmlAttribute?*?pAttr?=?pElement->FirstAttribute();

TiXmlAttribute?*?pNextAttr?=NULL;

if(pAttr?!=?NULL)

{

do

{

if(pAttr->Name()==nodeAttrName&&pAttr->Value()==?nodeAttrValue)

{

//cout?<<?pAttr->Value()?<<?endl;

return?pNode;

}

}while(pAttr?=?pAttr->Next());

}

}

else

{

return?pNode;

}

?

}

else

{

//循環訪問它的每一個元素

for(pChildNode=pNode->FirstChild();

pChildNode!=0;

pChildNode?=?pChildNode->NextSibling())

{

pSelectedNode?=?selectChildNode(

pChildNode,

nodeName,

nodeAttrName,

nodeAttrValue);

if(pSelectedNode)

{

return?pSelectedNode;

}

}

}

default:break;

}

return?NULL;

}

/************************************************************************/

/*?普通插入一個節點,還不完善。???????????????????????????????????????????????????????????????*/

/************************************************************************/

bool?insert()

{

//加載一個XML的文檔對象。

TiXmlDocument?*myDocument?=?new?TiXmlDocument("Person.xml");

myDocument->LoadFile();

?

if(myDocument?==?NULL)

{

return?false;

}

//獲得xml的頭,即聲明部分

TiXmlDeclaration*?decl?=?myDocument->FirstChild()->ToDeclaration();

if(decl?!=?NULL)

{

cout?<<?"xml文件的版本是:"?<<?decl->Version()?<<?endl;

cout?<<?"xml的編碼格式是:"?<<?decl->Encoding()?<<?endl;

}

?

?

//獲得根元素

TiXmlElement?*RootElement?=?myDocument->RootElement();

????

if(RootElement?!=?NULL)

{

?

//創建一個Person元素并連接。

TiXmlElement?*PersonElement?=?new?TiXmlElement("Person");

PersonElement->SetAttribute("Id",1);

RootElement->LinkEndChild(PersonElement);??

?

TiXmlText?*textElement?=?new?TiXmlText("Jam");

PersonElement->LinkEndChild(textElement);

?

//增加一個team元素

TiXmlElement?*TeamElement?=?new?TiXmlElement("team");

TeamElement->SetAttribute("TID","001");

RootElement->LinkEndChild(TeamElement);

?

//增加team的子節點name

TiXmlElement?*teamName?=?new?TiXmlElement("name");

TiXmlText?*nameText?=?new?TiXmlText("workgroup");

teamName->LinkEndChild(nameText);

TeamElement->LinkEndChild(teamName);

?

//增加team的子節點type

TiXmlElement?*teamType?=?new?TiXmlElement("type");

TiXmlText?*typeText?=?new?TiXmlText("SI");

teamType->LinkEndChild(typeText);

?

TeamElement->LinkEndChild(teamType);

?

myDocument->SaveFile("Person.xml");

?

?

//輸出根元素名稱

cout?<<?RootElement->Value()?<<?endl;

return?true;

}

?return?false;

}

?

/************************************************************************/

/*?獲取一個節點的屬性??????????????????????????????????????????????????*/

/************************************************************************/

string?getAttribute(TiXmlNode?*?pNode)

{

if(pNode?==?NULL)?return?"";

//輸出屬性

string?msg?=?"";

TiXmlElement?*?pElement?=?pNode->ToElement();

?

TiXmlAttribute?*?pAttr?=?pElement->FirstAttribute();

TiXmlAttribute?*?pNextAttr?=NULL;

string?tmpAttrMsg?=?"[";

if(pAttr?!=?NULL)

{

string?tmpAttrVal?=?"";

string?tmpAttrName?=?"";

?

do

{

tmpAttrVal?=?pAttr->Value();

tmpAttrName?=?pAttr->Name();

tmpAttrMsg?+=?tmpAttrName+"="?+?tmpAttrVal+","; //各個屬性之間用逗號分隔

}while(pAttr?=?pAttr->Next());

tmpAttrMsg?=?tmpAttrMsg.erase(tmpAttrMsg.find_last_of(","));

}

tmpAttrMsg?+=?"]";

msg?+=?tmpAttrMsg;

}

?

?

/************************************************************************/

/* 在指定位置插入一個元素 */

/************************************************************************/

bool?insertAElement(TiXmlElement?*?pElement)

{

//加載一個XML的文檔對象。

TiXmlDocument?*xmlDoc?=?new?TiXmlDocument("Person.xml");

xmlDoc->LoadFile();

?

if(xmlDoc?==?NULL) return?false;

//獲得xml的頭,即聲明部分

TiXmlDeclaration*?decl?=?xmlDoc->FirstChild()->ToDeclaration();

if(decl?!=?NULL)

{

cout?<<?"xml文件的版本是:"?<<?decl->Version()??<<?endl;

cout?<<?"xml的編碼格式是:"?<<?decl->Encoding()?<<?endl;

}

//獲得根元素

TiXmlElement?*RootElement?=?xmlDoc->RootElement();

if(RootElement?!=?NULL)

{

TiXmlNode?*?pNode?=?SelectSingleNode(xmlDoc,"name","length","100");

if(pNode?==?NULL)

{

return?false;

}

?

//創建一個Person元素并連接。

TiXmlElement?*pNewElement?=?new?TiXmlElement("Person");

if(pNewElement?==?NULL)

{

return?false;

}

pNewElement->SetAttribute("Id","1");

TiXmlText?*textElement?=?new?TiXmlText("gbnn");

if(textElement?==?NULL)

{

return?false;

}

pNewElement->LinkEndChild(textElement);

TiXmlNode?*?pRet?=?pNode->InsertBeforeChild(pNode->LastChild(),*pNewElement);

//TiXmlNode?*?pRet?=?pNode->LinkEndChild(pNewElement);

xmlDoc->Print();

bool?b?=?xmlDoc->SaveFile();

if(b)

{

cout?<<?"添加成功"?<<?endl;

return?b;

}

else

{

cout?<<?"添加失敗"?<<?endl;

return?false;

}

}

else

{

return?false;

}

}

?

?

轉載于:https://www.cnblogs.com/lf2185551/archive/2012/08/08/TinyXML.html

總結

以上是生活随笔為你收集整理的TinyXML学习记录及整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。