我的Web应用程序中有一组解析器组件函数,它能够解析和提取以下平面文件中的数据
1)TabDelimitedFile.FileExtenstion使用解析和提取 This Reference !!
2)使用LinqToXml
解析和提取File.XML文件数据3)使用LinqtoExcel
解析和提取Excel.xlsx文件数据
在解析和提取数据集时,我使用LinqToSql Classes和DBMLDataContext将它们插入到我的Sql Server databAse中。
我的要求:在插入已解析和提取的数据之前,我想将这些数据集写入XML文件中以供用户验证,然后在用户接受时插入数据库表中。
如何继续?
我的C#解析器组件工作流程:
protected void Button1_Click(object sender, EventArgs e)
{
try
{
string path = Server.MapPath("~/App_data" + "/" + "Folder" + "/" + DropDownList1.Text + "/");
IFileParser fileParser = new DefaultFileParser(First_Inserted);
string destinationTableName = "My Table";
string sourceFileFullName = GetFileFullName(path);
IEnumerable<DataTable> dataTables = fileParser.GetFileData(sourceFileFullName);
foreach (DataTable tbl in dataTables)
{
fileParser.WriteChunkData(tbl, destinationTableName, Map());
}
Appln_parse_xml1(path);
Appln_parse_xml2(path);
Appln_parse_xml3(path);
Appln_parse_Excel(path);
}
}
private static bool Appln_parse_xml3(string _xml3_path)
{
bool parse_status = false;
DataClasses1DataContext dbContext = new DataClasses1DataContext();
//XML File
List<string> xml3 = System.IO.Directory.GetFiles(@_xml3_path, "*.xml", SearchOption.AllDirectories).ToList<string>();
foreach (var _files in xml3)
{
var xdoc = XDocument.Load(_files);
XNamespace ns = xdoc.Root.GetDefaultNamespace();
var groups = from g in xdoc.Descendants(ns + "Group")
where (string)g.Attribute("name") == "Model Name"
select new First_DBML
{
Comp_Value = Decimal.Parse((from c in g.Elements(ns + "Group").Descendants(ns + "Cell")
where (string)c.Attribute("c") == "0"
select c.Value).First()),
};
dbContext.First_DBMLs.InsertAllOnSubmit(groups);
//Before Insertion need to write in xml for this Comp_value for user validation
dbContext.SubmitChanges();
// Inserting into My_Table
}
答案 0 :(得分:0)
根据我对您的问题的理解,您可以执行以下操作。 在Appln_parse_xml3函数中,当前使用dbContext.First_DBMLs.InsertAllOnSubmit(groups)将所有已解析的对象保存到数据库中; 在这里,您可以将对象绑定到转发器控件,而不是保存它。此转发器应显示所有已解析的对象,并为每个对象提供接受按钮。 您可以在转发器项中显示每个对象的属性,以便用户能够判断是否接受。如果要为用户显示xml,则可以将对象序列化为xml并在转发器中显示它们。
用户单击“接受”后,您可以从转发器项创建组对象并将其保存到数据库中。如果您将对象显示为xml,则可以将xml序列化为对象并将其保存到数据库中。
要将对象序列化为xml,您可以使用以下函数。
private string Serialize(object value)
{
System.IFormatProvider provider = System.Globalization.CultureInfo.CurrentCulture;
StringBuilder builder = new StringBuilder();
string serializedString = string.Empty;
try
{
XmlSerializer xs = new XmlSerializer(value.GetType());
XmlWriter xmlTextWriter = XmlTextWriter.Create(builder);
xs.Serialize(xmlTextWriter, value);
serializedString = builder.ToString();
xmlTextWriter.Close();
}
catch (Exception ex)
{
serializedString = "Serialization exception : " + ex.Message + ex.StackTrace;
}
return serializedString;
}
您可以使用以下代码将xml转换回您的对象
XmlSerializer serializer = new XmlSerializer(typeof(First_DBML));
First_DBML ei = (First_DBML)serializer.Deserialize(new StringReader(xmlString));
我希望我理解得当。