如何使用 XmlNodeReader
此示例阐释如何创建和使用 XmlNodeReader。XmlNodeReader 是一种读取器,可提供对 XmlNode 中的 XML 数据的快速、非缓存和只进的访问。它能够读取整个 XML DOM 树,或只从子树读取。然而,XmlNodeReader 不支持文档类型定义 (DTD) 或架构验证,因此不验证它读取的 XML。
此示例将 books.xml 加载到 XmlDocument 中,然后使用 XmlNodeReader 获取每个节点以及它们各自的值,以将这些值显示在屏幕上。
[运行示例] | [查看源代码] |
创建 XmlDocument 并将 books.xml 文件加载到其中后,该示例创建一个 XmlNodeReader,它可选择 XmlDocument 中的单个节点。该示例将此 XmlNodeReader 传递到 FormatXml 函数,该函数将节点数据输出到屏幕上。然后,该示例创建另一个 XmlNodeReader,它选择不同的节点以输出到屏幕上。
XmlDocument myXmlDocument = new XmlDocument(); myXmlDocument.Load (arg); ... XmlNodeReader myXmlNodeReader = new XmlNodeReader (myXmlDocument.SelectSingleNode("bookstore/book[3]")); FormatXml (myXmlNodeReader); ... myXmlNodeReader = new XmlNodeReader (myXmlDocument.SelectSingleNode("bookstore/book[2]")); myXmlNodeReader.Read(); Console.WriteLine (myXmlNodeReader.ReadInnerXml()); |
||
C# | VB |
该部分示例仅使用 XmlNodeReader 的 Read 方法读取每个节点,然后根据节点类型,使用 Format 函数将节点输出到屏幕上。
private static void FormatXml (XmlNodeReader reader) { while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.ProcessingInstruction: Format (reader, "ProcessingInstruction"); break; case XmlNodeType.DocumentType: Format (reader, "DocumentType"); break; case XmlNodeType.Document: Format (reader, "Document"); break; case XmlNodeType.Comment: Format (reader, "Comment"); break; case XmlNodeType.Element: Format (reader, "Element"); while(reader.MoveToNextAttribute()) { Format (reader, "Attribute"); } break; case XmlNodeType.Text: Format (reader, "Text"); break; case XmlNodeType.Whitespace: Format (reader, "Whitespace"); break; } } } // Format the output private static void Format(XmlNodeReader reader, String NodeType) { // Format the output for (int i=0; i < reader.Depth; i++) { Console.Write('\t'); } Console.Write(NodeType + "<" + reader.Name + ">" + reader.Value); Console.WriteLine(); } |
||
C# | VB |
摘要
- XmlNodeReader 是提供对 XmlNode 中的 XML 数据进行快速、非缓存和只进的访问的读取器。
- 因为也可使用 XmlDocument 中的任何 XmlNode 构造 XmlNodeReader,所以 XmlNodeReader 可提供只读取给定节点的子树的读取器。