如何在 C# 中使用 XmlTextReader 识别短标签?

Posted

技术标签:

【中文标题】如何在 C# 中使用 XmlTextReader 识别短标签?【英文标题】:How to identify short tags using XmlTextReader in C#? 【发布时间】:2011-04-25 22:52:43 【问题描述】:

下面给出的是读取和写入 XML 的示例代码。输出 XML 无效,因为它无法检测到像 "<test attrib="123" /> 这样的短标签。有什么方法可以使用 XmlTextReader 检测此类标签?

       while (reader.Read())
              switch (reader.NodeType)
                
                    case XmlNodeType.Element:
                        
                            writer.WriteStartElement(reader.Name);
                            writer.WriteAttributes(reader, false);
                            break;
                         
                    case XmlNodeType.Text:
                        writer.WriteString(reader.Value);
                        break;
                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        writer.WriteProcessingInstruction(reader.Name, reader.Value);
                        break;
                    case XmlNodeType.Comment:
                        writer.WriteComment(reader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteFullEndElement();
                        break;
                
          

【问题讨论】:

“短标签”有什么问题? 不确定你的意思。你能详细说明一下吗? “短标签”会导致什么问题? 【参考方案1】:

需要检查元素是否为空:

   case XmlNodeType.Element:
                                
           writer.WriteStartElement(reader.Name);
           writer.WriteAttributes(reader, false);
           if (reader.IsEmptyElement) writer.WriteEndElement();
           break;
        

【讨论】:

【参考方案2】:

我认为您正在寻找XmlTextReader.IsEmptyElement。当(且仅当)元素是自闭合元素时,它返回 true。请参阅this msdn page 了解更多信息。

【讨论】:

以上是关于如何在 C# 中使用 XmlTextReader 识别短标签?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# Compact Framework 中加速 XML 的解析(使用 XmlTextReader 和 XElement)?

找不到 XmlTextReader/XmlNodeType 命名空间,如何解决?

SAX 与 XmlTextReader - C# 中的 SAX

用C#读取XML文件,怎么可以循环读取

使用 C# 在 .net 中阅读 rss 提要的最佳方式 [关闭]

为啥 XmlReader 中的默认编码与 XmlTextReader 默认编码的行为不同?