我正在使用c#并尝试复制我之前在VB6中编写的一些功能。
应该很简单:我有包含此语句的XML文件: 的xsi:noNamespaceSchemaLocation = “架构\ mySchema.xsd”
我希望能够使用XMLDocument来解析和验证XML 针对上面引用的模式文件的文件。
我不应该单独提供路径和文件名,因为它们是 已包含在XML文件中。
如果可能,我不想使用XMLReader。
我之前的VB6代码可以执行此操作并生成相应的错误 如果模式文件不存在/无法找到,或者XML文件的内容未通过验证。
如何在C#中完成此操作?
答案 0 :(得分:1)
好的,在上面的评论之后,这基本上就是我最终的结果 我不想使用XmlReader:
...
xmlString = System.IO.File.ReadAllText("myXMLDoc.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.CloseInput = true;
settings.ValidationEventHandler += ValidationHandler;
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings |
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ProcessSchemaLocation |
XmlSchemaValidationFlags.ProcessInlineSchema;
StringReader r = new StringReader(xmlString);
XmlReader validatingReader = XmlReader.Create(r, settings);
XmlDoc = new XmlDocument();
XmlDoc.Load(validatingReader);
...
private static void ValidationHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Error || e.Severity == XmlSeverityType.Warning)
{
validationErr += "XML Parse Error Line: " +
e.Exception.LineNumber + " Position: " +
e.Exception.LinePosition + " Message: " +
e.Exception.Message + Environment.NewLine;
}
}
同样,如果有最小化上述代码的方法,我会感谢一些建议。
我还没有考虑过XDocument作为XmlDocument的替代品。