利用c++操作XML,主要是内部循环方法的使用
本文主要分享的是循环方法的使用,设置XML节点属性,用了3种循环方法。
XML文件:
<?xml version='1.0' encoding='utf-8' ?>
<root>
<seqs>
<seq name="a" license="1" enable="true"/>
<seq name="b" license="1" enable="true"/>
</seqs>
</root>
第一种方法:以vecSeq大小作为循环条件,最方便,因为可以直接使用int i
#include <iostream>
#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_utils.hpp"
#include "rapidxml/rapidxml_print.hpp"
#include "boost/property_tree/xml_parser.hpp"
using namespace rapidxml;
struct SeqStruct
{
std::string seqName;
std::string seqLicense;
};
int main()
{
SeqStruct seqs;
std:: vector<SeqStruct> vecSeq;
seqs.seqName = "zhang";
seqs.seqLicense = "true";
vecSeq.push_back(seqs);
seqs.seqName = "liu";
seqs.seqLicense = "true";
vecSeq.push_back(seqs);
for(int i = 0; i < 2; i++)
{
std::cout <<vecSeq[i].seqName;
std::cout <<vecSeq[i].seqLicense;
std::cout << std::endl;
}
file<> fDoc("E:/UIMRIS/BRANCHES/uMR_MAIN/MAIN/Features/win32test/XMLFile6.xml");
std::cout << fDoc.data() << std::endl;
xml_document<> xmlDoc;
xmlDoc.parse<0>(fDoc.data());
xml_node<>* rootNode = xmlDoc.first_node();
xml_node<>* seqsNode = rootNode->first_node();
xml_node<>* seqNode = seqsNode->first_node();
for (int i = 0; i < vecSeq.size(); ++i)
{
xml_attribute<>* attrSeq = seqNode->first_attribute();
attrSeq->value(xmlDoc.allocate_string(vecSeq[i].seqName.c_str()));
attrSeq = attrSeq->next_attribute();
attrSeq->value(xmlDoc.allocate_string(vecSeq[i].seqLicense.c_str()));
seqNode = seqNode->next_sibling();
}
std::string text;
rapidxml::print(std::back_inserter(text), xmlDoc, 0);
std::cout<<text<<std::endl;
std::ofstream out("E:/UIMRIS/BRANCHES/uMR_MAIN/MAIN/Features/win32test/XMLFile7.xml");
if (!out.good())
{
std::cout<<"error";
}
out << text;
out.close();
getchar();
return 0;
}
第二种方法:以节点指向为循环,但是需要重新定义一个int i
int i = 0;
for (xml_node<>* seqNode = seqsNode->first_node(); seqNode != NULL; seqNode = seqNode->next_sibling())
{
xml_attribute<>* attrSeq = seqNode->first_attribute();
attrSeq->value(xmlDoc.allocate_string(vecSeq[i].seqName.c_str()));
attrSeq = attrSeq->next_attribute();
attrSeq->value(xmlDoc.allocate_string(vecSeq[i].seqLicense.c_str()));
i++;
}
第三种方法:节点属性也作为循环,因为有3个属性,只操作前两个属性,所以要加判断条件
int i = 0;
for (xml_node<>* seqNode = seqsNode->first_node(); seqNode != NULL; seqNode = seqNode->next_sibling())
{
for (xml_attribute<>* attrSeq = seqNode->first_attribute(); attrSeq->next_attribute() != NULL; attrSeq = attrSeq->next_attribute()) //only change 2 attribute
{
if (bFirst)
{
attrSeq->value(xmlDoc.allocate_string(vecSeq[i].seqName.c_str()));
bFirst = false;
}
else
{
attrSeq->value(xmlDoc.allocate_string(vecSeq[i].seqLicense.c_str()));
bFirst = true;
}
}
i++;
}
利用c++操作XML,主要是内部循环方法的使用的更多相关文章
- 利用XmlDocument操作XML文件
利用XmlDocument可以方便的操作XML文件. .操作XML文件基本方法 ()添加对System.Xml的引用,并使用using语句添加引用: ()假设要读取的XML文件如下: <?xml ...
- c#操作XML文件的通用方法
转载地址:http://www.studyofnet.com/news/36.html 原址没找到 sing System; using System.Data; using System.Confi ...
- PHP DOMDocument操作 XML类 属性、方法
属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definition 以DTD或XML模式给出的节 ...
- Jquery 操作xml 文档的方法
需求: 页面上有两个下拉框,显示游戏大区 和游戏服务器,当游戏大区改变时,游戏服务器也跟着改变 界面部分html代码 <tr class="tkSigUser"> &l ...
- java使用dom4j和XPath解析XML与.net 操作XML小结
最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...
- C#操作XMl文件(2):使用XmlReader和XmlWriter实现读取和写入
这次使用操作Xml较为常用的方法:使用XMlreader和Xmlwriter 1:读取xml文件的数学和元素 XmlReaderSettings settings = new XmlReaderSet ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- C#操作XML方法集合
一 前言 先来了解下操作XML所涉及到的几个类及之间的关系 如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家 * 1 XMLElement 主要是针对节点的一些属性进行操 ...
- C#操作XML方法详解
using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml. ...
随机推荐
- visual studio 资源视图 空白 解决方案
visual studio 资源视图打开后显示空白的解决方案步骤: 在解决方案view下,右键点击工程 1 unload projects 完成第一步后仍然在解决方案view下,右键点击工程 2 re ...
- SSH整合逻辑图
Struts,Spring,Hibernate三大框架的整合过多次,但自己理解的结合大师讲的对比起来,感觉还是有不少的差距. Struts,开发Web层框架,提供整洁的MVC结构,分离了各层关注,降低 ...
- 【解决】Internet访问看似正常(无叹号受限)却打不开网页
嘛╮(╯▽╰)╭ 可能是前几天中了一等奖败了人品 .. 今天果断受点小挫折 事情是这样的:昨晚电脑在不插电的情况下打了一小时“剑灵”,有点烫,电量剩30%,关机睡觉,今早发现上不去网页了! 桌面右下角 ...
- 手动进行Excel数据和MySql数据转换
今天是全国数学建模比赛,同学选的一个题目需要对一个large的Excel表格进行统计,好哥们儿嘛--便帮助他完成了数据从Excel到MySql的转化.记下具体步骤分享给大家,也免得大家到网上到处乱找了 ...
- 【oracle】触发器简单实现
目标:实现实时备份uertest表数据至usertest_temp中,两表结构一致 解决:用oracle触发器实现同步 结果: 1.建表 -- 简单的用户表 create table USERTEST ...
- crontab command not found
在服务器上运行 crontab -e编辑定时任务 结果提示 command not found命令找不到,这就说明没安装crontab 由于 完整操作如下: [root@iZ11pvsxisqZ /] ...
- 《Effective C++》学习笔记条款13 以对象管理资源
条款 13 :以对象管理资源 例: voidf() { Investment *pInv = createInvestment(); ... ...
- Javascript substr方法在某些浏览器下行为出现BUG的补丁代码
主要思路是使用兼容性和稳定性都保持一致的substring方法重写/覆盖substr /** * String.substr() bug fix * @param start * @param len ...
- jdk的动态代理
至于jdk的动态代理怎么用此处并不多说,现在是更深一步的理解,jdk的Proxy类到底做了什么. Proxy.newProxyInstance可以生成代理类,此方法有三个参数(ClassLoader ...
- richTextBox插入表格
附件:http://files.cnblogs.com/xe2011/richTextBox_InsertTable.rar 插入表格 /// <summary> /// 插入表格 /// ...