• XML 读取器和编写器从流读取 XML


    如何从流读取 XML 数据

    此示例阐释如何使用 XmlTextReader 类从流读取 XML。流可能来自不同的源,如来自服务器、文件或 TextReader 的字节流。

    注意:此示例是如何从文件读取 XML主题的继续。

     
    VB ReadXmlStream.aspx

    [运行示例] | [查看源代码]

    XmlTextReader 有不同的构造函数,以指定 XML 数据的位置。此示例从流加载 XmlTextReader。流是作为数据(在这里是指 XML 数据)的源或目标的输入或输出设备的抽象表示形式。您可以写入流或读取流,流的最形象化表示是字节流。流可提供不依赖于设备的独立性,因此,如果当流的源更改时,它不要求程序也进行更改。

    下列示例代码创建 StringReader 类,它可构成 XML 字符串。由于该字符串是保留在内存中的纯字节流,您可以使用 XmlTextReader 将此字节流作为 XML 进行分析。此内存流没有特别指定的编码。然后,该示例创建一个 XmlTextReader,分析该流并显示所得到的 XML。

    StringReader stream;
                XmlTextReader reader = null;
                try
                {
                Console.WriteLine ("Initializing StringReader ...");
                stream = new StringReader("<?xml version='1.0'?>" +
                "<!-- This file represents a fragment of a book store inventory database -->" +
                "<bookstore>" +
                " <book genre=\"autobiography\" publicationdate=\"1981\" ISBN=\"1-861003-11-0\">" +
                "   <title>The Autobiography of Benjamin Franklin</title>" +
                "   <author>" +
                "       <first-name>Benjamin</first-name>" +
                "       <last-name>Franklin</last-name>" +
                "   </author>" +
                "   <price>8.99</price>" +
                " </book>" +
                " <book genre=\"novel\" publicationdate=\"1967\" ISBN=\"0-201-63361-2\">" +
                "   <title>The Confidence Man</title>" +
                "   <author>" +
                "       <first-name>Herman</first-name>" +
                "       <last-name>Melville</last-name>" +
                "   </author>" +
                "   <price>11.99</price>" +
                " </book>" +
                "  <book genre=\"philosophy\" publicationdate=\"1991\" ISBN=\"1-861001-57-6\">" +
                "   <title>The Gorgias</title>" +
                "   <author>" +
                "       <name>Plato</name>" +
                "   </author>" +
                "   <price>9.99</price>" +
                " </book>" +
                "</bookstore>");
                // Load the XmlTextReader from the stream
                reader = new XmlTextReader (stream);
                Console.WriteLine ("Processing ...");
                Console.WriteLine ();
                FormatXml(reader);
                }
                catch (Exception e)
                {
                Console.WriteLine ("Exception: {0}", e.ToString());
                }
                finally
                {
                Console.WriteLine();
                Console.WriteLine("Processing of stream complete.");
                // Finished with XmlTextReader
                if (reader != null)
                reader.Close();
                }
                
    C# VB  

    如果流是作为输入提供的,则 XmlTextReader 属性将对它进行解码,方法是将该流包括在 StreamReader 中,然后根据指定的 XML 编码调用 SwitchEncoding 属性。另外,XmlResolver 用于解析正确分析输入所需的外部资源,如文档类型定义 (DTD) 和架构。表示流的另一种方法是通过使用 StreamReader 类,该类实现读取字符流的读取器。下列代码示例说明加载名为 books.xml 的文件,然后使用 XmlTextReader 分析结果文件。

    StreamReader streamreader = new StreamReader ("books.xml");
                Console.WriteLine ("File books.xml read sucessfully ...");
                // Load the XmlTextReader from the StreamReader
                XmlTextReader xmlreader = new XmlTextReader (streamreader);
                
    C# VB  

    此示例中的 FormalXml 方法显示在当前节点是元素节点的情况下,如何使用 MoveToNextAttribute 方法移到属性节点。这使您不但可以访问该节点的名称和值属性,而且由于此时处于节点上下文中,您还可以获取某些属性,如属性当前的命名空间。下列代码示例还显示 Format 方法,该方法此时显示当前节点的名称和值。

    private static void FormatXml (XmlReader reader)
                {
                int piCount=0, docCount=0, commentCount=0, elementCount=0, attributeCount=0, textCount=0, whitespaceCount=0;
                while (reader.Read())
                {
                switch (reader.NodeType)
                {
                case XmlNodeType.ProcessingInstruction:
                Format (reader, "ProcessingInstruction");
                piCount++;
                break;
                case XmlNodeType.DocumentType:
                Format (reader, "DocumentType");
                docCount++;
                break;
                case XmlNodeType.Comment:
                Format (reader, "Comment");
                commentCount++;
                break;
                case XmlNodeType.Element:
                Format (reader, "Element");
                while(reader.MoveToNextAttribute())
                {
                Format (reader, "Attribute");
                }
                elementCount++;
                if (reader.HasAttributes)
                attributeCount += reader.AttributeCount;
                break;
                case XmlNodeType.Text:
                Format (reader, "Text");
                textCount++;
                break;
                case XmlNodeType.Whitespace:
                whitespaceCount++;
                break;
                }
                }
                // Display the Statistics
                Console.WriteLine ();
                Console.WriteLine("Statistics for stream");
                Console.WriteLine ();
                Console.WriteLine("ProcessingInstruction: {0}",piCount++);
                Console.WriteLine("DocumentType: {0}",docCount++);
                Console.WriteLine("Comment: {0}",commentCount++);
                Console.WriteLine("Element: {0}",elementCount++);
                Console.WriteLine("Attribute: {0}",attributeCount++);
                Console.WriteLine("Text: {0}",textCount++);
                Console.WriteLine("Whitespace: {0}",whitespaceCount++);
                }
                // Format the output
                private static void Format(XmlReader reader, String nodeType)
                {
                // Format the output
                Console.Write(reader.Depth + " ");
                Console.Write(reader.AttributeCount + " ");
                for (int i=0; i < reader.Depth; i++)
                {
                Console.Write('\t');
                }
                Console.Write(nodeType + "<" + reader.Name + ">" + reader.Value);
                Console.WriteLine();
                }
                
    C# VB  

    摘要

    1. 流是作为数据的源或目标的输入或输出设备的抽象表示形式。
    2. XmlTextReader 提供一些构造函数,用于从表示 URL 的字符串读取 XML,或从本地文件名、流或 TextReader 读取 XML。
    3. XmlTextReader 提供从文件名、流或 TextReader 读取 XML 的构造函数。
    4. 可使用 MoveToNextAttribute 方法访问属性节点,该方法使您可以确定属性节点的属性
  • 相关阅读:
    整理SVN代码-->正式环境的代码
    业务(1)
    在一个项目中跨领域调用接口的的实现
    一个java文件编译之后会产生多个class文件
    shutil模块
    shevle模块
    confiparser模块
    sys模块
    subprocess模块
    【ADO.NET】3、从TXT中导入数据到数据库
  • 原文地址:https://www.cnblogs.com/chorrysky/p/584467.html
Copyright © 2020-2023  润新知