• 解决了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();
                }
  • 相关阅读:
    牛客-Python-字符流中第一个不重复的字符
    牛客网-python-表示数值的字符串
    牛客网-(标星)正则表达式的匹配
    牛客网-构建乘积数组
    牛客网-和为S的两个数字
    new code-和为S的连续正数序列
    newcode-平衡二叉树
    Reinforcement Learning学习笔记|Deep Q-learning算法
    Reinforcement Learning学习笔记|Q-learning算法
    C++|重拾|笔记20190307
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/350867.html
Copyright © 2020-2023  润新知