TinyXML应用小结

下载地址: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;

tinyxpath 解析简单 的小工具,输出是一个静态库。可 找到xml文档. TinyXml介绍 TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器 一. XML解析模型: 目前XML的解析主要有两大模型:SAX和DOM。 SAX是基于事件的,其基本工作流程是分析XML文档,当发现了一个新的元素时,产生一个对应事件,并调用相应的用户处理函数。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。 DOM(文档对象模型),则是在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于SAX,但可以给用户提供一个面向对象的访问接口,对用户更为友好。 另据说,一些同时提供了SAX和DOM接口的库,是在底层先实现SAX,再在SAX的基础上实现DOM 对于一个特定的XML文档而言,其正确性分为两个层次。 首先是其格式应该符合XML的基本格式要求,比如第一行要有声明,标签的嵌套层次必须前后一致等等,符合这些要求的文件,就是一个合格的XML文件,称作well-formatted。 其次,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。 因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单的XML文件,比如配置文件时,特别的合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值