У меня есть C# скрипт, который проверяет документ XML против XSD документа следующим образом:Проверка XML против XSD всегда возвращает истину
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 выключить интернет и бросили его в обоих сценариях, и он по-прежнему проверяет на обоих. Что мне здесь не хватает?
Использование .NET 3.5 в задании SSIS.
Вы не указали какие-либо особенности, но если вы проверяете XML со случайными схемами, это, вероятно, ожидается. Лучшее, что вы получите, это предупреждение, если в документе нет соответствующих элементов схемы. –
Возможный дубликат [Проверка правильности документов XML с XSD] (http://stackoverflow.com/questions/16755058/validating-xml-documents-with-xsd-correctly) –
Убедитесь, что пространство имен в XML-документе совпадает с тем, нацеленный на схему. Может быть полезно опубликовать пример схемы и xml-файлов, которые вы пытаетесь проверить. – SCB