天天看点

Silverlig1.Silverlight读取外部XML加载配置-(使用WebClient读取XAP包同目录下的XML文件)

使用WebClient读取XAP包同目录下的XML文件

      我们想要读取XAP包下面的XML文件,需要将此XML文件放在加载XAP包的网页的目录中去,然后使用URI方式读取此URL方式下的XML文件。

      首先使用WebClient来异步下载此URL方式的XML文件,然后使用XmlReader来读取此XML文件的数据内容。

      在这里我们一共有3个知识点需要掌握:

      第一:获取当前调用此Silverlight程序XAP包的网页的地址的前缀,以获取XML文件的URL地址。

        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;

        }

      第二:使用WebClient下载XML文件

         Uri uri = new Uri(GetURL() + "/Config.xml", UriKind.Absolute);

            WebClient Appclient = new WebClient();//使用WebClient下载config.xml文件,进行异步读取。

            Appclient.OpenReadAsync(uri);

            Appclient.OpenReadCompleted += new OpenReadCompletedEventHandler(Appclient_OpenReadCompleted);

      第三:使用XmlReader读取XML文件

            Stream stream = e.Result;

            using (XmlReader xReader = XmlReader.Create(stream))

            {

                xReader.ReadToFollowing("TestData");//使用XmlReader一直查找“TestData”元素读取该元素数据。

                string TestData = xReader.ReadElementContentAsString();

                MessageBox.Show(TestData);

                xReader.ReadToNextSibling("SecData");//使用ReadToNextSibling一直查找同级的“SecData”元素的数据,直到找到为止。

                string SecData = xReader.ReadElementContentAsString();

                MessageBox.Show(SecData);

            }

      需要引入的域名空间如下:

using System.IO;

using System.Xml;

using System.Windows.Browser;

      所有的具体代码如下:

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.IO; 

using System.Xml; 

using System.Windows.Browser; 

namespace SLReadXML 

    public partial class MainPage : UserControl 

    { 

        public MainPage() 

        { 

            InitializeComponent(); 

            Uri uri = new Uri(GetURL() + "/Config.xml", UriKind.Absolute); 

            WebClient Appclient = new WebClient();//使用WebClient下载config.xml文件,进行异步读取。 

            Appclient.OpenReadAsync(uri); 

            Appclient.OpenReadCompleted += new OpenReadCompletedEventHandler(Appclient_OpenReadCompleted); 

        } 

        void Appclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 

            Stream stream = e.Result; 

            using (XmlReader xReader = XmlReader.Create(stream)) 

            { 

                xReader.ReadToFollowing("TestData");//使用XmlReader一直查找“TestData”元素读取该元素数据。 

                string TestData = xReader.ReadElementContentAsString(); 

                MessageBox.Show(TestData); 

                xReader.ReadToNextSibling("SecData");//使用ReadToNextSibling一直查找同级的“SecData”元素的数据,直到找到为止。 

                string SecData = xReader.ReadElementContentAsString(); 

                MessageBox.Show(SecData); 

            } 

        /// <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; 

    } 

config.xml文件代码

<configuration> 

    <TestData>First Test Data</TestData> 

    <SecData>Secend Test Data</SecData> 

</configuration> 

本实例程序在Silverlight 4.0的开发环境,VS2010开发。

本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/821207