Silverlight中调用ClientBin下非xap内的xml的方法

前一阵子试着写个SilverLight应用,其中需要读取xml作为数据文件,但是由于xml里的数据随时都需要外部更改,于是乎不方便放在xap里,免得违背了"一次OX,处处运行"这种某伪OO语言所兴起的风潮,直接放在ClientBin下,于是开了各种尝试.

首先,很自然,看了msdn,直接选用XmlReader.Create(string uri)来创建reader,可惜...杯具,这里的uri是直接指向xap下的.(M$,你敢给个XmlReader.Create(URI uri)的overload么)

说到URI,SL里如果相对地址为"Image/1.jpg",先查看是否在ClientBin/Image下有1.jpg.然后再在xap下找,而如果"~Image/1.jpg",那就直接找xap下是否有...

然后.各种找攻略,期间发现各种水文(国内各种论坛果然是鱼龙混杂,虽卧虎藏龙,但是还是有神一般存在的家伙的-_-,ps:咱是水货),包括使用XmlDocument的杯具男,我说你们写上去之前能跑一下代码,或者好好看以下msdn吗,上面清楚写着,XmlDocument不可用阿....

好吧,SilverLight对WPF的瘦身不是一点,茫茫多的功能被阉割掉了,原本很强大的xml支持,现在只剩那么几个鸡肋一般的了.害咱解析的类写了好久T_T

SL酱小一点真的好么?一只手握住刚好,还是贫R是稀缺资源呢?M$不能这么邪恶啊...

进入正题...水了好久啊...

这边提供这么个类 XMLParse:

from http://forums.silverlight.net/forums/t/99312.aspx

public class XMLParser
{
    public delegate void EventHandler(object sender, XmlParserEventArgs e);
    public event EventHandler Completed;

    public void LoadXMLFile(string xmlURI)
    {
        WebClient xmlClient = new WebClient();
        xmlClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(XMLFileLoaded);
        xmlClient.DownloadStringAsync(new Uri(xmlURI, UriKind.RelativeOrAbsolute));
    }

    void XMLFileLoaded(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            string xmlData = e.Result;

            if (Completed != null)
            {
                Completed(this, new XmlParserEventArgs(xmlData));
            }
        }
    }
}

public class XmlParserEventArgs : EventArgs
{
    public string XmlString { get; set; }

    public XmlParserEventArgs(string xmlString)
    {
        this.XmlString = xmlString;
    }
}
用WebClient+异步传输,貌似可以获取其它网站的数据,很不错的方法.虽然还有修改的方法,嘛,有空再看了.使用范式就在那个link里找吧...

=========================人,人家才不是什么分割线呢=============================

【reprinted from http://hi.baidu.com/avalontm/blog/item/bae82d3cbbe006cd9e3d6279.html

你可能感兴趣的:(silverlight)