• 解决了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();
                }
  • 相关阅读:
    通过反射获取Android通知栏高度
    Android 的EditText实现不可编辑
    Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(图文)
    eclipse、myeclipse,svn插件subclipse 忘记密码的解决方法(win7、win8、xp)
    Eclipse 基于接口编程的时候,快速跳转到实现类的方法(图文)
    WIN7、WIN8 右键在目录当前打开命令行Cmd窗口(图文)
    eclipse,myeclipse开发环境下,maven远程部署到tomcat7服务器(图文)
    python之路——博客目录
    生成器和协程 —— 你想知道的都在这里了
    python3.7导入gevent模块报错的解决方案
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/350867.html
Copyright © 2020-2023  润新知