XmlReader - 自关闭元素不会触发 EndElement 事件?

Posted

技术标签:

【中文标题】XmlReader - 自关闭元素不会触发 EndElement 事件?【英文标题】:XmlReader - Self-closing element does not fire a EndElement event? 【发布时间】:2010-09-19 11:20:21 【问题描述】:

我在 .NET 中使用 XmlReader 使用循环解析 XML 文件:

while (xml.Read()) 
   switch xml.NodeType 
     case XmlNodeType.Element:
      //Do something
     case XmlNodeType.Text:
      //Do something
     case XmlNodeType.EndElement:  
      //Do something
   

我想知道下面的 XML 代码不产生一些 EndElement 节点是否正常?请注意 /> 之前缺少的空格,但我认为这不是问题。

<date month="November" year="2001"/>
<zone name="xml"/>

是否有不同的 NodeType 或属性来指示自闭合元素?

【问题讨论】:

【参考方案1】:

不,您通过查看XmlReader.IsEmptyElement 来检查它。

在该属性的文档中:

对应的 EndElement 节点不是 为空元素生成。

【讨论】:

当我当前的NodeTypeStartElement 时,我如何区分&lt;element /&gt;&lt;element&gt;&lt;/element&gt;?对于这两种情况,IsEmptyElementtrue @BrianWarshaw:你会看到EndElement 节点是否存在,基本上......当你在StartElement 上时,我不知道有什么方法可以立即进行。 谢谢——事实证明我可能错了 IsEmptyElement 在这些情况下是真的。我盯着这个输出看太久了:-)

以上是关于XmlReader - 自关闭元素不会触发 EndElement 事件?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5 自定义指令触发包装到 *ngIf=false 中的元素

从xml构造自定义对象图

不会触发自定义事件

XmlReader 跳过相邻元素

如果没有空格分隔符,为啥 XmlReader 会跳过所有其他元素?

XMLReader 正在跳过元素