我正在尝试根据Onix2.1DTD验证XML提要。当我将生成的XML文件加载到XMLSpy中并根据DTD进行验证时,它告诉我提要是有效的。
当我尝试使用C#和XmlReader验证相同的文件时,我收到错误信息,即尽管之前已由第三方工具验证,但子节点无效。为了确保我使用XmlReader的代码能够正确地读取dtd并正确地进行验证,我需要做些什么?
这是我的代码。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(delegate(object sender, ValidationEventArgs args)
{
isXmlValid = false;
xmlValMsg.AppendLine(args.Message);
});发布于 2015-01-07 11:33:32
问题可能出在DTD上。有一个在线的DTD和Schema验证器,你可以尝试一下……
http://www.validome.org/grammar/
您可以尝试针对XSD进行验证。http://www.editeur.org/15/Previous-Releases/#R%202.1%20Downloads上提供了Onix 2.1xsd。您必须设置默认名称空间:
var nt = new NameTable();
var ns = new XmlNamespaceManager(nt);
ns.AddNamespace(string.Empty, "http://www.editeur.org/onix/2.1/reference");
var context = new XmlParserContext(null, ns, null, XmlSpace.None);加载xml时,请关闭DTD解析:
var settings = new XmlReaderSettings
{
ValidationType = System.Xml.ValidationType.Schema,
DtdProcessing = DtdProcessing.Ignore
};
using(var reader = XmlReader.Create("path to xml file", settings, context)) { ... }https://stackoverflow.com/questions/27809065
复制相似问题