XSD验证总是通过

时间:2015-05-19 02:10:03

标签: c# xml validation xsd

我正在使用以下代码来再次验证XSD:

public static bool IsValidXmlOld(string xmlFilePath, string xsdFilePath)
{
    if (File.Exists(xmlFilePath) && File.Exists(xsdFilePath))
    {
        try
        {
            XDocument xdocXml = XDocument.Load(xmlFilePath);
            var schemas = new XmlSchemaSet();
            schemas.Add(null, xsdFilePath);

            Boolean result = true;
            xdocXml.Validate(schemas, (sender, e) =>
            {
                result = false;
            });

            return result;
        }

        catch (Exception ex)
        {
            // Logging logic + error handling logic
            throw new Exception(ex.Message);
        }
    }

    throw new Exception("Either the Schema or the XML file does not exist Please check");
}

由于某种原因,即使XML对给定的XSD无效,它也总是返回true。我从以下链接中选择了此代码:

Validate XML against XSD in a single method。听起来像result = false,即使xml完全无效,也永远不会被调用。

我有一对有效且无效的XML违背特定的XSD

  1. Valid XML
  2. XSD
  3. Invalid XML
  4. 如果我尝试在This网站上验证它们,那么有效的验证测试将通过无效的验证测试但是无效的XML 失败测试。但是,上面的代码总是传递XML。

    同时,当我使用如下的基本XML时,它无法通过验证:

     XDocument doc2 = new XDocument(
                            new XElement("Root",
                                new XElement("Child1", "content1"),
                                new XElement("Child3", "content1")
                            )
                        );
    

    有以下错误:

    The 'Root' element is not declared.: {0}
    

    现在,它清楚地表明代码并非完全无法验证失败。但是,当Invalid XML明显失败时代码传递特定XML的3. This Site有什么特别之处呢?

0 个答案:

没有答案