Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据DTD的XmlNode的有效子级?_C#_Xml_Dtd - Fatal编程技术网

C# 根据DTD的XmlNode的有效子级?

C# 根据DTD的XmlNode的有效子级?,c#,xml,dtd,C#,Xml,Dtd,考虑这一点: 我在一个(自建)XML编辑器中,准备向XmlNode添加一个子节点。 如何根据DTD知道哪些类型的子项有效。 这是一种类似智能感知的行为。 我找不到任何用于“解析”DTD的.NET类 我该怎么做呢?不幸的是,XmlDocument实现的DOM级别1核心标准不提供对DTD中的和声明的任何访问(内部子集,或者,如果配置为读取外部DTD) 您确实得到了Document.DocumentType.Entities,它告诉您DTD中定义了哪些通用实体(&something;),以及符号,它们

考虑这一点:

我在一个(自建)XML编辑器中,准备向XmlNode添加一个子节点。 如何根据DTD知道哪些类型的子项有效。

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


我该怎么做呢?

不幸的是,
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是一种非常古老和讨厌的验证方法。。。如果您可以迁移到一种更现代的模式语言,那肯定是更好的选择。