转载 Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))
2014-03-10 16:19 悠悠鑫宝 阅读(124) 评论(0) 收藏 举报转载:程兴亮文章,地址;http://www.cnblogs.com/chengxingliang/archive/2011/02/07/1949579.html
使用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;
所有的具体代码如下:
| usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Net; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Documents; usingSystem.Windows.Input; usingSystem.Windows.Media; usingSystem.Windows.Media.Animation; usingSystem.Windows.Shapes; usingSystem.IO; usingSystem.Xml; usingSystem.Windows.Browser;  namespaceSLReadXML {     publicpartialclassMainPage : UserControl     {         publicMainPage()         {             InitializeComponent();              Uri uri = newUri(GetURL() + "/Config.xml", UriKind.Absolute);             WebClient Appclient = newWebClient();//使用WebClient下载config.xml文件,进行异步读取。             Appclient.OpenReadAsync(uri);             Appclient.OpenReadCompleted += newOpenReadCompletedEventHandler(Appclient_OpenReadCompleted);         }         voidAppclient_OpenReadCompleted(objectsender, OpenReadCompletedEventArgs e)         {             Stream stream = e.Result;             using(XmlReader xReader = XmlReader.Create(stream))             {                 xReader.ReadToFollowing("TestData");//使用XmlReader一直查找“TestData”元素读取该元素数据。                 stringTestData = xReader.ReadElementContentAsString();                 MessageBox.Show(TestData);                 xReader.ReadToNextSibling("SecData");//使用ReadToNextSibling一直查找同级的“SecData”元素的数据,直到找到为止。                 stringSecData = xReader.ReadElementContentAsString();                 MessageBox.Show(SecData);             }         }         /// <summary>         /// 获取当前SILVERLIGHT程序存放网络URL的前缀         /// </summary>         /// <returns>URL前缀</returns>         publicstaticstringGetURL()         {             ScriptObject location = (HtmlPage.Window.GetProperty("location") asScriptObject);             objectr = location.GetProperty("href");             stringURL = r.ToString().Substring(0, r.ToString().LastIndexOf('/')); //截取到当前SILVERLIGHT程序存放网络URL的前缀             returnURL;         }     } } | 
|  | 
Config.xml文件代码
<configuration> <TestData>First Test Data</TestData> <SecData>Secend Test Data</SecData> </configuration>
本实例程序在Silverlight 4.0的开发环境,VS2010开发。
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号