【问题标题】:Validating xml against the Onix 2.1 dtd with dotNet使用 dotNet 针对 Onix 2.1 dtd 验证 xml
【发布时间】:2015-03-04 17:37:19
【问题描述】:

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

当我尝试使用 C# 和 XmlReader 验证同一个文件时,我收到错误,即子节点无效,尽管之前已由第 3 方工具验证。为了确保使用 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);
        });

【问题讨论】:

    标签: c# dtd xmlreader xml-validation onix


    【解决方案1】:

    问题可能出在 DTD 上。有一个在线 DTD 和 Schema 验证器,您可以尝试...

    http://www.validome.org/grammar/

    您可以尝试针对 XSD 进行验证。 Onix 2.1 xsd 可在http://www.editeur.org/15/Previous-Releases/#R%202.1%20Downloads 获得。您必须设置默认命名空间:

    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)) { ... }
    

    【讨论】:

      猜你喜欢
      • 2012-08-21
      • 2011-06-14
      • 1970-01-01
      • 2014-04-18
      • 2011-01-30
      • 2010-11-19
      • 2016-09-18
      • 2010-11-08
      • 2010-12-28
      相关资源
      最近更新 更多