我正在使用以下代码来再次验证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
如果我尝试在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有什么特别之处呢?