为什么这个XSD验证会导致错误
问题描述:
我有一个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字符串与正则表达式级直接验证,然后它是有效的...
有什么不对?
答
正如前面的评论所指出的,.Net对w3c的解释与w不同。对于.Net,它等同于[a-zA-Z0-9_],而对于XSD模式,\ w选项不包含下划线。只需用[A-Za-z0-9_]代替所有这些\ w,一切都应该没问题。
+0
这是解决方案。谢谢!!!! – hias116
我认为低分('_')导致问题。它不是\ w(单词字符)。我认为使用[ - + _。'](添加下划线)将解决问题。注意下划线被删除 – jdweng
同意,下划线不是一个单词字符。但是请注意,您需要知道Microsoft .NET XSD处理器没有实现W3C规范中定义的正则表达式,它有自己的解释。我不清楚它的规则是什么。 –