действительные потомки XmlNode в соответствии с DTD? - PullRequest
1 голос
/ 06 апреля 2010

учитывайте это:

Я в (самостоятельно построенном) редакторе XML и собираюсь добавить дочерний элемент в XmlNode. Как узнать, какие типы детей являются действительными в соответствии с DTD.

это поведение, подобное Интеллисенс. Я не смог найти классов .NET для "разбора" DTD.

Как мне поступить?

1 Ответ

0 голосов
/ 06 апреля 2010

К сожалению, стандарт 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 вручную.

...