如何在.NET中用DataTables表示数据集中的XML级别
这可能是一个愚蠢的问题,但我需要在.NET中执行以下操作: 我有这样一个XML文档:如何在.NET中用DataTables表示数据集中的XML级别,.net,xml,datatable,dataset,.net,Xml,Datatable,Dataset,这可能是一个愚蠢的问题,但我需要在.NET中执行以下操作: 我有这样一个XML文档: <I_WOs> <I_WO> <I_WO_HEADER><External_Source_Id>1</External_Source_Id></I_WO_HEADER> <I_WO_PART><Part_Number>1</Part_Number></I_WO_PART>
<I_WOs>
<I_WO>
<I_WO_HEADER><External_Source_Id>1</External_Source_Id></I_WO_HEADER>
<I_WO_PART><Part_Number>1</Part_Number></I_WO_PART>
</I_WO>
<I_WO>
<I_WO_HEADER><External_Source_Id>2</External_Source_Id></I_WO_HEADER>
<I_WO_PART><Part_Number>2</Part_Number></I_WO_PART>
</I_WO>
</I_WOs>
但我不明白的部分是如何链接数据表,以便标题和部分位于I_WO之下,而不是同级
如果我使用ds.GetXml(),那么它看起来就不一样了。
如果我将XML加载到数据集中,那么我可以看到它有3个表,就像我上面定义的表一样
有什么帮助吗?通常,您是通过表之间的关系来实现的,如果表之间有FK约束,则VS的XML设计器或ReadXML将显示/返回正确的嵌套结构 Rodney上面XML片段的观点是肯定的,
I_WO_HEADER
和I_WO_PART
位于I_WO
节点内部,但是由于I_WO
节点没有自己的属性,因此无法创建这样的FK来创建层次结构
事实上,从我所看到的,I_WO表是空的,不可能存在,只有另外两个表有字段
通过快速查看,您是否可以尝试在Visual Studio的DataSet designer中对数据进行建模,而不是从创建类实例的代码中进行建模,向列中添加一些类似于上面的值的数据,然后通过调用WriteXML导出到磁盘,以便查看您到底收到了什么?我发现了一些链接,这些链接让我走得更远一些: 和 因此,我在ID数据上设置了一些键,如下所示:
<I_WOs>
<I_WO>
<I_WO_HEADER><External_Source_Id>1</External_Source_Id></I_WO_HEADER>
<I_WO_PART><Part_Number>1</Part_Number></I_WO_PART>
</I_WO>
<I_WO>
<I_WO_HEADER><External_Source_Id>2</External_Source_Id></I_WO_HEADER>
<I_WO_PART><Part_Number>2</Part_Number></I_WO_PART>
</I_WO>
</I_WOs>
DataRelation headerPartRelation=workOrderDetailsDataSet.Relations.Add(“HeaderPart”,workOrderDetailsDataSet.Tables[0]。列[“外部源代码”]、workOrderDetailsDataSet.Tables。列[“外部源代码”]);
headerPartRelation.Nested=true;
headerPartRelation.RelationName=“HeaderPart”
然而,问题仍然在于如何获得空I_WO标签。我复制了标题表并将其重命名为I_WO,从中导入所有行并设置了datarelation。这给了我所需的结构,但是I_WO标签中现在有重复的标题元素!我不知道如何避免这种情况
正如Jon所指出的——我需要思考我在这里想要实现什么——我需要这种格式的XML,我有4个数据表
另一个选项是手动将其序列化为XML,而不是使用.GetXML。然后,我可以构建我需要的标记,并根据需要循环遍历数据表。我不知道最好的方法是什么…您能告诉我们为什么需要数据集和数据表吗?可能有更简单的方法。(还请告诉我们您使用的是.NET的哪个版本。)嗨,Jon,我使用的是一个数据集,它以XML形式传递给SQL存储过程-它当前有一个文件轮询,它获取XML(与上面的一样)并将其加载到数据集,然后使用.GetXml将其传递给SQL。我现在有来自另一个来源的数据,需要复制数据集-在这个阶段更改方法不是一个选项(尽管我希望听到更有效的方法)。我正在使用C#3.0)。现在还不清楚您是在尝试构建数据集还是XML。在这个问题中,您谈到了从数据集创建XML,但在这个注释中,您谈到了复制数据集……好的,给我4个数据表;现在,我需要遍历它们并构建一个新的数据集,当我调用GetXml()时,该数据集提供了上述XML。感谢您的回答,这对我有点帮助—我阅读了本文—我在表之间建立了数据关系,看起来好多了。但是,我必须复制一个表才能得到空的I_WO节点-请参见下面的代码
DataRelation headerLabourRelation = workOrderDetailsDataSet.Relations.Add("HeaderLabour", workOrderDetailsDataSet.Tables[0].Columns["EXTERNAL_SOURCE_ID"], workOrderDetailsDataSet.Tables[2].Columns["EXTERNAL_SOURCE_ID"]);
headerLabourRelation.Nested = true;
headerLabourRelation.RelationName = "HeaderLabour";
DataRelation headerMiscRelation = workOrderDetailsDataSet.Relations.Add("HeaderMisc", workOrderDetailsDataSet.Tables[0].Columns["EXTERNAL_SOURCE_ID"], workOrderDetailsDataSet.Tables[3].Columns["EXTERNAL_SOURCE_ID"]);
headerMiscRelation.Nested = true;
headerMiscRelation.RelationName = "HeaderMisc";