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();
                }
  • 相关阅读:
    016.CI4框架CodeIgniter数据库操作之:Insert插入一条数据
    015.CI4框架CodeIgniter数据库操作之:Query带参数查询数
    014.CI4框架CodeIgniter数据库操作之:查询数据库,并让数据以对象的方式返回查询结果
    013.CI4框架CodeIgniter数据库操作之:查询数据库,并让数据以数组的方式返回查询结果
    012.CI4框架CodeIgniter, 加载并调用自己的Libraries库
    033.SAP上查看IDOC接口,PI接口查不到的日志记录,可能在IDOC接口日志里面
    032.SAP上用户无法打开PPE模块,查看并开通用户的PPE权限
    011.CI4框架CodeIgniter, 获取查看用户的IP地址和浏览器信息
    010.CI4框架CodeIgniter, autoload自动加载自己的helper函数类
    009.CI4框架CodeIgniter, 网页访问GET的URL参数获取,分段输出URL参数
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/350867.html
Copyright © 2011-2022 走看看