2016-06-08 127 views
1

我有一个XSD在将XML文件导入到其他程序之前验证XML文件。它已经工作了一个星期。但昨天验证失败了,我不知道为什么。为什么这个XSD验证会导致错误

该错误发生在验证电子邮件地址。这是XSD文件的电子邮件ADRESS的验证:

<simpleType name="EMailAdressType"> 
    <annotation> 
     <documentation></documentation> 
    </annotation> 
    <restriction base="string"> 
     <pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"> 
     </pattern> 
     <minLength value="0"></minLength> 
     <maxLength value="64"></maxLength> 
     <pattern value="\s*"></pattern> 
    </restriction> 
</simpleType> 

这是我的C#-methode验证对一个XSD文件一个XML文件:

public static List<string> ValidateXMLAgainstXSD(string xmlPath, string xsdPath, string targetNamespace) 
{ 
    /// Rückgabeliste für die Validierungsfehler 
    List<string> validationErrors = new List<string>(); 

    /// Klasse für die XML-Schemas (XSD-Dateien) 
    XmlSchemaSet schemas = new XmlSchemaSet(); 
    /// Neues XML-Schema hinzufügen 
    schemas.Add(targetNamespace, xsdPath); 

    /// Das XML-Dokument, das validiert werden soll 
    XDocument custOrdDoc = XDocument.Load(xmlPath); 

    /// Validierungs-Vorgang 
    custOrdDoc.Validate(schemas, (o, e) => 
    { 
     validationErrors.Add(e.Message); 
    }); 

    /// Validierungsfehlerliste zurück geben 
    return validationErrors; 
} 

错误 - 消息(通过自己从德语到英语翻译):

这个元素“的emailadress”是无效的 - 值 “[email protected]”是因为他的数据类型 '的“无效 - 模式,限制失败..

当我把从XSD文件的模式,并尝试从电子邮件ADRESS字符串与正则表达式级直接验证,然后它是有效的...

有什么不对?

+0

我认为低分('_')导致问题。它不是\ w(单词字符)。我认为使用[ - + _。'](添加下划线)将解决问题。注意下划线被删除 – jdweng

+0

同意,下划线不是一个单词字符。但是请注意,您需要知道Microsoft .NET XSD处理器没有实现W3C规范中定义的正则表达式,它有自己的解释。我不清楚它的规则是什么。 –

回答

0

正如前面的评论所指出的,.Net对w3c的解释与w不同。对于.Net,它等同于[a-zA-Z0-9_],而对于XSD模式,\ w选项不包含下划线。只需用[A-Za-z0-9_]代替所有这些\ w,一切都应该没问题。

+0

这是解决方案。谢谢!!!! – hias116

相关问题