根据DTD,XmlNode的有效子项?

时间:2010-04-06 11:37:02

标签: c# xml dtd

考虑一下:

我在(自建)XML编辑器中,并准备将一个Child添加到XmlNode。 如何根据DTD了解哪些类型的儿童有效。

这是一种像Intellisense这样的行为。 我找不到任何用于“解析”DTD的.NET类。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

不幸的是,XmlDocument实现的DOM Level 1 Core标准不提供对DTD中的<!ELEMENT><!ATTLIST>声明的任何访问(内部子集,或者,如果配置为读取它,外部DTD)。

你会得到Document.DocumentType.Entities,它告诉你在DTD中定义了哪些一般实体(&something;),Notations,这在很大程度上是无用的,但不是ElementsAttlists。虽然存在可以保留这些信息的DOM,但我不知道.NET的任何内容(除非你想通过IronPython运行pxdom,这可能会有点痛苦,而且根本不会很快)并且没有集成的东西与System.Xml

你可以使用saxdotnet(看起来像saxdotnet中的ExpatReader.SetDeclHandlerForParsing)来接收declHandler以获取这些声明。无论是作为internalSubset / systemId DTD的单独解析过程,还是作为.NET自己的解析的替代,都可以手动转换XmlDocument中的事件流。