Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据集转换为包含嵌套重复xml的xml字符串,反之亦然_C#_Xml_Nested_Dataset - Fatal编程技术网

C# 将数据集转换为包含嵌套重复xml的xml字符串,反之亦然

C# 将数据集转换为包含嵌套重复xml的xml字符串,反之亦然,c#,xml,nested,dataset,C#,Xml,Nested,Dataset,我试图将包含2个数据表的数据集转换为包含嵌套重复xml的xml字符串,如下面的示例所示 如果你以前有过经验,有什么建议吗 例如: <Items> <Code>A001</Code> <Qty>3</Qty> <SerialNoList> <SerialNo>S01</SerialNo> <SerialNo>S02</SerialNo>

我试图将包含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>
代码:

数据:

1st DataTable (Items)
Code     Qty
A001     3

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

尝试使用Xml Linq执行以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Xml;
using System.Xml.Linq;
using System.Data;

namespace ConsoleApplication106
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataSet ds = new DataSet("Code_Serial_No");
            DataTable dtCode = new DataTable("Code");
            ds.Tables.Add(dtCode);

            dtCode.Columns.Add("Code", typeof(string));
            dtCode.Columns.Add("Qty", typeof(int));

            dtCode.Rows.Add(new object[] { "A001", 3});

            DataTable dtSerialNo = new DataTable("Serial_No");
            ds.Tables.Add(dtSerialNo);

            dtSerialNo.Columns.Add("Code", typeof(string));
            dtSerialNo.Columns.Add("SerialNo", typeof(string));

            dtSerialNo.Rows.Add(new object[] { "A001", "S01" });
            dtSerialNo.Rows.Add(new object[] { "A001", "S02" });
            dtSerialNo.Rows.Add(new object[] { "A001", "S03" });

            string xml = "<Items></Items>";
            XDocument doc = XDocument.Parse(xml);
            XElement items = doc.Root;

            items.Add(new XElement("Code", ds.Tables["Code"].Rows[0]["Code"]));
            items.Add(new XElement("Qty", ds.Tables["Code"].Rows[0]["Qty"]));

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

            foreach (DataRow row in ds.Tables["Serial_No"].AsEnumerable())
            {
                list.Add(new XElement("SerialNo", row.Field<string>("SerialNo")));
            }

            doc.Save(FILENAME);


        }

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
利用制度全球化;
使用System.Xml;
使用System.Xml.Linq;
使用系统数据;
命名空间控制台应用程序106
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
数据集ds=新数据集(“代码序列号”);
数据表dtCode=新数据表(“代码”);
ds.Tables.Add(dtCode);
添加(“代码”,typeof(字符串));
dtCode.Columns.Add(“数量”,类型(int));
添加(新对象[]{“A001”,3});
DataTable dtSerialNo=新数据表(“序列号”);
ds.Tables.Add(dtSerialNo);
添加(“代码”,类型(字符串));
添加(“SerialNo”,typeof(string));
添加(新对象[]{“A001”、“S01”});
添加(新对象[]{“A001”、“S02”});
添加(新对象[]{“A001”、“S03”});
字符串xml=”“;
XDocument doc=XDocument.Parse(xml);
XElement items=doc.Root;
添加(新的XElement(“代码”,ds.表格[“代码”]。行[0][“代码”]);
添加项目(新项目(“数量”,ds.表格[“代码”]。行[0][“数量”]);
XElement列表=新XElement(“序列列表”);
项目。添加(列表);
foreach(ds.Tables[“序列号”].AsEnumerable()中的数据行)
{
添加(新的XElement(“SerialNo”,行.字段(“SerialNo”));
}
文件保存(文件名);
}
}
}

尝试使用Xml Linq执行以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Xml;
using System.Xml.Linq;
using System.Data;

namespace ConsoleApplication106
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            DataSet ds = new DataSet("Code_Serial_No");
            DataTable dtCode = new DataTable("Code");
            ds.Tables.Add(dtCode);

            dtCode.Columns.Add("Code", typeof(string));
            dtCode.Columns.Add("Qty", typeof(int));

            dtCode.Rows.Add(new object[] { "A001", 3});

            DataTable dtSerialNo = new DataTable("Serial_No");
            ds.Tables.Add(dtSerialNo);

            dtSerialNo.Columns.Add("Code", typeof(string));
            dtSerialNo.Columns.Add("SerialNo", typeof(string));

            dtSerialNo.Rows.Add(new object[] { "A001", "S01" });
            dtSerialNo.Rows.Add(new object[] { "A001", "S02" });
            dtSerialNo.Rows.Add(new object[] { "A001", "S03" });

            string xml = "<Items></Items>";
            XDocument doc = XDocument.Parse(xml);
            XElement items = doc.Root;

            items.Add(new XElement("Code", ds.Tables["Code"].Rows[0]["Code"]));
            items.Add(new XElement("Qty", ds.Tables["Code"].Rows[0]["Qty"]));

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

            foreach (DataRow row in ds.Tables["Serial_No"].AsEnumerable())
            {
                list.Add(new XElement("SerialNo", row.Field<string>("SerialNo")));
            }

            doc.Save(FILENAME);


        }

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
利用制度全球化;
使用System.Xml;
使用System.Xml.Linq;
使用系统数据;
命名空间控制台应用程序106
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
数据集ds=新数据集(“代码序列号”);
数据表dtCode=新数据表(“代码”);
ds.Tables.Add(dtCode);
添加(“代码”,typeof(字符串));
dtCode.Columns.Add(“数量”,类型(int));
添加(新对象[]{“A001”,3});
DataTable dtSerialNo=新数据表(“序列号”);
ds.Tables.Add(dtSerialNo);
添加(“代码”,类型(字符串));
添加(“SerialNo”,typeof(string));
添加(新对象[]{“A001”、“S01”});
添加(新对象[]{“A001”、“S02”});
添加(新对象[]{“A001”、“S03”});
字符串xml=”“;
XDocument doc=XDocument.Parse(xml);
XElement items=doc.Root;
添加(新的XElement(“代码”,ds.表格[“代码”]。行[0][“代码”]);
添加项目(新项目(“数量”,ds.表格[“代码”]。行[0][“数量”]);
XElement列表=新XElement(“序列列表”);
项目。添加(列表);
foreach(ds.Tables[“序列号”].AsEnumerable()中的数据行)
{
添加(新的XElement(“SerialNo”,行.字段(“SerialNo”));
}
文件保存(文件名);
}
}
}

适用于需要处理多个项目的用户

    //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();
    }
//数据集充满了数据
字符串xml=”“;
foreach(dataSet.Tables[“Items”].Rows中的DataRow dr)
{
XDocument doc=XDocument.Parse(“”);
XElement items=doc.Root;
添加(新元素(“代码”,dr[“代码”));
添加(新元素(“数量”,dr[“数量”));
XElement列表=新XElement(“序列列表”);
项目。添加(列表);
foreach(data.Tables[“SerialNoList”]中的DataRow行。选择(“Code=”+dr[“Code”]+”))
{
添加(新的XElement(“SerialNo”,第[“SerialNo”]);
}
xml+=doc.ToString();
}

适用于需要处理多个项目的用户

    //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();
    }
//数据集充满了数据
字符串xml=”“;
foreach(dataSet.Tables[“Items”].Rows中的DataRow dr)
{
XDocument doc=XDocument.Parse(“”);
XElement items=doc.Root;
添加(新元素(“代码”,dr[“代码”));
添加(新元素(“数量”,dr[“数量”));
XElement列表=新XElement(“序列列表”);
项目。添加(列表);
foreach(data.Tables[“SerialNoList”]中的DataRow行。选择(“Code=”+dr[“Code”]+”))
{
添加(新的XElement(“SerialNo”,第[“SerialNo”]);
}
xml+=doc.ToString();
}

您好,欢迎来到Stack Overflow,您似乎有一个很好的问题,但忘记了代码(发生在我们当中最好的人身上),我建议您提出问题,并为要序列化的类添加代码,以及如何序列化这些类的代码。您发布的xml示例与数据集中的两个表不一致。看起来您正试图从一个数据集创建一个已知的xml格式,而这不能使用DataSet WriteXml方法来完成。Write Xml方法仅用于处理有限数量的Xml子体。日期集名称是第一级Xml标记,第二级Xml标记是表名。第三级Xml标记是每个表中的列。第四级标记是行数据。一旦超过4个级别,生成的xml就无法使用,因为数据变得支离破碎,无法放回原处