• 剖析XML(第二讲)


    在前一天说到了写入XML,这一次我总结了一下读取XML

      读取XML有两种方式:

        1.你可以用XMLDocument、XPathNavigator、或XDocument类一次性将文档加载到内存中。这3个类中,只有XPathNavigator是只读的。

        2.使用XmlTextReader类(是基于流的读取器),你可以每次读取文档的一个节点。

      基于流的方式减少了内存负担并且通常更高效。如果要对XML文档执行一个耗时的任务,且知道其他用户可能也要访问该文件时,你可能会选择在内存中操作的方式以减少文件打开的时间

      虽然使用XmlTextReader对象读取XML文件时最简单的方法,但他也只提供了最少的灵活性。文件以顺序读取,不能够处理内存中的XML那样自由的移动到父、子、兄弟节点。相反,每次从流中读取一个节点。通常,需要编写一个活多个嵌入的循环以深入XML文档中的元素,直到找到要找的内容。

      下面的代码首先在XmlTextReader对象里加载源文件,然后开始一个每次移动一个文档节点的循环。为了从一个节点移动到另一个节点,需要调用XmlTextReader.Reader()方法。这个方法在移动到左后一个节点时返回true。DataReader类也使用了类似的策略,它从数据区得查询结果。

    代码如下:

    private void ReadXML()
        {
            //获取路径
            string xmlFile = Server.MapPath("DvdList.xml");
            //创建XmlTextReader对象
            XmlTextReader reader = new XmlTextReader(xmlFile);
            StringBuilder str = new StringBuilder();
            //读取数据
            while (reader.Read()) {
                switch (reader.NodeType) { 
                    case XmlNodeType.XmlDeclaration://xml声明
                        str.Append("XML Declaration:<b>");
                        str.Append(reader.Name);//获取节点的限定名
                        str.Append(" ");
                        str.Append(reader.Value);//获取节点的文本值
                        str.Append("</b><br/>");
                        break;
                    case XmlNodeType.Element://元素类型
                        str.Append("Element:<b>");
                        str.Append(reader.Name);
                        str.Append("</b><br/>");
                        break;
                    case XmlNodeType.Text:
                        str.Append("- value:<b>");
                        str.Append(reader.Value);
                        str.Append("</b><br/>");
                        break;
                }
                if (reader.AttributeCount > 0) {//判断是否有属性
                    while (reader.MoveToNextAttribute()) {
                        str.Append("- Attribute:<b>");
                        str.Append(reader.Name);
                        str.Append("</b> Value:<b>");
                        str.Append(reader.Value);
                        str.Append("</b><br/>");
                    }
                }
            }
            reader.Close();
            this.Label1.Text = str.ToString();
        }

    下一次总结内存中的xml处理,如果有什么总结的不好请多多指教,如果感兴趣的话关注本人一下

  • 相关阅读:
    poj 3767 I Wanna Go Home (有限制的最短路)
    gcd及扩展gcd
    2012 多校联合比赛第二场
    大整数 问题
    从数据流动看数据结构
    vc/vs常用快捷键
    函数重载
    mysql相关
    xml理解
    编译相关
  • 原文地址:https://www.cnblogs.com/guozhe/p/2566174.html
Copyright © 2020-2023  润新知