Подтвердите XML с 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!");
        }

    }
}

1 ответ

Решение

Вам также необходимо включить обработку 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() };
Другие вопросы по тегам