如何用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】:

您可以在循环中使用普通输入运算符&gt;&gt;

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 实例,初始化其xy 成员,然后将其推回points 向量中。

请注意,上面的代码几乎没有错误检查或容错。如果文件中有错误,更具体地说,如果格式有问题(例如,一行中有一个额外的数字,或者一个数字很少),那么上面的代码将无法处理它。为此,您可以使用std::getline 读取整行,将其放入std::istringstream 并从字符串流中读取xy 变量。


总而言之,工作代码的简单示例(不处理无效输入)将类似于

#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文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用 c 或 c++ 读取 FORTRAN 二进制文件?

如何用C语言来读取或查找一个文档里面的是信息。

如何用两列 C++ 从文本文件中填充向量

如何用C语言播放一段音频呢

如何用C++编写一段“输入A输出1”的程序

如何用C++实现C的这个功能