首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dotNet根据Onix2.1DTD验证xml

使用dotNet根据Onix2.1DTD验证xml
EN

Stack Overflow用户
提问于 2015-01-07 07:28:21
回答 1查看 615关注 0票数 1

我正在尝试根据Onix2.1DTD验证XML提要。当我将生成的XML文件加载到XMLSpy中并根据DTD进行验证时,它告诉我提要是有效的。

当我尝试使用C#和XmlReader验证相同的文件时,我收到错误信息,即尽管之前已由第三方工具验证,但子节点无效。为了确保我使用XmlReader的代码能够正确地读取dtd并正确地进行验证,我需要做些什么?

这是我的代码。

代码语言:javascript
复制
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);
        });
EN

回答 1

Stack Overflow用户

发布于 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。您必须设置默认名称空间:

代码语言:javascript
复制
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解析:

代码语言:javascript
复制
var settings = new XmlReaderSettings
    {
        ValidationType = System.Xml.ValidationType.Schema,
        DtdProcessing = DtdProcessing.Ignore
    };
using(var reader = XmlReader.Create("path to xml file", settings, context)) { ... }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27809065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档