剖析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处理,如果有什么总结的不好请多多指教,如果感兴趣的话关注本人一下

你可能感兴趣的:(xml)