使用外部 DTD 验证 XML

Validate XML using external DTD

我正在尝试使用外部 dtd 文件验证我的 XML。这里是 XML header:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE CONTEXT SYSTEM "Data.dtd">
<CONTEXT>
...
</CONTEXT>

这是我的代码:

        // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        settings.ValidationType = ValidationType.DTD;
        settings.ValidationEventHandler += (sender, args) => Debug.WriteLine(args.Message);
        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create("Data.xml", settings);
        // Parse the file. 
        while (reader.Read());

在 运行 之后,我收到的这段代码导致很多错误看起来都一样:

The 'CONTEXT' element is not declared.

我试图为明显不存在的文件更改 doctype 中的文件名,但结果得到了同样的错误。请告诉我我哪里弄错了?

我可以重现该问题,作为修复我建议设置

settings.XmlResolver = new XmlUrlResolver();

这样看来,外部DTD文件被抓取了,好像没有。 MSDN 上的文档说:"Starting with the .NET Framework 4.5.2, this setting has a default value of null."。看来,你需要明确地创建它。