zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    技术博客之Saju M
    Dajax 的安装以及详细使用
    当我感觉厌倦的时候
    2014年3月22日 星期日
    windows 7远程桌面访问 ubuntu12.04
    promise的用法
    for循环中匿名同步
    开启Group Work Site功能
    Jquery根据属性模糊查询节点
    设置用户字段
  • 原文地址:https://www.cnblogs.com/chechen/p/7419239.html
Copyright © 2011-2022 走看看