C++ tinyXml直接解析XML字符串

转载:http://www.cnblogs.com/1024Planet/p/4401929.html

<?xml version="1.0" encoding="utf-8"?>
<person>
    <name>Alan</name>
    <age>26</age>
    <height>165</height>
    <weight>65</weight>
    <introduction>C senior engineer</introduction>
</person>

解析代码

#include <stdio.h>
#include "tinyxml.h"

int tinyxmlTest(void);

int main(int argc, char* argv[])
{
    tinyxmlTest();
    return 1;
}

int tinyxmlTest(void)
{
#if (1)
    char* xmlStr = "
<person>
    <name>Alan</name>
    <age>26</age>
    <height>165</height>
    <weight>65</weight>
    <introduction>C senior engineer</introduction>
</person>";
    
    TiXmlDocument* myDocument = new TiXmlDocument();
    myDocument->Parse(xmlStr);

#else
    TiXmlDocument* myDocument = new TiXmlDocument();
  myDocument->LoadFile("person.xml");
#endif
    //.....person.....
  TiXmlElement* rootElement = myDocument->RootElement();
    if (rootElement == NULL || strcmp(rootElement->Value(), "person"))
        return 0;
    printf("%s:	%s
", rootElement->Value(), rootElement->GetText());

    //.....name.....
  TiXmlElement* element = rootElement->FirstChildElement();
    if (element == NULL || strcmp(element->Value(), "name"))
        return 0;
    printf("%s:	%s
", element->Value(), element->GetText());

    //.....age.....
    element = element->NextSiblingElement();
    if (element == NULL || strcmp(element->Value(), "age"))
        return 0;
    printf("%s:	%s
", element->Value(), element->GetText());
    
    //.....height.....
    element = element->NextSiblingElement();
    if (element == NULL || strcmp(element->Value(), "height"))
        return 0;
    printf("%s:	%s
", element->Value(), element->GetText());

    //.....weight.....
    element = element->NextSiblingElement();
    if (element == NULL || strcmp(element->Value(), "weight"))
        return 0;
    printf("%s:	%s
", element->Value(), element->GetText());

    //.....introduction.....
    element = element->NextSiblingElement();
    if (element == NULL || strcmp(element->Value(), "introduction"))
        return 0;
    printf("%s:	%s

", element->Value(), element->GetText());

    return 1;
}

上面是网友贴的代码,我根据实际开发中遇到的问题,贴出自己的代码

第一种:

    char* xmlStr = "<?xml version="1.0" encoding="utf-8"?>
                   <data type="maplist">
                   <person>
                   <name>messi</name>
                   <age>26</age>
                   <height>165</height>
                   <weight>65</weight>
                   </person>
                   <person>
                   <name>kobe</name>
                   <age>36</age>
                   <height>195</height>
                   <weight>65</weight>
                   </person>
                   <person>
                   <name>Alan</name>
                   <age>26</age>
                   <height>165</height>
                   <weight>65</weight>
                   </person>
                   /data>";

遍历取到每一个person下面节点的name、age、height、weight的value 和text

TiXmlDocument* myDocument ;

myDocument.Parse(xmlStr));

TiXmlElement* rootElement = myDocument.RootElement();

if (rootElement)
    {
        TiXmlElement* element = rootElement->FirstChildElement();

        if (element)
        {
        
            for (TiXmlNode* SubItem = rootElement->FirstChild();SubItem!=NULL;)
            {
                TiXmlElement* AppNameElement = SubItem->ToElement()->FirstChildElement();

                TiXmlElement* nameElement = AppNameElement->NextSiblingElement();
                TiXmlElement* ageElement = AppPermit_typeElement->NextSiblingElement();
                              
                              TiXmlElement* heightElement = AppPermit_typeElement->NextSiblingElement();

                              TiXmlElement* weightElement = AppPermit_typeElement->NextSiblingElement();

                printf("%s:	%s
", nameElement ->Value(), nameElement ->GetText());
                printf("%s:	%s
", ageElement ->Value(), ageElement ->GetText());
                printf("%s:	%s
", heightElement ->Value(), heightElement ->GetText());
                                printf("%s:	%s
", weightElement ->Value(), weightElement ->GetText());

                SubItem=SubItem->NextSibling();
            }
        }
    }

第二种:

   

char* xmlStr = "<?xml version="1.0" encoding="utf-8"?>
                   <data type="vector">
                   <Country>USA</Country>
                   <Country>China</Country>
                   </data>";
       TiXmlDocument myDocument;

        myDocument.Parse(xmlStr);

        TiXmlElement* rootElement = myDocument.RootElement();

        if (rootElement)
        {
            TiXmlElement* element = rootElement->FirstChildElement();

            if (element)
            {
                for (TiXmlNode* SubItem = rootElement->FirstChild();SubItem!=NULL;)
                {
                    TiXmlElement* ExtNameElement = SubItem->ToElement();

                    printf("%s:	%s
", NameElement->Value(), NameElement->GetText());
            
                    SubItem=SubItem->NextSibling();
                }
            }
        }
    }

 注:如果你获取的字符串是Unicode的,必须转码为UTF-8

原文地址:https://www.cnblogs.com/chechen/p/7419239.html