我试图找到一个很好的例子,说明如何使用ForEach获取List并将其转换为XML。我想做一个ForEach的原因是因为我可以对每个项目进行一次尝试/捕获,并确保在失败之前处理所有道路。这对于文件系统上的解密excel文件来说真的很有用,但是如果我可以通过List来实现它,我想我将能够转换它。如果它确实失败了,现在它就是ForEach,我现在能够制作XML文档,无论是什么,还记录哪些列失败以及哪一行(即失败的人名)。然后我可以检查实际的excel文件并修复问题并重新上传该记录。
任何帮助都会很感激。最后,我们通过存储过程将此XML文档推送到SQL服务器,以执行sp_xml解析以将其插入到数据库中。
以下是我目前正在做的事情,但是如果有一件事搞砸了,那么整个文件都不会处理等。
var xmlDoc = new XDocument(
new XDeclaration("1.0", "iso-8859-1", "yes"),
new XElement("Package",
from str in TheList
let fields = str.Split('\t')
select new XElement("Record",
new XElement("FileId", FileData.FileId),
new XElement("LineId", (lineId++).ToString())
)
)
);
return xmlDoc;
答案 0 :(得分:0)
这是我正在寻找的答案。希望它可以帮助别人!
http://forums.asp.net/p/2024939/5830279.aspx?p=True&t=635545389391660247
using System;
使用System.Collections.Generic; 使用System.Xml.Linq;
命名空间MyTestApplication.UI.TestXMLForEach {
public partial class TestXMLForEach : System.Web.UI.Page
{
TestRepo repo = new TestRepo();
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Start @" + DateTime.Now.ToString());
Response.Write("<br/>"); Response.Write("<br/>");
MakeXML();
Response.Write("<br/>"); Response.Write("<br/>");
Response.Write("End @" + DateTime.Now.ToString());
}
private IList<TestXMLDTO> GetXMLInfo()
{
IList<TestXMLDTO> theList = new List<TestXMLDTO>();
for(int i = 1; i <= 100000; i++)
{
theList.Add(new TestXMLDTO
{
Id = i,
FirstName = string.Format("FirstName_{0}",i.ToString()),
LastName = string.Format("LastName_{0}", i.ToString()),
Department = string.Format("Department_{0}", i.ToString()),
Salary = new decimal(27000 + i)
});
System.Diagnostics.Debug.WriteLine(i.ToString());
}
return theList;
}
private void MakeXML()
{
IList<TestXMLDTO> theList = GetXMLInfo();
XDocument xmlDoc = new XDocument(new XDeclaration("1.0", "iso-8859-1", "yes"));
XElement package = new XElement("Package");
foreach (var item in theList)
{
XElement record = new XElement("Record");
XElement id = new XElement("Id", item.Id);
record.Add(id);
XElement firstName = new XElement("FirstName", item.FirstName);
record.Add(firstName);
XElement lastName = new XElement("LastName", item.LastName);
record.Add(lastName);
XElement department = new XElement("Department", item.Department);
record.Add(department);
XElement salary = new XElement("Salary", item.Salary);
record.Add(salary);
package.Add(record);
}
xmlDoc.Add(package);
xmlDoc.Save(@"C:\XmlDocumentViaForEachAndListCSharp.xml");
}
}
public class TestXMLDTO
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Department { get; set; }
public decimal Salary { get; set; }
public TestXMLDTO()
{
Salary = new decimal(27000);
}
}
}