根据 DTD,XmlNode 的有效子节点?
考虑一下:
我在一个(自建的)XML 编辑器中,并且即将向 XmlNode 添加一个 Child。 根据 DTD,我如何知道哪些类型的子项是有效的。
这是一种类似于 Intellisense 的行为。 我找不到任何用于“解析”DTD 的.NET 类。
我该怎么办?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不幸的是,
XmlDocument
实现的 DOM Level 1 核心标准不提供对和
声明的任何访问在 DTD 中(内部子集,或者,如果配置为读取它,则为外部 DTD)。
您确实得到了
Document.DocumentType.Entities
,它告诉您 DTD 中定义了哪些通用实体(&something;
),以及Notations
,这在很大程度上是无用的,但Elements
或Attlists
则不然。虽然存在会保留此信息的 DOM,但我不知道有任何 .NET 的 DOM(除非您想通过 IronPython 运行 pxdom,这可能会有点痛苦,而且一点也不快),而且没有任何集成与System.Xml
。您可以使用 saxdotnet .org/apidoc/org/xml/sax/ext/DeclHandler.html" rel="nofollow noreferrer">declHandler (看起来像 saxdotnet 中的 ExpatReader.SetDeclHandlerForParsing)来获取这些声明。可以作为internalSubset/systemId DTD 的单独解析过程,也可以作为.NET 自身解析的替代,手动转换XmlDocument 中的事件流。
Unfortunately, the DOM Level 1 Core standard which
XmlDocument
implements does not provide any access to<!ELEMENT>
and<!ATTLIST>
declarations in a DTD (internal subset or, if configured to read it, external DTD).You do get
Document.DocumentType.Entities
, which tells you what general entities (&something;
) were defined in the DTD, andNotations
, which is largely useless, but notElements
orAttlists
. Whilst there exist DOMs that will retain this information, I'm not aware of any for .NET (unless you want to go running pxdom through IronPython, which would probably be a bit of a pain and not at all fast) and nothing that integrates withSystem.Xml
.You could possibly hook up saxdotnet, using a declHandler (looks like eg. ExpatReader.SetDeclHandlerForParsing in saxdotnet) to pick up these declarations. Either as a separate parse process for the internalSubset/systemId DTD, or as a replacement for .NET's own parsing, converting the event stream in an XmlDocument manually.