我有一个XSD来验证XML文件,然后再将其导入到其他程序中 . 它已经工作了一个星期 . 但昨天验证失败了,我不知道为什么 .
在验证电子邮件地址时发生错误 . 这是对XSD文件中的电子邮件地址的验证:
<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'无效 - 值'mayer_johann75@web.de'是因为他的数据类型'http://www.abcde.de/mhr/applicants/:EMailAdressType'无效 - 模式限制失败..
当我从XSD文件中获取模式并直接使用Regex-Class尝试使用email-adress-string进行验证时,它是有效的...
怎么了?
1 回答
正如之前的评论所指出的那样,.Net以不同的方式解释w3c . 对于.Net,它等效于[a-zA-Z0-9_],而对于XSD架构,\ w选项不包括下划线 . 只需用[A-Za-z0-9_]替换所有\ w,一切都应该没问题 .