Пример кода был бы неплох, чтобы быть уверенным в том, что вы делаете, но я могу сделать некоторые предположения, потому что я в том же месте.Я наткнулся на Использование XSD с включениями и адаптировал принятый ответ, чтобы он работал на меня.
Проблема в том, что XmlReader
, кажется, не знает, каков базовый путь длявключенная схема, если вы не укажете ее при Create()
в XmlReader
.Предполагая, что у вас есть путь к файлу XML, используйте XmlReader.Create(Stream input, XmlReaderSettings settings, String baseUri)
и укажите путь к файлу XML как baseUri
.
Пример:
using System.IO;
using System.Xml;
using System.Xml.Schema;
public void LoadXml(string path) {
XmlDocument doc = new XmlDocument();
XmlReader docReader;
XmlReaderSettings rdrOpts = new XmlReaderSettings();
rdrOpts.ValidationType = ValidationType.Schema;
rdrOpts.ValidationFlags = XmlSchemaValidationFlags.ProcessSchemaLocation;
try {
// This line is what you're looking for:
docReader = XmlReader.Create(new FileStream(path, FileMode.Open, FileAccess.Read), rdrOpts, Path.GetDirectoryName(path));
doc.Load(docReader);
} catch (System.Xml.Schema.XmlSchemaValidationException ex) {
//...
} //and catch any other relevant exceptions here, like System.IO.FileNotFoundException
}