【发布时间】:2015-03-11 10:36:44
【问题描述】:
在我的工作中,我们加载 excel 文件并将它们保存在数据库中。
这基本上是流程:
我们将数据从 Excel 文件导入 DataSet,其中每个工作表都加载到 DataSet 内自己的 DataTable 中。填充 DataDet 后,我想验证 DataSet 中的数据,比如说第一个 DataTable。我通过使用 DataTable 类的 WriteXml() 方法从 DataTable 中获取 xml,并将此 xml 加载到 XDocument 中。然后,我将 XDocument 类的 Validate() 方法与预定义的 xsd 一起使用,该 xsd 被加载到 XmlSchemaSet 对象中。
问题是excel中的数据存储格式和xsd中dateTime的格式不同。
我们得到的 Excel 文件的日期时间列格式如下:'12/01/2015 12:44:45',而 xsd 中的日期时间格式应该是这样的:'2015-01- 12T12:44:45'
是否可以在 xsd 文件中定义自定义日期时间格式?
例如,我希望它不是 '2015-01-12T12:44:45',而是 '12/01/2015 12:44:45' strong>,所以我的 xml 元素看起来像这样:
<createDate>12/01/2015 12:44:45>/createDate>
此外,我不介意时间部分是否会被完全忽略。
另外,我需要的另一种自定义xsd格式是这样的:378,216.00
是否可以在我的 xsd 文件中定义它?
这是我们验证从数据表中检索到的 xml 的代码
public string[] ValidateExcelFromXsdFile(string schemaUri)
{
_validationErrors.Clear();
var schemas = new XmlSchemaSet();
schemas.Add("", schemaUri);
var doc = XDocument.Parse(GetXml(_dataSetFromExcel.Tables[0]));
doc.Validate(schemas, (sender, args) => _validationErrors.Add(args.Message));
return _validationErrors.ToArray();
}
【问题讨论】:
-
您确实希望 C# 代码序列化/导出以编写这种特殊的 dateTimeFormat,对吗?在这种情况下,请添加您的源代码。如果我误解了你,请澄清。
-
不,我很抱歉,我不是这个意思。我将数据从 Excel 文件导入到 DataSet 中,其中每个工作表都加载到 DataSet 内自己的 DataTable 中。填充 DataDet 后,我想验证 DataSet 中的数据,比如说第一个 DataTable。我通过使用 DataTable 类的 WriteXml() 方法从 DataTable 中获取 xml,并将此 xml 加载到 XDocument 中。然后,我将 XDocument 类的 Validate() 方法与预定义的 xsd 一起使用,该 xsd 被加载到 XmlSchemaSet 对象中。
-
这里是代码
public string[] ValidateExcelFromXsdFile(string schemaUri) { _validationErrors.Clear(); var schemas = new XmlSchemaSet(); schemas.Add("", schemaUri); var doc = XDocument.Parse(GetXml(_dataSetFromExcel.Tables[0])); doc.Validate(schemas, (sender, args) => _validationErrors.Add(args.Message)); return _validationErrors.ToArray(); } -
请edit您的问题添加信息,尤其是代码。放在 cmets 里就意味着很容易漏掉,也不能正确格式化。