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 ;
} 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字符串的更多相关文章
- tinyXml直接解析XML字符串
一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...
- C++解析XML字符串
项目交互遇到了需要VC++中解析XML字符串,故花了点时间了解了下VC++中解析XML的诸多方法主要包括三种:msxml(微软提供).markup.TinyXml. 开始花了点时间使用msxml3,虽 ...
- 解析xml字符串时报“前言中不允许有内容”错误。
一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...
- dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- java解析xml字符串(用dom4j)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- java解析xml字符串为实体(dom4j解析)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
/// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...
- ORACLE 解析xml字符串-转载的
--------------------------方法一------------------------------------- 1.xml字符串 /* <orderlist> ...
- java解析xml字符串方法
一,用DOM4J 针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...
随机推荐
- vue - vue-cli脚手架安装和webpack-simple模板项目生成
ue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. GitHub地址是:https://github.com/vuejs/vue-cli 一.安 ...
- MySQL 同一实例不同库之间表同步(Otter 应用)
1 需求 在同一台服务器同一MySQL实例中的source库和target库都存在student表.如果source库中该表发生增删改操作时,也需要体现到target库的student表中: 2 解决 ...
- Java bytesToHexString 解析
一.代码 /** * Convert byte[] to hex string * * @param src byte[] data * @return hex string */ public st ...
- sqlserver 索引的结构及其存储,索引内容
sqlserver 索引的结构及其存储,sql server索引内容 文章转载,原文地址: http://www.cnblogs.com/panchunting/p/SQLServer_IndexSt ...
- windows平台mysql密码设置
登录mysql默认没有指定账号 查看默认账号是谁 select user(); mysql> select user();+----------------+| user() |+------- ...
- 12 jmeter性能测试实战--web程序
项目背景 项目:XX网站环境:Windows需求:并发登录的性能测试场景:1s增加2个线程,运行2000次(线程数20,Ramp-Up seconds 10,循环次数100).分别看20.40.60并 ...
- 【剑指offer】斐波那契数列
一.题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 二.思路: 式子: n=0时,f=0:n=1或者n=2时f=1:否则f=f(n-1)+f(n ...
- [py][mx]django xadmin后台配置
xadmin配置 - 安装 pip install -r https://github.com/sshwsfc/xadmin/blob/django2/requirements.txt 以下被我测试通 ...
- (转)使用git stash解决git pull时的冲突
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...
- 对比jQuery和AngularJS的不同思维模式
jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...