C# 根据DTD的XmlNode的有效子级?
考虑这一点: 我在一个(自建)XML编辑器中,准备向XmlNode添加一个子节点。 如何根据DTD知道哪些类型的子项有效。 这是一种类似智能感知的行为。 我找不到任何用于“解析”DTD的.NET类C# 根据DTD的XmlNode的有效子级?,c#,xml,dtd,C#,Xml,Dtd,考虑这一点: 我在一个(自建)XML编辑器中,准备向XmlNode添加一个子节点。 如何根据DTD知道哪些类型的子项有效。 这是一种类似智能感知的行为。 我找不到任何用于“解析”DTD的.NET类 我该怎么做呢?不幸的是,XmlDocument实现的DOM级别1核心标准不提供对DTD中的和声明的任何访问(内部子集,或者,如果配置为读取外部DTD) 您确实得到了Document.DocumentType.Entities,它告诉您DTD中定义了哪些通用实体(&something;),以及符号,它们
我该怎么做呢?不幸的是,
XmlDocument
实现的DOM级别1核心标准不提供对DTD中的
和
声明的任何访问(内部子集,或者,如果配置为读取外部DTD)
您确实得到了Document.DocumentType.Entities
,它告诉您DTD中定义了哪些通用实体(&something;
),以及符号
,它们基本上是无用的,但不是元素
或附件
。虽然存在能够保留此信息的DOM,但我不知道有任何for.NET(除非您想通过IronPython运行pxdom,这可能有点麻烦,而且一点也不快),并且没有任何东西能够与System.Xml
集成
您可以使用连接(类似于saxdotnet中的ExpatReader.setdeclhanderforparsing)来获取这些声明。要么作为internalSubset/systemId DTD的单独解析过程,要么作为.NET自身解析的替代,手动转换XmlDocument中的事件流。是的,我注意到Document.DocumentType没有任何帮助。但这似乎很奇怪。XmlReader如何根据DTD进行验证?还没有时间启动Reflector查看…不知道,但它似乎不是公开提供的API的一部分。(不幸的是,XML解析器通常不提供对DTD声明的访问。)我选择xsd!看起来更好,.net确实支持我想要的东西!是的,DTD是一种非常古老和讨厌的验证方法。。。如果您可以迁移到一种更现代的模式语言,那肯定是更好的选择。