繁体   English   中英

使用 c# 从特定行获取列值并通过 linq 转换为 xml

[英]To get column value from specific rows using c# and convert to xml by linq

我有一个像

数据表

现在我必须使用 c# Z83C8324F192E757DE4EA9C519D5DB26 获取前两行的值,第 1 列具有元素的名称,第 2 列具有 xml 中元素的值

之后,跳到第 4 行,从第 4 行跳到 n 行,我希望所有值动态传递给元素(元素名称我将对其进行硬编码)

注意:元素表示 xml 元素需要 output: file.xml

//this My datatable ---- for datatable check the above image
//Result is my dataset which i got from my xlsx file and i converted dataset to datatable.

 DataTable dt = result.Tables[0]; //Table[0] -- is my 1st sheet of xlsx file

 var rows = dt.AsEnumerable().Take(2); //Taking first 2 rows

 XElement xml1 = new XElement("ROOT",
                from r in rows
     select (
     new XElement(r.Field<string>("Column0"),r.Field<object>("Column1"))
            )
            );
//Field<object>--object is datatype which takes anytype of value from columns or rows in data table

 var n = result.Tables[0].Rows.Count;

 var Ref = dt.AsEnumerable().Skip(3).Take(n-3);

  XElement xml2 = new XElement("ROOT",
                from rs in Ref
                select (
                   new XElement("References",
                      new XElement("A", rs.Field<string>("Column0")),
                 new XElement("B", rs.Field<string>("Column1")),
                 new XElement("C", rs.Field<string>("Column2"))));

//Now merge those two xmls
var x1 = XDocument.Parse(xml1.ToString());
var x2 = XDocument.Parse(xml2.ToString());
x1.Root.Add(x2.Root.Elements());
x1.Save(@"D:\filename.xml");


For output check my question...

对于您的问题,您想从特定行获取列值并转换为 xml 文件

通过 linq。

您可以尝试以下代码来获取它。

        var result1 = table.AsEnumerable().Take(2);
        var result2 = table.AsEnumerable().Skip(3).Take(table.Rows.Count - 3);
        XmlTextWriter writer = new XmlTextWriter("product.xml", System.Text.Encoding.UTF8);
        writer.WriteStartDocument(true);
        writer.Formatting = Formatting.Indented;
        writer.Indentation = 2;
        writer.WriteStartElement("DFS");
        foreach (DataRow item in result1)
        {
            createNode(item[0].ToString(), item[1].ToString(), writer);
        }
        foreach (DataRow item in result2)
        {
            writer.WriteStartElement("References");
            createNode("A", item[0].ToString(), writer);
            createNode("B", item[1].ToString(), writer);
            createNode("C", item[2].ToString(), writer);
            createNode("D", item[3].ToString(), writer);
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Close();

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM