1、读取并解析XML文档示例。
//StringReader 对象从字符串中读取字符,在构造过程中取得一个字符串值。
StringReader stream;
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>");
//StreamReader 对象用于从文件读取字符。在构造过程中,该对象读入要读取的文件的名称
//System.IO.StreamReader stream = new System.IO.StreamReader("books.xml");
//使用指定的流创建一个新的 XmlReader 实例。
using (XmlReader reader = XmlReader.Create(stream))
{
//XmlTextReader reader = null;
//使用数据流构造一个 XmlTextReader 类。通常,如果需要在不使用文档对象模型 (DOM) 的情况下将 XML 作为要访问的原始数据,
//则可以使用 XmlTextReader;因此,XmlTextReader 提供了一种更快读取 XML 的机制。XmlTextReader 使用不同的构造函数来
StringReader stream;
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>");
//StreamReader 对象用于从文件读取字符。在构造过程中,该对象读入要读取的文件的名称
//System.IO.StreamReader stream = new System.IO.StreamReader("books.xml");
//使用指定的流创建一个新的 XmlReader 实例。
using (XmlReader reader = XmlReader.Create(stream))
{
//XmlTextReader reader = null;
//使用数据流构造一个 XmlTextReader 类。通常,如果需要在不使用文档对象模型 (DOM) 的情况下将 XML 作为要访问的原始数据,
//则可以使用 XmlTextReader;因此,XmlTextReader 提供了一种更快读取 XML 的机制。XmlTextReader 使用不同的构造函数来
指定 XML 数据的位置。以下代码从某个流加载 XmlTextReader:
//reader = new XmlTextReader(stream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:// The node is an Element.
Console.Write("<" + reader.Name);
while (reader.MoveToNextAttribute()) // Read attributes.
Console.Write(" " + reader.Name + "='" + reader.Value + "'");
Console.Write(">");
Console.WriteLine(">");
break;
case XmlNodeType.Text://Display the text in each element.
Console.WriteLine(reader.Value);
break;
case XmlNodeType.EndElement://Display end of element.
Console.Write("</" + reader.Name);
Console.WriteLine(">");
break;
}
}
}
//reader = new XmlTextReader(stream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:// The node is an Element.
Console.Write("<" + reader.Name);
while (reader.MoveToNextAttribute()) // Read attributes.
Console.Write(" " + reader.Name + "='" + reader.Value + "'");
Console.Write(">");
Console.WriteLine(">");
break;
case XmlNodeType.Text://Display the text in each element.
Console.WriteLine(reader.Value);
break;
case XmlNodeType.EndElement://Display end of element.
Console.Write("</" + reader.Name);
Console.WriteLine(">");
break;
}
}
}
2、获取服务器端的文件
/// <summary>
/// 获取当前SILVERLIGHT程序存放网络URL的前缀
/// </summary>
/// <returns>URL前缀</returns>
public static string GetURL()
{
ScriptObject location = (HtmlPage.Window.GetProperty("location") as ScriptObject);
object r = location.GetProperty("href");
string URL = r.ToString().Substring(0, r.ToString().LastIndexOf('/')); //截取到当前SILVERLIGHT程序存放网络URL的前缀
return URL;
}
/// 获取当前SILVERLIGHT程序存放网络URL的前缀
/// </summary>
/// <returns>URL前缀</returns>
public static string GetURL()
{
ScriptObject location = (HtmlPage.Window.GetProperty("location") as ScriptObject);
object r = location.GetProperty("href");
string URL = r.ToString().Substring(0, r.ToString().LastIndexOf('/')); //截取到当前SILVERLIGHT程序存放网络URL的前缀
return URL;
}
3、完整的代码
private void button1_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri(GetURL() + "/versionManage.xml", UriKind.Absolute);
WebClient Appclient = new WebClient();
Appclient.OpenReadAsync(uri);
Appclient.OpenReadCompleted += new OpenReadCompletedEventHandler(Appclient_OpenReadCompleted);
}
/// <summary>
/// 获取当前SILVERLIGHT程序存放网络URL的前缀
/// </summary>
/// <returns>URL前缀</returns>
public static string GetURL()
{
ScriptObject location = (HtmlPage.Window.GetProperty("location") as ScriptObject);
object r = location.GetProperty("href");
string URL = r.ToString().Substring(0, r.ToString().LastIndexOf('/')); //截取到当前SILVERLIGHT程序存放网络URL的前缀
return URL;
}
void Appclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
Stream stream = e.Result;
using (XmlReader reader = XmlReader.Create(stream))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:// The node is an Element.
Console.Write("<" + reader.Name);
while (reader.MoveToNextAttribute()) // Read attributes.
Console.Write(" " + reader.Name + "='" + reader.Value + "'");
Console.Write(">");
Console.WriteLine(">");
break;
case XmlNodeType.Text://Display the text in each element.
Console.WriteLine(reader.Value);
break;
case XmlNodeType.EndElement://Display end of element.
Console.Write("</" + reader.Name);
Console.WriteLine(">");
break;
}
}
}
}
{
Uri uri = new Uri(GetURL() + "/versionManage.xml", UriKind.Absolute);
WebClient Appclient = new WebClient();
Appclient.OpenReadAsync(uri);
Appclient.OpenReadCompleted += new OpenReadCompletedEventHandler(Appclient_OpenReadCompleted);
}
/// <summary>
/// 获取当前SILVERLIGHT程序存放网络URL的前缀
/// </summary>
/// <returns>URL前缀</returns>
public static string GetURL()
{
ScriptObject location = (HtmlPage.Window.GetProperty("location") as ScriptObject);
object r = location.GetProperty("href");
string URL = r.ToString().Substring(0, r.ToString().LastIndexOf('/')); //截取到当前SILVERLIGHT程序存放网络URL的前缀
return URL;
}
void Appclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
Stream stream = e.Result;
using (XmlReader reader = XmlReader.Create(stream))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:// The node is an Element.
Console.Write("<" + reader.Name);
while (reader.MoveToNextAttribute()) // Read attributes.
Console.Write(" " + reader.Name + "='" + reader.Value + "'");
Console.Write(">");
Console.WriteLine(">");
break;
case XmlNodeType.Text://Display the text in each element.
Console.WriteLine(reader.Value);
break;
case XmlNodeType.EndElement://Display end of element.
Console.Write("</" + reader.Name);
Console.WriteLine(">");
break;
}
}
}
}