Silverlight读取*.XML数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using System.Text;

namespace SLshaw
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void btnXML_Click(object sender, RoutedEventArgs e)
        {
            string Xpath = @"shadowinswf.xml";
            StringBuilder sb = new StringBuilder();

            using (XmlReader reader = XmlReader.Create(Xpath))
            {
                while (reader.Read())
                {
                    if (reader.IsStartElement() && "window" == reader.LocalName.ToLower())
                    {
                        sb.Append("state= " + reader.GetAttribute("state".ToLower()) + "/r/n");

                        using (XmlReader itemreader = reader.ReadSubtree())
                        {
                            while (itemreader.Read())
                            {
                                if (itemreader.IsStartElement())
                                {
                                    if ("title" == itemreader.LocalName.ToLower())
                                    {
                                        sb.Append("title: " + itemreader.ReadElementContentAsString() + "/r/n");
                                    }
                                    else if ("os" == itemreader.LocalName.ToLower())
                                    {
                                        sb.Append("os: " + itemreader.ReadElementContentAsString() + "/r/n");
                                    }
                                    else if ("description" == itemreader.LocalName.ToLower())
                                    {
                                        sb.Append("description: " + itemreader.ReadElementContentAsString() + "/r/n");
                                    }
                                    else if ("img" == itemreader.LocalName.ToLower())
                                    {
                                        sb.Append("img: " + itemreader.ReadElementContentAsString() + "/r/n");
                                    }
                                    else if ("uuid" == itemreader.LocalName.ToLower())
                                    {
                                        sb.Append("uuid: " + itemreader.ReadElementContentAsString());
                                    }
                                }
                            }
                        }
                        this.txtXML.Text = sb.ToString();
                    }
                }
            }
        }    
    }
}

参考 文章:

http://www.lan27.com/Article/200705/946.htm

http://msdn.microsoft.com/en-us/library/cc189040(VS.95).aspx

http://msdn.microsoft.com/zh-cn/vstudio/cc838250(VS.95).aspx

本章中的QuickStart 示例演示如何使用Silverlight中的 .NET Framework 子集部分来得到远程的 XML内容, 使用XmlReader来读入内容, 以及使用StringBuilder 和 XmlWriter来将内容输出到XAML 中.

运行 查看 想要在基于Silverlight的应用程序中做到以上的功能,你需要准备以下步骤:

使用BrowserHttpWebRequest来得到远程 XML源 .

使用XmlReader来读取XML文件.

使用XmlWriter来将XML内容写入到一个StringBuilder 对象中.

输出XAML内容到页中.

要求 (available from the Silverlight download site):

Microsoft Silverlight 1.1 Alpha.

Microsoft Visual Studio Code Name "Orcas" Beta 1.

Microsoft Silverlight Tools Alpha for Visual Studio Code Name "Orcas" Beta 1.

A Silverlight project. For instructions, see How to: Create a Silverlight Project.

使用BrowserHttpWebRequest来得到远程XML内容
创建一个 BrowserHttpWebRequest 实例,并将你想要调用的资源的Uniform Resource Identifier (URI)传入. 你可以请求一个在同一个服务器上的文件. 例如, 你可以得到示例中的rssfeed.xml 文件(单击查看源文件按钮)然后复制到你project中的 source文件夹中.

CS

 
 
HttpWebRequest request = new BrowserHttpWebRequest( new Uri(url));

 

VB

 
 
Dim request As New BrowserHttpWebRequest(New Uri(url))



注意
如果想得到不同域中的 XML document ,请使用Web service. 想了解如何使用Web service, 查看 Exposing Web Services to Client Script in ASP.NET AJAX.

调用GetResponse 方法来得到HttpWebResponse 对象,它包含了你请求资源的响应.

CS

 
 
HttpWebResponse response = request.GetResponse();

VB

 
 
Dim response = request.GetResponse()

 

使用 HttpWebResponse.GetResponseStream 方法以流的方式得到服务器对你请求的响应.

CS
Stream content = response.GetResponseStream();

VB
Dim content = response.GetResponseStream()

在你得到response 对象后, 请以Close() 方法来关闭这个资源请求.

CS
response.Close();

VB
response.Close()

使用XMLReader来读取XML
调用Create() 方法然后给它传入一个StreamReader 类的实例,这样你就创建了一个XmlReader 对象.

CS
using (XmlReader reader = XmlReader.Create(new StreamReader(content)))

VB
Using reader As XmlReader = XmlReader.Create(New StreamReader(content))

开始读取这个包含返回内容的stream.

CS
while (reader.Read())

VB
While (reader.Read())

寻找名称为"item"的元素.它表明 RSS feed item 就在当前节点中.

CS
if ((reader.IsStartElement()) && ("item" == reader.LocalName))

VB
If ((reader.IsStartElement()) And ("item" = reader.LocalName)) Then

创建一个 XmlReader类型的itemReader 对象,使用XmlReader的 ReadSubTree() 方法来访问所有的"item" 元素. itemReader即能得到所有当前的 RSS item数据.

CS
using (XmlReader itemReader = reader.ReadSubtree())

VB
Using itemReader As XmlReader = reader.ReadSubtree()

调用itemReader对象的Read() 方法在RSS feed中来搜索"title" 和 "link" 元素 .

while (itemReader.Read())
{
if (itemReader.IsStartElement())
{
if ("title" == itemReader.LocalName)
{
}
else if ("link" == itemReader.LocalName)
{
}
}
}
While itemReader.Read()
If (itemReader.IsStartElement()) Then
If ("title" = itemReader.LocalName) Then
ElseIf ("link" = itemReader.LocalName) Then
End If
End If
End While你不需要调用reader 和 itemReader的Close 方法,因为 using 申明定义的对象将在括号结束时自动disposed.

使用XMLWriter来写XML成为一个StringBuilder object
创建一个XmlWriter 并传入一个它将要写入内容并用来代表XAML内容的 StringBuilder 对象.

CS
StringBuilder xamlString = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(xamlString))

VB
Dim xamlString As New StringBuilder()
Using writer As XmlWriter = XmlWriter.Create(xamlString)

注意
你可以使用XamlWriter 来创建XAML 控件, 或者你有了XmlWriter 对象,你可以改变它为 XamlWriter.

写入 XAML 元素. 在writer结束时, 你可以将这些元素控件添加到XAML页中. 下面的示例添加了 Canvas 元素.它同时还添加了TextBlock 子元素到 Canvas 下. TextBlock 元素必须含有 Canvas.Top 参数来定位它在 Canvas对象的什么位置上. 你同样还要设置它显示出来的值.

// Write Canvas element.
writer.WriteStartElement("Canvas");
// Write child elements for Canvas.
writer.WriteStartElement("TextBlock");
writer.WriteAttributeString("Canvas.Top", 0);
writer.WriteAttributeString("Text",
"Title: " + itemReader.ReadElementContentAsString());
// End TextBlock element.
writer.WriteEndElement();
// End Canvas element.
writer.WriteEndElement();
' Write Canvas element.
writer.WriteStartElement("Canvas")
' Write child elements for Canvas.
writer.WriteStartElement("TextBlock")
writer.WriteAttributeString("Canvas.Top", 0)
writer.WriteAttributeString("Text", _
"Title: " & itemReader.ReadElementContentAsString())
' End TextBlock element.
writer.WriteEndElement()
' End Canvas element.
writer.WriteEndElement()
调用Flush() 方法来flush xamlString.缓冲的内容

CS
writer.Flush();

VB
writer.Flush()

你不需要调用writer 的 Close 方法,因为using申明定义的对象将在括号结束时自动disposed.

将内容写入 XAML 页
从string中来创建一个XAML controls.

CS
System.Windows.DependencyObject controls =
XamlReader.Load(xamlString.ToString());

VB
Dim controls As System.Windows.DependencyObject = _
XamlReader.Load(xamlString.ToString())

添加 controls 到根 Canvas的子对象集中.

CS
this.Children.Add(controls as Visual);

VB
Me.Children.Add(controls)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值