考虑一下:
我在(自建)XML编辑器中,并准备将一个Child添加到XmlNode。 如何根据DTD了解哪些类型的儿童有效。
这是一种像Intellisense这样的行为。 我找不到任何用于“解析”DTD的.NET类。
我该怎么做?
答案 0 :(得分:0)
不幸的是,XmlDocument
实现的DOM Level 1 Core标准不提供对DTD中的<!ELEMENT>
和<!ATTLIST>
声明的任何访问(内部子集,或者,如果配置为读取它,外部DTD)。
你会得到Document.DocumentType.Entities
,它告诉你在DTD中定义了哪些一般实体(&something;
),Notations
,这在很大程度上是无用的,但不是Elements
或Attlists
。虽然存在可以保留这些信息的DOM,但我不知道.NET的任何内容(除非你想通过IronPython运行pxdom,这可能会有点痛苦,而且根本不会很快)并且没有集成的东西与System.Xml
。
你可以使用saxdotnet(看起来像saxdotnet中的ExpatReader.SetDeclHandlerForParsing)来接收declHandler以获取这些声明。无论是作为internalSubset / systemId DTD的单独解析过程,还是作为.NET自己的解析的替代,都可以手动转换XmlDocument中的事件流。