К сожалению, стандарт DOM Level 1 Core, который реализует XmlDocument
, не предоставляет никакого доступа к объявлениям <!ELEMENT>
и <!ATTLIST>
в DTD (внутреннем подмножестве или, если настроено для чтения, внешнем DTD).
Вы получаете Document.DocumentType.Entities
, который сообщает вам, какие общие сущности (&something;
) были определены в DTD, и Notations
, который в значительной степени бесполезен, но не Elements
или Attlists
. Хотя существуют DOM, которые будут хранить эту информацию, я не знаю ни одного для .NET (если вы не хотите запускать pxdom через IronPython, что, вероятно, будет немного болезненно и совсем не быстро) и ничего, что интегрирует с System.Xml
.
Возможно, вы могли бы подключить saxdotnet , используя declHandler (похоже, например, ExpatReader.SetDeclHandlerForParsing в saxdotnet), чтобы подобрать эти объявления. Либо в качестве отдельного процесса анализа для DTS internalSubset / systemId, либо в качестве замены для собственного синтаксического анализа .NET, преобразуя поток событий в XmlDocument вручную.