转载:程兴亮文章,地址;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;

所有的具体代码如下:

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开发。

转载 Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))的更多相关文章

  1. Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))【附带实例源码】

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

  2. Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】

    接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...

  3. Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary

      允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chengxingliang.blog.51cto.com/3972944/886643 ...

  4. [转载]Silverlight实用窍门系列:71.Silverlight的Style

    本文版权归作者和博客园共有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 原文链接:http://www.cnblogs.com/chengx ...

  5. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  6. Silverlight实用窍门系列:57.Silverlight中的Binding使用(二)-数据验证

    本文将简单讲述Silverlight中的Binding数据时的数据验证. NotifyOnValidationError:是否在出现异常/错误信息的时候激发BindingValidationError ...

  7. AssetsUtils【读取assets、res/raw、./data/data/包名/目录下的文件】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了以下功能: 1.读取assets目录下的资源html.文件.图片,将文件复制到SD卡目录中: 2.读取res/raw目录下的文 ...

  8. JVM虚拟机系列(一)类的加载

    JAVA虚拟机系列(一) 类的加载 目录 1 类的初始化过程 2 详解初始化时的各个阶段 一.类初始化的过程 先来看一个CLASS文件在整体生命周期里会遇到的阶段: xxxx.class ---> ...

  9. [转载] linux查找目录下的所有文件中是否含有某个字符串

    链接自 http://blog.sina.com.cn/s/blog_691a84f301015khx.html,并略加修订. 查找目录下的所有文件中是否含有某个字符串 find .|xargs gr ...

随机推荐

  1. defer和async

    1.decument.wirte不能使用 2.<script src="text.js" type="text/javascript" defer=&qu ...

  2. 第10章DOM笔记

    第十章 DOM 一 Node类型 共有12种节点类型,每个节点都有nodeType属性,用于表明节点类型,nodename 表示标签名称 nodeValue始终为null 1.操作节点 a)  app ...

  3. jQuery 2.2 和 1.12 新版本发布

    新年新气象,jQuery 团队于昨日发布了两个新版本:1.12 和 2.2.这两个版本都包含了大量的Bug修正和功能改进.基本上这会是3.0之前最后一次发布.不过由于3.0不做向下兼容,所以届时 jQ ...

  4. 实例讲解MySQL联合查询

    好了终于贴完了MySQL联合查询的内容了,加上上一篇一共2篇,都是我转载的,实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了.首先我们假设有2个表A和B,他们的表结构和字段分别为: ...

  5. DEDE数据库修改

    dede数据库配置文件所在路径为:/data/common.inc.php 修改方法: 下面是该dede数据库配置文件的内容: <?php //数据库连接信息 $cfg_dbhost = 'lo ...

  6. linux清理僵尸进程

    查看服务器时发现好3个僵尸进程,僵尸进程存在好多天了,一直不会处理,留到了今天,顺便清理下僵尸进程吧 top命令中统计了僵尸进程,是第二行最后一项3 zombie. 或者使用下面的命令得到僵尸进程数量 ...

  7. centos上安装rabbitmq并且python测试

    把我的阿里云重置了一下,重新安装rabbitmq,看看会出现什么问题. 首先,把erlang环境安装一下,直接 yum list | grep erlang erlang.x86_64 R16B-03 ...

  8. 一个oracle存储过程

    打开plsql,在packages文件夹里新建存储过程 在sql窗口中运行如下语句 create or replace package SY_USER_PKG1 is TYPE MYCURSOR IS ...

  9. Ushare应用

    Ushare应用 Openwrt 系统功能强大,主要优势在于其开放性和可扩展性,Openwrt 安装ushare后,可将路由器变身为一个功能强大的家庭upnp流媒体服务器! 打开网上邻居,会显示发现u ...

  10. Delphi TcxTreelist 设置scrollbars 不起作用的原因

    最近设置TcxTreelist的滚动条,发现水平的不起作用, 即使设置 sboth也不起作用. 查找,发现设置的一些属性导致了这个原因, 建立备忘,如下图: 1.属性, 这个页面,设置的表格,怎么也看 ...