代码示例本来很好,可以确定你在做什么,但是我可以做出一些假设,因为我在同一个地方。我遇到了Using XSDs with includes,并调整了我接受的答案。
问题是,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
}
什么是整个例外(`ex.ToString()`)?它可能会告诉你行号和位置,甚至可能是文件名。 – 2011-01-21 23:31:28