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();
                }
  • 相关阅读:
    eclipse下切换svn用户
    Netty实现服务端客户端长连接通讯及心跳检测
    Spring Batch系列总括(转载)
    SQL中的Null深入研究分析
    MySQL报错“1366
    Memcache学习php完整一例
    Memcache学习笔记
    递归和迭代区别
    解决textarea 输出有空格问题
    解决mysql安装出现error Nr.1045问题
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/350867.html
Copyright © 2011-2022 走看看