首页 > 解决方案 > 将数据集转换为带有嵌套重复 xml 的 xml 字符串,反之亦然

问题描述

我正在尝试将具有 2 个数据表的数据集转换为具有嵌套重复 xml 的 xml 字符串,如下例所示。

如果你以前经历过,有什么建议吗?

例子:

<Items>
  <Code>A001</Code>
  <Qty>3</Qty>
  <SerialNoList>
    <SerialNo>S01</SerialNo>
    <SerialNo>S02</SerialNo>    
    <SerialNo>S03</SerialNo>
  </SerialNoList>
</Items>

我曾尝试使用 DataRelation 将数据集转换为 xml,但只能获得以下格式。

<Items>
  <Code>A001</Code>
  <Qty>3</Qty>
  <SerialNoList>
    <SerialNo>S01</SerialNo>
  </SerialNoList>
  <SerialNoList>
    <SerialNo>S02</SerialNo>    
  </SerialNoList>
  <SerialNoList>
    <SerialNo>S03</SerialNo>
  </SerialNoList>
</Items>

代码:

    data.Tables[0].TableName = "Items";
    data.Tables[1].TableName = "SerialNoList";

    DataRelation dataRelation = data.Relations.Add("SerialNo", 
    data.Tables[0].Columns["Code"], data.Tables[1].Columns["Code"]);

    dataRelation.Nested = true;
    data.Tables[1].Columns["Code"].ColumnMapping = MappingType.Hidden;

    string xmlString = data.GetXml();

数据 :

1st DataTable (Items)
Code     Qty
A001     3

2nd DataTable (SerialNoList)
Code     SerialNo
A001     S01
A001     S02
A001     S03

标签: c#xmlnesteddataset

解决方案


对于那些需要处理多个项目的人

    //dataSet is filled with data
    string xml = "";
    foreach (DataRow dr in dataSet.Tables["Items"].Rows)
    {
        XDocument doc = XDocument.Parse("<Detail></Detail>");
        XElement items = doc.Root;

        items.Add(new XElement("Code", dr["Code"]));
        items.Add(new XElement("Qty", dr["Qty"]));

        XElement list = new XElement("SerialNoList");
        items.Add(list);

        foreach (DataRow row in data.Tables["SerialNoList"].Select("Code = '" + dr["Code"] + "'"))
        {
            list.Add(new XElement("SerialNo", row["SerialNo"]));
        }

        xml += doc.ToString();
    }

推荐阅读