1

我想加载和读取一个 DTD 文件,我无法控制它的内容。这些 DTD 文件包含带有字符“-”的行:

<!ELEMENT Test-ITD - O(警告)>

因此以下代码在“-”位置失败

XmlReaderSettings settings = new XmlReaderSettings();
settings.CheckCharacters = false;
settings.DtdProcessing = DtdProcessing.Parse;
XmlReader reader = XmlReader.Create(strURL, settings);
XDocument xml = XDocument.Load(reader);

是否可以读取带有非法字符的 DTD?

4

1 回答 1

1

您的 DTD 似乎是为处理 SGML 而不是 XML 的系统设计的。很难说应该怎么做,但是 XML 库拒绝 DTD 也就不足为奇了。

- O这个元素声明的部分,,<!ELEMENT Test-ITD - O (warning) >提供“最小化参数”。这意味着可以省略元素的结束标记。这是一个在 SGML 中可用但在 XML 中不可用的特性。

评论中提到了第二个有问题的元素声明:

<!ELEMENT emphasis (#PCDATA | quantity | indexFlag | emphasis | subScript | superScript | captionGroup)+ >

由于有关“混合内容”的限制,此构造不起作用。+不能使用量词;只*允许。

参考:

于 2015-06-08T14:56:22.413 回答