使用 C# 从特定行获取列值并通过 linq 转换为 xml
To get column value from specific rows using c# and convert to xml by linq
我有一个数据table喜欢
DataTable
现在我必须使用 c# linq[=13= 获取前两行的值,第 1 列具有元素名称,第 2 列具有 xml 中元素的值]
之后,跳到第 4 行,从第 4 行跳到 n 行,我希望所有值都动态传递到元素中(元素名称我会硬编码)
注:元素表示xml个元素
所需输出:
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();
我有一个数据table喜欢
DataTable
现在我必须使用 c# linq[=13= 获取前两行的值,第 1 列具有元素名称,第 2 列具有 xml 中元素的值]
之后,跳到第 4 行,从第 4 行跳到 n 行,我希望所有值都动态传递到元素中(元素名称我会硬编码)
注:元素表示xml个元素 所需输出: 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();