在我的工作中,我们加载excel文件并将其保存在数据库中
这基本上就是流程:
我们将数据从Excel文件导入DataSet,其中每个工作表都加载到DataSet内部自己的DataTable中。在填充DataDet之后,我想验证DataSet中的数据,让我们说出第一个DataTable。我通过使用DataTable类的WriteXml()方法从DataTable获取xml并将此xml加载到XDocument中。然后,我使用XDocument类的Validate()方法和预定义的xsd,该方法被加载到XmlSchemaSet对象中。
问题是excel中的数据存储的格式与xsd中的dateTime格式不同。
我们得到的Excel文件的日期时间列格式如下:< 12/01:15 12:44:45' ,而xsd中的dateTime格式应如下所示: ' 2015-01-12T12:44:45'
是否可以在xsd文件中定义自定义dateTime格式?
例如,我希望' 12/01/2015取代' 2015-01-12T12:44:45' 12:44:45' ,所以我的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();
}
答案 0 :(得分:0)
您可以使用正则表达式以“dd / mm / yyyy hh:mm:ss”格式定义字符串的模式,但结果值不是xs:dateTime,并检查完整有效性(跳跃年等等)是一个噩梦(它可以做到,但会产生一个约一英里长的正则表达式。)
此处更好的解决方案可能是transform-then-validate模式,您可以在验证之前预先处理输入文档(标准XSD格式)。如果选择,您甚至可以在预处理阶段进行一些验证。
Saxon模式处理器有一个预处理方面,允许您在模式处理之前声明一些值的重新排列,这正是您在这里所需要的(对于您的两个用例),但不幸的是它不是标准的。
答案 1 :(得分:-1)
检查此网站 - 您有DateTime数据类型http://www.w3schools.com/schema/schema_dtypes_date.asp
日期和时间数据类型段落也允许您根据需要调整规则。