c# - 使用 dtd 验证 xml

标签 c# xml validation dtd

我只是想看看 xml 是否对 dtd 有效,如果无效则打印错误消息。我写了这个验证器。问题是它始终打印该文档是有效的,即使它是无效的。感谢您的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Schema; 


namespace XMLValidator
{
    class Program
    {
        static void Main()
        {


            var messages = new StringBuilder();
            var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD };
            settings.ValidationEventHandler += (sender, args) => messages.AppendLine(args.Message);
            var reader = XmlReader.Create("file.xml", settings);


            if (messages.Length > 0)
            {
                Console.WriteLine("Document is not valid!");
            }
            else
                Console.WriteLine("Document is valid!");
        }

    }
}

最佳答案

还需要开启DTD处理

var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD, DtdProcessing = DtdProcessing.Parse };

当然你需要使用例如解析文件

while (reader.Read()) {}

此外,如果 DTD 在外部文件中,则也设置

var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD, DtdProcessing = DtdProcessing.Parse, XmlResolver = new XmlUrlResolver() };

关于c# - 使用 dtd 验证 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361866/

相关文章:

c# - 获取 DataTemplate 中的元素

c# - 如何使用相同的通用方法来验证不同类型

java - Coldfusion 读取不带扩展名的 XML HTTP

xml - 使用 XSLT 剥离 XML 中除一个元素之外的所有元素

java - 枚举参数的编译时验证

c# - 在 C# 中编写等效的 IsDate()?

c# - Asp.Net C# 调用单个验证器

c# - 'pure' MVVM 中的 MenuItem 键盘快捷键?

c# - 旋转像素阵列的好方法是什么?

java - wsimport : unable to rename the package name