根据 DTD,XmlNode 的有效子节点?

发布于 2024-08-27 10:49:55 字数 180 浏览 8 评论 0 原文

考虑一下:

我在一个(自建的)XML 编辑器中,并且即将向 XmlNode 添加一个 Child。 根据 DTD,我如何知道哪些类型的子项是有效的。

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

我该怎么办?

consider this:

I'm inside a (selfbuilt) XML Editor and am about to add a Child to an XmlNode.
How do I know which types of children are valid according to a DTD.

it's a behaviour like Intellisense.
I couldn't find any .NET classes for "parsing" the DTD.

How would i go about this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑梦风尘 2024-09-03 10:49:55

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

您确实得到了 Document.DocumentType.Entities,它告诉您 DTD 中定义了哪些通用实体(&something;),以及 Notations ,这在很大程度上是无用的,但 ElementsAttlists 则不然。虽然存在会保留此信息的 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, and Notations, which is largely useless, but not Elements or Attlists. 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 with System.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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文