【发布时间】:2016-01-29 22:36:03
【问题描述】:
我有一个 C# 脚本,它根据 XSD 文档验证 XML 文档,如下所示:
static bool IsValidXml(string xmlFilePath, string xsdFilePath)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, xsdFilePath);
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Compile();
try
{
XmlReader xmlRead = XmlReader.Create(xmlFilePath, settings);
while (xmlRead.Read())
{ };
xmlRead.Close();
}
catch (Exception e)
{
return false;
}
return true;
}
在查看了许多 MSDN 文章和问题后,我已经编译了这里的解决方案。它确实正确地验证了 XSD 的格式是否正确(如果我弄乱了文件,则返回 false)并检查 XML 的格式是否正确(弄乱时也返回 false)。
我也尝试了以下方法,但效果完全相同:
static bool IsValidXml(string xmlFilePath, string xsdFilePath)
{
XDocument xdoc = XDocument.Load(xmlFilePath);
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, xsdFilePath);
try
{
xdoc.Validate(schemas, null);
}
catch (XmlSchemaValidationException e)
{
return false;
}
return true;
}
我什至从互联网上提取了一个完全随机的 XSD 并将其放入两个脚本中,并且它仍然可以在两个脚本中验证。我在这里错过了什么?
在 SSIS 作业中使用 .NET 3.5。
【问题讨论】:
-
您没有提供任何细节,但如果您使用随机模式验证 XML,那么这可能是意料之中的。如果文档在架构中没有任何匹配的元素,您将得到的最好的结果是警告。
-
检查 XML 文档中的名称空间是否与架构所针对的名称空间相匹配。发布您尝试验证的架构和 xml 文件的示例可能会有所帮助
-
@CharlesMager 看看你现在建议的副本,看起来很有希望,谢谢。
标签: c# xml validation xsd