如何用C或c++写一段代码读取xsd结构生成一个XML文件,现在我有数据文件和XSD文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C或c++写一段代码读取xsd结构生成一个XML文件,现在我有数据文件和XSD文件相关的知识,希望对你有一定的参考价值。
我现在有一个XSD文件,还有一个二进制的数据文件,想利用C或者C++读取XSD的结构将那个二进制的数据文件生成一个xml,哪个高手能给我用c或者c++读取xsd结构的代码啊,很急很急
参考技术A 自己写的程序,其中用到添加信息到XML文件中的,但是是手动添加,没学过XSD,但是觉得你可以搜索一下读取XSD方法,在自动添加到XML中吧XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("C:\\学生管理系统.xml");
XmlNode root = xmldoc.SelectSingleNode("students"); //导入根节点
///////设置文本节点
XmlElement xesub1 = xmldoc.CreateElement("node" );
xesub1.SetAttribute("name",j);
xesub1.SetAttribute("grade",n);
xesub1.SetAttribute("money",r);
xesub1.SetAttribute("number" , i);
root.AppendChild(xesub1);
xmldoc.Save("C:\\学生管理系统.xml");
MessageBox.Show("添加成功"); 参考技术B ——需要的包
#include <XMLDoc.hpp>
——相关说明
_di_IXMLDocument 为模板类
typedef System::DelphiInterface< IXMLDocument > _di_IXMLDocument;
_di_IXMLNode
typedef System::DelphiInterface< IXMLNode > _di_IXMLNode;
_di_IXMLNodeList 同
——类方法
//设置参数
void TXXX::setOptions(String name,String value)
//创建文档对象
_di_IXMLDocument XMLDoc = LoadXMLDocument(L"文件路径");
XMLDoc->Active=true;
//文档根节点
_di_IXMLNode root = XMLDoc->DocumentElement;
//想要查找节点
_di_IXMLNode tempNode;
//调用搜索方法
searchXml(name,root,tempNode);
// 处理
if(tempNode!=NULL)
tempNode->SetText(value);
XMLDoc->SaveToFile(L"文件路径");
//递归搜索参数节点树
void TXXX::searchXml(String name,_di_IXMLNode &Parent_Node,_di_IXMLNode& tempNode)
_di_IXMLNode Child_Node; //子结点
//子节点列表
_di_IXMLNodeList list = Parent_Node->ChildNodes;
for(int i=0;i<list->Count;i++)
Child_Node = list->Get(i);
//递归结束条件
if(Child_Node->GetNodeName()==name)
tempNode = Child_Node;
break;
else
//递归函数
searchXml(name,Child_Node,tempNode);
终于写完了 你按照上面的就可以了 我写的很详细了 参考技术C 上google找第三方库吧,如果你这个是产品的话,考虑到性能和可靠性,不建议使用别人的库。 参考技术D 不会本回答被提问者采纳
如何用两列 C++ 从文本文件中填充向量
【中文标题】如何用两列 C++ 从文本文件中填充向量【英文标题】:how to populate vector from text file with two columns C++ 【发布时间】:2017-02-22 12:37:34 【问题描述】:我对 C++ 非常陌生,我正在尝试在从文本文件读取的 2d 平面中创建一个点向量。为此,我首先创建一个由两个值 (x,y) 组成的结构,称为 point。然后这些点的向量称为 vec。但是,当文本文件位于三列时,我不确定如何填充结构数据!第一列只是点的索引,第二列是 x 数据,第三列是 y 数据。我不知道 vec 的大小,所以我尝试使用push_back()
这是我目前所拥有的。
int main()
struct point
std::vector<x> vec_x;
std::vector<y> vec_y;
;
std::vector<point> vec;
vec.reserve(1000);
push_back();
ifstream file;
file.open ("textfile.txt");
if (textfile.is_open())
/* want to populate x with second column and y with third column */
else std::cout << "Unable to open file";
评论在哪里,我有以下内容;
while( file >> x )
vec.push_back (x);
while( file >> y )
vec.push_back (y);
抱歉,如果这很简单,但对我来说不是!下面贴的是一个只有6个点的txt文件的例子。
0 131 842
1 4033 90
2 886 9013490
3 988534 8695
4 2125 10
5 4084 474
6 863 25
编辑
while (file >> z >> x >> y)
struct point
int x;
int y;
;
std::vector<point> vec;
vec.push_back (x);
vec.push_back (y);
【问题讨论】:
【参考方案1】:您可以在循环中使用普通输入运算符>>
:
int x, y; // The coordinates
int z; // The dummy first value
while (textfile >> z >> x >> y)
// Do something with x and y
至于结构,我建议有点不同的方法:
struct point
int x;
int y;
;
然后有一个结构向量:
std::vector<point> points;
在循环中,创建一个point
实例,初始化其x
和y
成员,然后将其推回points
向量中。
请注意,上面的代码几乎没有错误检查或容错。如果文件中有错误,更具体地说,如果格式有问题(例如,一行中有一个额外的数字,或者一个数字很少),那么上面的代码将无法处理它。为此,您可以使用std::getline
读取整行,将其放入std::istringstream
并从字符串流中读取x
和y
变量。
总而言之,工作代码的简单示例(不处理无效输入)将类似于
#include <fstream>
#include <vector>
// Defines the point structure
struct point
int x;
int y;
;
int main()
// A collection of points structures
std::vector<point> points;
// Open the text file for reading
std::ifstream file("textfile.txt");
// The x and y coordinates, plus the dummy first number
int x, y, dummy;
// Read all data from the file...
while (file >> dummy >> x >> y)
// ... And create a point using the x and y coordinates,
// that we put into the vector
points.push_back(pointx, y);
// TODO: Do something with the points
【讨论】:
感谢您的帮助!但是,我仍在为此苦苦挣扎。我已经编辑了这个问题,你能告诉我我是否在正确的轨道上吗?干杯! @AngusTheMan 有一点是,但也有很多不是。请参阅我的更新答案以获取一个简单的示例程序。 非常感谢!【参考方案2】:使用std::getline()
读取一行
如here所提到的那样将字符串拆分为空格@
将每个元素推送到您的向量。
重复下一行直到文件结束
【讨论】:
以上是关于如何用C或c++写一段代码读取xsd结构生成一个XML文件,现在我有数据文件和XSD文件的主要内容,如果未能解决你的问题,请参考以下文章