如何在.NET中用DataTables表示数据集中的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>

这可能是一个愚蠢的问题,但我需要在.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_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";