簡體   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