为什么此XSD验证会导致错误

时间:2016-06-08 06:48:44

标签: c# xml validation xsd

在将XML文件导入其他程序之前,我已经有了一个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;
}

错误信息是(由我自己从德语翻译成英语):

  

此元素&#39; EMailAdress&#39;无效 - 价值   &#39; mayer_johann75@web.de'是因为他的数据类型   &#39; http://www.abcde.de/mhr/applicants/:EMailAdressType&#39;无效 -   模式限制失败..

当我从XSD文件中获取模式并使用Regex-Class直接尝试使用email-adress-string进行验证时,它是有效的...

有什么问题?

1 个答案:

答案 0 :(得分:0)

正如之前的评论所指出的,.Net以不同的方式解释w3c。对于.Net,它等效于[a-zA-Z0-9_],而对于XSD架构,\ w选项不包括下划线。只需用[A-Za-z0-9_]替换所有\ w,一切都应该没问题。