为什么这个 XSD-验证会导致错误
Why does this XSD-validation lead to an error
我有一个 XSD 来验证 XML 文件,然后再将其导入其他程序。它已经工作了 1 周。但是昨天验证失败,我不知道为什么。
验证电子邮件地址时发生错误。这是 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# 方法,用于根据 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;
}
错误信息是(由我自己从德语翻译成英语):
This element 'EMailAdress' is not valid - The value
'mayer_johann75@web.de' is because of his datatype
'http://www.abcde.de/mhr/applicants/:EMailAdressType' not valid --
Pattern-restriction failed..
当我从 XSD 文件中获取模式并尝试直接使用 Regex-Class 从电子邮件地址字符串进行验证时,它是有效的...
怎么了?
正如前面的评论所指出的,.Net 对 \w 的解释与 w3c 不同。对于 .Net,它相当于 [a-zA-Z0-9_] 而对于 XSD 模式,\w 选项不包含下划线。只需将所有 \w 替换为 [A-Za-z0-9_] ,一切都应该没问题。
我有一个 XSD 来验证 XML 文件,然后再将其导入其他程序。它已经工作了 1 周。但是昨天验证失败,我不知道为什么。
验证电子邮件地址时发生错误。这是 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# 方法,用于根据 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;
}
错误信息是(由我自己从德语翻译成英语):
This element 'EMailAdress' is not valid - The value 'mayer_johann75@web.de' is because of his datatype 'http://www.abcde.de/mhr/applicants/:EMailAdressType' not valid -- Pattern-restriction failed..
当我从 XSD 文件中获取模式并尝试直接使用 Regex-Class 从电子邮件地址字符串进行验证时,它是有效的...
怎么了?
正如前面的评论所指出的,.Net 对 \w 的解释与 w3c 不同。对于 .Net,它相当于 [a-zA-Z0-9_] 而对于 XSD 模式,\w 选项不包含下划线。只需将所有 \w 替换为 [A-Za-z0-9_] ,一切都应该没问题。