Подтвердите 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() };