下载地址:http://www.grinninglizard.com/tinyxml/
类图结构如下:
一、相关类的主要方法及使用
1. TiXmlBase
int Row() const;
int Column() const;
void SetUserData( void* user );
void* GetUserData();
const void* GetUserData() const;
2. TiXmlNode
void SetValue(const char * _value);
const char *Value() const;
TiXmlDocument* GetDocument();
const TiXmlDocument* GetDocument() const;
TiXmlNode* FirstChild();
const TiXmlNode* FirstChild() const;
TiXmlNode* FirstChild( const char * _value );
const TiXmlNode* FirstChild( const char * value ) const;
TiXmlNode* LastChild();
const TiXmlNode* LastChild() const;
TiXmlNode* LastChild( const char * _value );
const TiXmlNode* LastChild( const char * value ) const;
TiXmlNode* NextSibling();
const TiXmlNode* NextSibling() const;
TiXmlNode* NextSibling( const char* _next );
const TiXmlNode* NextSibling( const char * ) const;
TiXmlNode* LinkEndChild( TiXmlNode* addThis );
TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );
bool RemoveChild( TiXmlNode* removeThis );
TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );
TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis );
3. TiXmlDocument
bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
bool SaveFile() const;
bool SaveFile( const char * filename ) const;
bool SaveFile( FILE* ) const;
#ifdef TIXML_USE_STL
bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
bool SaveFile( const std::string& filename ) const;
#endif
virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
TiXmlElement* RootElement();
const TiXmlElement* RootElement() const;
bool Error() const;
const char * ErrorDesc() const;
int ErrorId() const;
int ErrorRow() const;
int ErrorCol() const;
void Print() const { Print( stdout, 0 ); }
4. TiXmlElement
const char* GetText() const;
void SetAttribute( const char * name, int value );
void SetDoubleAttribute( const char * name, double val );
void SetAttribute( const char* name, const char * _value );
const char* Attribute( const char* name ) const;
const char* Attribute( const char* name, int* i ) const;
const char* Attribute( const char* name, double* d ) const;
void RemoveAttribute( const char * name );
#ifdef TIXML_USE_STL
const std::string* Attribute( const std::string& name ) const;
#endif
TiXmlAttributeSet attributeSet;
5. TiXmlText
TiXmlText (const char * initValue );
#ifdef TIXML_USE_STL
TiXmlText( const std::string& initValue )
#endif
TiXmlText( const TiXmlText& copy );
bool CDATA() const;
void SetCDATA( bool _cdata );
6. TiXmlHandle
7. TiXmlAttribute
TiXmlAttribute();
TiXmlAttribute( const char * _name, const char * _value );
const char* Name() const;
const char* Value() const;
void SetName( const char* _name );
void SetValue( const char* _value );
void SetIntValue( int _value );
void SetDoubleValue( double _value );
int QueryIntValue( int* _value ) const;
int QueryDoubleValue( double* _value ) const;
const TiXmlAttribute* Next() const;
const TiXmlAttribute* Previous() const;
二、常用代码举例
1. 递归遍历所有结点,并打印TiXmlText内容
void RecursionParse(TiXmlElement* pEle)
{
if (pEle == NULL)
return;
for (TiXmlElement* pSub = pEle->FirstChildElement(); pSub; pSub = pSub->NextSiblingElement())
{
RecursionParse(pSub);
}
std::cout << pEle->Value() << ":" << pEle->GetText() << std::endl;
}
2. //取指定节点文本(不包含节点名字)
std::string SysMsgXmlParser::__CutFullElement(TiXmlElement *pEle, const std::string &strEleName)
{
std::string strMsgHead = std::string("<sysmessage><message>");
std::string strMsgEnd = std::string("</message></sysmessage>");
if (pEle == NULL)
return strMsgHead + strMsgEnd;
TiXmlNode *pChildNode = pEle->FirstChild();
if (pChildNode == NULL)
{
return strMsgHead + strMsgEnd;
}
if (pChildNode->ToText() && pChildNode->ToText()->CDATA())
{
return strMsgHead + std::string( pChildNode->ToText()->Value() ) + strMsgEnd;
}
else
{
TiXmlPrinter printer;
pEle->Accept(&printer);
std::string strFullEle = std::string("<sysmessage>") + std::string(printer.CStr()) + std::string("</sysmessage>");
//strFullEle = strFullEle.substr(strEleName.size() + 2, strFullEle.size() - (2*strEleName.size() + 6) );
return strFullEle;
}
}
三、CDATA的用法
CDATA区段以 <![CDATA[ 开始,以 ]]> 结束,CDATA区段中的文本不会被XML解析器解析,通过如下语句来得到XML中CDATA域的内容:
std::string strCDATA = pProperty->FirstChild()->Value(); 等于
std::string strCDATA = pProperty->GetText();
四、使用TIXML_USE_STL宏
如果开启了TIXML_USER_STL宏,那么还可以使用以std::string作为参数的方法,如:
TiXmlNode* FirstChild( const std::string& _value );
const TiXmlNode* FirstChild( const std::string& _value ) const;