C# 读取xml文档的例子

2009年1月23日星期五

C# 读取xml文档的例子

读取节点的例子:
using System;
using System.IO;
using System.Xml;

namespace HowTo.Samples.XML
{

public class MultipleXmlReaderSample
{
private const String document = "twopart.xml";

public static void Main()
{
MultipleXmlReaderSample myMultipleXmlReaderSample = new MultipleXmlReaderSample();
myMultipleXmlReaderSample.Run(document);
}

public void Run(String args)
{
try
{
//为指定的源文件创建新文件流。
FileStream filestreamSource = new FileStream(args, FileMode.Open, FileAccess.Read);
//用该文件流创建新读取器
XmlTextReader reader = new XmlTextReader(filestreamSource);
//读取 XML 文档的第一部分
while(reader.Read())
{
//显示元素并在 part1 结束元素标记处停止读取
//然后转到 ReadPart2 启动另一个读取器,读取文件的其余部分。
switch(reader.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine("名称:{0}", reader.Name);
Console.WriteLine(" 前缀:{0}", reader.Prefix);
Console.WriteLine(" 本地名称:{0}", reader.LocalName);
Console.WriteLine(" 命名空间:{0}", reader.NamespaceURI);
break;
case XmlNodeType.EndElement:
//用本地名称等于 part1 来停止在元素的结束元素处的读取
if ("part1"==reader.LocalName)
{
Console.WriteLine("终止读取第 1 部分...");
Console.WriteLine();
goto ReadPart2;
}
break;
}
}

//读取 XML 文档的其余部分
ReadPart2:
Console.WriteLine("开始读取第 2 部分...");
//创建 XmlNamespaceManager 并为文档添加命名空间。
XmlNamespaceManager nsmanager = new XmlNamespaceManager(reader.NameTable);
//设置默认命名空间,第一个参数为空。
nsmanager.AddNamespace(String.Empty, "http://tempuri.org/mydefaultnamespace");
nsmanager.AddNamespace("myns", "http://tempuri.org/mynamespace");
nsmanager.AddNamespace("yourns", "http://tempuri.org/yournamespace");
XmlParserContext pc = new XmlParserContext(reader.NameTable, nsmanager, reader.XmlLang, XmlSpace.Default);

// 将文件流重置到源流的开始处
filestreamSource.Seek(0, SeekOrigin.Begin);

XmlTextReader reader2 = new XmlTextReader(filestreamSource, XmlNodeType.Element, pc);

while(reader2.Read())
{
switch (reader2.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine("元素名称:{0}", reader2.Name);
Console.WriteLine(" 前缀:{0}", reader2.Prefix);
Console.WriteLine(" 本地名称:{0}", reader2.LocalName);
Console.WriteLine(" 命名空间:{0}", reader2.NamespaceURI);
break;
case XmlNodeType.EndElement:
//用本地名称等于 part2 来停止在元素的结束元素处的读取
if ("part2"==reader2.LocalName)
{
Console.WriteLine("终止读取第 2 部分...");
goto Done;
}
break;
}
}

Done:
Console.WriteLine("完成。");
reader.Close();

}
catch (Exception e)
{
Console.WriteLine ("异常:{0}", e.ToString());
}
}

0 评论:

发表评论