zoukankan      html  css  js  c++  java
  • 解决了XMLTextReader的用法的一个难题,EndElement

    如下,CodeGuru或者CodeProject上找到的例子都没有处理 像这样的情形 :
    <a name="test" />  就是没有 </a>标签的情形,这时候处理a元素是不会碰到 EndElement的。
    这里做了一个处理,即判断其深度。
    XmlTextReader reader = null;
                
    try
                
    {
                    reader 
    = new XmlTextReader(streamReader);
                    startDocument(); 
    //开始分析

                    
    int dept = -1;
                    
    while (reader.Read())
                    
    {
                        
    switch (reader.NodeType)
                        
    {                        
                            
    case XmlNodeType.Element:
                                Hashtable attributes 
    = new Hashtable();
                                
    string strURI = reader.NamespaceURI;
                                
    string strName = reader.Name;
                                
    if (reader.HasAttributes)
                                
    {
                                    
    for (int i = 0; i < reader.AttributeCount; i++)
                                    
    {
                                        reader.MoveToAttribute(i);
                                        attributes.Add(reader.Name, reader.Value);
                                    }

                                }

                                startElement(strURI, strName, strName, attributes);
                                
    if(dept != -1 && reader.Depth <= dept)                        //处理 "/>"的标签
                                    endElement(string.Empty, reader.Name, string.Empty);
                                dept 
    = reader.Depth;
                                
    break;
                            
    case XmlNodeType.EndElement:
                                endElement(
    string.Empty, reader.Name, string.Empty);
                                
    break;
                            
    case XmlNodeType.Text:
                                characters(reader.Value);
                                
    break;
                            
    default:
                                
    break;
                        }

                    }

                    
    return (Namespace) objectStack.Pop();
                }

                
    catch (XmlException e)
                
    {
                    Console.WriteLine(
    "error occured: " + e.Message);
                }

                
    finally
                
    {
                    
    if(reader != null) reader.Close();
                }
  • 相关阅读:
    14. 最长公共前缀-字符串-简单
    13. 罗马数字转整数-字符串-简单
    12. 整数转罗马数字-字符串-中等难度
    48. 旋转图像-数组-中等难度
    6. Z 字形变换-字符串-中等难度
    39. 组合总和-dfs回溯-中等难度
    【STM32F407开发板用户手册】第23章 STM32F407的USART串口基础知识和HAL库API
    【STM32F429开发板用户手册】第22章 STM32F429的SysTick实现多组软件定时器
    【STM32F407开发板用户手册】第22章 STM32F407的SysTick实现多组软件定时器
    【STM32F429开发板用户手册】第21章 STM32F429的NVIC中断分组和配置(重要)
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/350867.html
Copyright © 2011-2022 走看看