C++发送某个指令后更换读写的xml文件 10
展开全部
我们先创建一个xml文件(a.xml),然后解析xml,将解析到的内容输入到另一个xml文件中去(b.xml)相当于拷贝了a.xml
a.Xml:
<HTML>
<Header name="a" type="x" size="4" odd="0">
<Field name="EMP-0" type="UINT32" ratio="1" link=""/>
<Field name="EMP-1" type="UINT32" ratio="1" link=""/>
<Field name="EMP-2" type="UINT32" ratio="1" link=""/>
</Header>
<Body name="b" type="x" size="4" odd="0">
<Field name="EMP-0" type="UINT32" ratio="1" link=""/>
<Field name="EMP-1" type="UINT32" ratio="1" link=""/>
<Field name="EMP-2" type="UINT32" ratio="1" link=""/>
<Field name="EMP-3" type="UINT32" ratio="1" link=""/>
</Body>
</HTML>
程序代码:
#include"tinystr.h"
#include"tinyxml.h"
#include<iostream>
using namespace std;
#define SUCCESS 1
#define FAILED 0
int loadXml();
int main()
{
if(loadXml())
{getchar();return 1;}
getchar();
return 0;
}
int loadXml()
{
//创建两个个xml文档对象,一个为读取,一个为输出
TiXmlDocument *inXml = new TiXmlDocument();
TiXmlDocument *outXml = new TiXmlDocument();
//加载xml文件
if(!inXml->LoadFile("a.xml")) //判断XML文件是否加载成功
{
cerr<<inXml->ErrorDesc()<<endl;
return 0;
}
//定义根节点,记录xml文件的起始节点
TiXmlElement *inRoot = inXml->FirstChildElement(); //root指向xml文档的第一个节点
inXml->Value();//获取的值为文件名
//定义根节点并连接,将输入的根节点传给输出的根节点
TiXmlElement *outRoot = new TiXmlElement(inRoot->Value());
outXml->LinkEndChild(outRoot);
if(NULL == inRoot) //判断文件是否有内容
{
cerr<<"No root element !!!"<<endl;
inXml->Clear();
return 0;
}
//循环遍历每个节点
for(TiXmlElement *inElem = inRoot->FirstChildElement(); inElem != NULL; inElem = inElem->NextSiblingElement())
{
TiXmlElement *outElem = new TiXmlElement(inElem->Value());
outRoot->LinkEndChild(outElem);
const char *name = inElem->Value();//获取源文件中子节点的名字
outElem->SetValue(name); //设置目的文件子节点的名字
//获取源文件的属性,设置目标文件的属性
const char *rName = inElem->Attribute("name");
outElem->SetAttribute("name",rName);
const char *rType = inElem->Attribute("type");
outElem->SetAttribute("type",rType);
const char *rSize = inElem->Attribute("size");
outElem->SetAttribute("size",rSize);
const char *rOdd = inElem->Attribute("odd");
outElem->SetAttribute("odd",rOdd);
if(strcmp(name,"0"))
{
for(TiXmlElement *inChild = inElem->FirstChildElement();inChild!=NULL;inChild=inChild->NextSiblingElement())
{
TiXmlElement *outChild = new TiXmlElement(inChild->Value());
outElem->LinkEndChild(outChild);
const char *cName = inChild->Attribute("name");
outChild->SetAttribute("name",cName);
const char *cType = inChild->Attribute("type");
outChild->SetAttribute("type",cType);
const char *cRatio = inChild->Attribute("ratio");
outChild->SetAttribute("ratio",cRatio);
const char *cLink = inChild->Attribute("link");
outChild->SetAttribute("link",cLink);
}
}
}
outXml->SaveFile("b.xml");
inXml->Clear();
outXml->Clear();
return true;
}
输出结果:
输出文件b.xml和a.xml 的内容是一样的。
a.Xml:
<HTML>
<Header name="a" type="x" size="4" odd="0">
<Field name="EMP-0" type="UINT32" ratio="1" link=""/>
<Field name="EMP-1" type="UINT32" ratio="1" link=""/>
<Field name="EMP-2" type="UINT32" ratio="1" link=""/>
</Header>
<Body name="b" type="x" size="4" odd="0">
<Field name="EMP-0" type="UINT32" ratio="1" link=""/>
<Field name="EMP-1" type="UINT32" ratio="1" link=""/>
<Field name="EMP-2" type="UINT32" ratio="1" link=""/>
<Field name="EMP-3" type="UINT32" ratio="1" link=""/>
</Body>
</HTML>
程序代码:
#include"tinystr.h"
#include"tinyxml.h"
#include<iostream>
using namespace std;
#define SUCCESS 1
#define FAILED 0
int loadXml();
int main()
{
if(loadXml())
{getchar();return 1;}
getchar();
return 0;
}
int loadXml()
{
//创建两个个xml文档对象,一个为读取,一个为输出
TiXmlDocument *inXml = new TiXmlDocument();
TiXmlDocument *outXml = new TiXmlDocument();
//加载xml文件
if(!inXml->LoadFile("a.xml")) //判断XML文件是否加载成功
{
cerr<<inXml->ErrorDesc()<<endl;
return 0;
}
//定义根节点,记录xml文件的起始节点
TiXmlElement *inRoot = inXml->FirstChildElement(); //root指向xml文档的第一个节点
inXml->Value();//获取的值为文件名
//定义根节点并连接,将输入的根节点传给输出的根节点
TiXmlElement *outRoot = new TiXmlElement(inRoot->Value());
outXml->LinkEndChild(outRoot);
if(NULL == inRoot) //判断文件是否有内容
{
cerr<<"No root element !!!"<<endl;
inXml->Clear();
return 0;
}
//循环遍历每个节点
for(TiXmlElement *inElem = inRoot->FirstChildElement(); inElem != NULL; inElem = inElem->NextSiblingElement())
{
TiXmlElement *outElem = new TiXmlElement(inElem->Value());
outRoot->LinkEndChild(outElem);
const char *name = inElem->Value();//获取源文件中子节点的名字
outElem->SetValue(name); //设置目的文件子节点的名字
//获取源文件的属性,设置目标文件的属性
const char *rName = inElem->Attribute("name");
outElem->SetAttribute("name",rName);
const char *rType = inElem->Attribute("type");
outElem->SetAttribute("type",rType);
const char *rSize = inElem->Attribute("size");
outElem->SetAttribute("size",rSize);
const char *rOdd = inElem->Attribute("odd");
outElem->SetAttribute("odd",rOdd);
if(strcmp(name,"0"))
{
for(TiXmlElement *inChild = inElem->FirstChildElement();inChild!=NULL;inChild=inChild->NextSiblingElement())
{
TiXmlElement *outChild = new TiXmlElement(inChild->Value());
outElem->LinkEndChild(outChild);
const char *cName = inChild->Attribute("name");
outChild->SetAttribute("name",cName);
const char *cType = inChild->Attribute("type");
outChild->SetAttribute("type",cType);
const char *cRatio = inChild->Attribute("ratio");
outChild->SetAttribute("ratio",cRatio);
const char *cLink = inChild->Attribute("link");
outChild->SetAttribute("link",cLink);
}
}
}
outXml->SaveFile("b.xml");
inXml->Clear();
outXml->Clear();
return true;
}
输出结果:
输出文件b.xml和a.xml 的内容是一样的。
2017-08-01
展开全部
XmlDocumentdoc=newXmlDocument();doc.Load(@"C:\123.xml");//@"C:\123.xml"为xml文件所在路径doc.SelectSingleNode("Question/Question[@name=1]").Attributes["sound"].InnerXml="2";//将name=1记录下的sound值设为2doc.Save(@"C:\123.xml");XmlNodeListnodes=doc.SelectNodes("Question/Question");foreach(XmlNodenodeinnodes){comboBox1.Items.Add(node.Attributes["name"].InnerXml);//comboBox1为ComboBox控件}//操作完后,comboBox1下拉框中将有1和2。以上若还有疑问,可以Hi我。
追问
qt环境下,我没太看懂你写的,再解释下我的问题,我创建两个xml文件,然后,一个为普遍状态下进行读写,而当收到服务器发来的如模式设置这样的指令后,读写另一个xml文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询