在xsd中定义dateTime格式

时间:2015-03-11 10:36:44

标签: c# .net xml xsd

在我的工作中,我们加载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();
    }

2 个答案:

答案 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

日期和时间数据类型段落也允许您根据需要调整规则。