转载: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 ;
} int tinyxmlTest(void)
{
#if (1)
char* xmlStr = "\
<person>\
<name>Alan</name>\
<age></age>\
<height></height>\
<weight></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 ;
printf("%s:\t%s\n", rootElement->Value(), rootElement->GetText()); //.....name.....
TiXmlElement* element = rootElement->FirstChildElement();
if (element == NULL || strcmp(element->Value(), "name"))
return ;
printf("%s:\t%s\n", element->Value(), element->GetText()); //.....age.....
element = element->NextSiblingElement();
if (element == NULL || strcmp(element->Value(), "age"))
return ;
printf("%s:\t%s\n", element->Value(), element->GetText()); //.....height.....
element = element->NextSiblingElement();
if (element == NULL || strcmp(element->Value(), "height"))
return ;
printf("%s:\t%s\n", element->Value(), element->GetText()); //.....weight.....
element = element->NextSiblingElement();
if (element == NULL || strcmp(element->Value(), "weight"))
return ;
printf("%s:\t%s\n", element->Value(), element->GetText()); //.....introduction.....
element = element->NextSiblingElement();
if (element == NULL || strcmp(element->Value(), "introduction"))
return ;
printf("%s:\t%s\n\n", element->Value(), element->GetText()); return ;
}

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

第一种:

    char* xmlStr = "\<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<data type=\"maplist\">\
<person>\
<name>messi</name>\
<age></age>\
<height></height>\
<weight></weight>\
</person>\
<person>\
<name>kobe</name>\
<age></age>\
<height></height>\
<weight></weight>\
</person>\
<person>\
<name>Alan</name>\
<age></age>\
<height></height>\
<weight></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:\t%s\n", nameElement ->Value(), nameElement ->GetText());
printf("%s:\t%s\n", ageElement ->Value(), ageElement ->GetText());
printf("%s:\t%s\n", heightElement ->Value(), heightElement ->GetText());
printf("%s:\t%s\n", 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:\t%s\n", NameElement->Value(), NameElement->GetText()); SubItem=SubItem->NextSibling();
}
}
}
}

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

C++ tinyXml直接解析XML字符串的更多相关文章

  1. tinyXml直接解析XML字符串

    一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...

  2. C++解析XML字符串

    项目交互遇到了需要VC++中解析XML字符串,故花了点时间了解了下VC++中解析XML的诸多方法主要包括三种:msxml(微软提供).markup.TinyXml. 开始花了点时间使用msxml3,虽 ...

  3. 解析xml字符串时报“前言中不允许有内容”错误。

    一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...

  4. dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  5. java解析xml字符串(用dom4j)

    package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...

  6. java解析xml字符串为实体(dom4j解析)

    package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...

  7. .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表

    /// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...

  8. ORACLE 解析xml字符串-转载的

    --------------------------方法一------------------------------------- 1.xml字符串 /* <orderlist>     ...

  9. java解析xml字符串方法

    一,用DOM4J  针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...

随机推荐

  1. css实现简单几何图形

    前言:你知道吗?用代码就可以做出三角形.圆形.扇形等等这些几何图形呦.快过来一探究竟吧! 页面上一些简单的图形,如三角形.圆形等等,除了用图片来实现,我们还可以用css的border属性来实现,不仅减 ...

  2. 打造自己的 JavaScript 武器库

    原文 https://segmentfault.com/a/1190000011966867 github:https://github.com/proYang/outils 前言 作为战斗在业务一线 ...

  3. 网站/IIS/Web/WCF服务 访问共享目录 映射 的解决方案

    目录 问题案例 原因分析 解决问题 总结 问题案例 环境: 电脑A:winform程序: 电脑B:部署了一个文件上传的WCF服务在IIS上.且该服务的配置文件中已经增加 <identity im ...

  4. C#静态类,静态构造函数,静态变量

    静态变量位于栈上,它是一个全局变量,在编译期就已经生成. public class Cow public static int count; private int id; { id = ++coun ...

  5. 009-spring cloud gateway-过滤器GatewayFilter、GlobalFilter、GatewayFilterChain、作用、生命周期、GatewayFilterFactory内置过滤器

    一.概述 在Spring-Cloud-Gateway之请求处理流程中最终网关是将请求交给过滤器链表进行处理. 核心接口:GatewayFilter,GlobalFilter,GatewayFilter ...

  6. 逻辑运算,&,&&, |, ||, ^, !

    &:与  特点:判断时两边为true才为true,只要两边有一个为false则结果为false:true&true=true: false&true=false: true&a ...

  7. POJ1426:Find The Multiple(算是bfs水题吧,投机取巧过的)

    http://poj.org/problem?id=1426 Description Given a positive integer n, write a program to find out a ...

  8. POJ3414—Pots(bfs加回溯)

    http://poj.org/problem?id=3414                                       Pots Time Limit: 1000MS   Memor ...

  9. 设置pip的默认源

    Python在导入第三方模块的时候用设置豆瓣源的方法提高效率,每次设置很麻烦,所以通过下面方法设置默认源,这样就可以直接pip install package,而不用指定源了. [global] ti ...

  10. JS的二维数组

    今天,记录一下JS的二位数组,并附上例题. 一.二维数组的本质:数组中的元素又是数组. 其实,我们都见过这样的二维数组,只不过没在意罢了,例如: var arr = [[1,2,4,6],[2,4,7 ...