【问题标题】:using linq to xml in silverlight?在silverlight 中使用linq to xml?
【发布时间】:2011-09-20 23:08:33
【问题描述】:

我确实实现了一个 Web 应用程序(asp.net,c#),它有几个页面。每个页面都能够从 xml 文件中读取值并传递到每个页面中的几个文本框。用户有能够编辑值并保存,从而保存 xml 文件。我确实使用了 linq to xml。

我现在必须搬到 silverlight。所以我正在尝试在新的 silverlight 项目中实现相同的逻辑。我也在尝试在 silverlight 中使用 linq to xml。但是有些我无法读取 xml不在 xap 文件中的文件。这是我的代码

 XDocument doc = Document.Load("C:\Data\Data.exe.config");
            var applicationSettings = (from x in doc.Descendants("applicationSettings")
                                       from kvpair in .Element("Data.Properties.Settings").Elements("setting")
                                       select new
                                       {
                                           Name = kvpair.Attribute("name").Value,
                                           Node = kvpair.Element("value")
                                       }).ToDictionary(x => x.Name, y => y);

            string Account  = applicationSettings["Account no"].Node.Value.ToString();
           txtAccountno.Text = AttendanceWindow;
            string Details=applicationSettings["Details"].Node.Value.ToString();
            txtDetails.Text = Details;

【问题讨论】:

    标签: c# silverlight-4.0 linq-to-xml


    【解决方案1】:

    我假设“C:\Data\Data.exe.config”是一个位于服务器上的文件?请记住,Silverlight 是在客户端执行的。您不仅必须授予 Silverlight 访问该目录 (see this link for some details) 的权限,而且您将访问客户端的硬盘,而不是服务器的硬盘。为了获取该文件的内容,您最好解析 XML 服务器端并通过 Web 服务将您需要的任何设置发送到 Silverlight。

    如果文件确实位于客户端计算机上,那么您需要创建一个浏览器外的 Silverlight 项目:http://msdn.microsoft.com/en-us/library/ee721082(VS.95).aspx

    编辑:

    啊,我想我知道现在发生了什么。 Document.Load 方法默认假定 URI 指向 XAP 中的资源:@​​987654323@

    这篇 MSDN 文章中描述了您可能需要做的事情,它将使用流方法来加载 XML:http://msdn.microsoft.com/en-us/library/cc645034(v=vs.95).aspx#Y0

    【讨论】:

    • avanek:是的,文件位于服务器上。我的 silverlight 应用程序也位于服务器上,它可以访问文件进行读写。
    • 那么代码会抛出异常吗?如果您能提供任何其他信息,我们将不胜感激。
    • 异常:无法打开 'file:/C:/Data/Data.exe.config'。 Uri 参数必须是指向 Silverlight 应用程序 XAP 包内内容的相对路径。如果您需要从任意 Uri 加载内容,请参阅使用 WebClient/HttpWebRequest 加载 XML 内容的文档。
    【解决方案2】:

    您的问题与允许您访问磁盘上的哪些区域有关。

    您需要确保 Silverlight 可以访问该文件,它有权访问文件位置,并且将 silverlight 配置为能够访问本地文件。必须将文件移动到本地存储,或者您必须在浏览器之外以提升的权限运行。

    另请参阅:http://www.codeproject.com/KB/silverlight/FileExplorerInSilverlight.aspx,了解从 Silverlight 访问文件的示例

    【讨论】:

    • :可能你在想其他方式..我不应该移动文件。我试图加载的 xml 文件总是在同一个位置。
    • 我正在考虑将文件移动到本地存储。我已经更新了答案以使其更清楚
    • 异常:无法打开 'file:///C:/SITA/PaxServices/FidsValidationHost.exe.config'。 Uri 参数必须是指向 Silverlight 应用程序 XAP 包内内容的相对路径。如果您需要从任意 Uri 加载内容,请参阅使用 WebClient/HttpWebRequest 加载 XML 内容的文档。
    【解决方案3】:

    在 Silverlight 5 中,可以使用提升的权限在浏览器中运行 Silverlight 应用程序,使您能够访问整个文件系统。否则,您将被限制在隔离的存储区域。

    【讨论】:

    • 是否可以将 XML 文件作为资源文件添加到 XAP 中?在这种情况下,您可以使用 Application.GetResourceStream(Uri) 获取 XML 文件的流信息对象,然后可以使用 XDocument.Load(Stream) 将流加载到 XDocument 中。
    • 不,我不应该从服务器上的位置移动文件...我正在查看以下链接的行msdn.microsoft.com/en-us/library/cc645034(v=vs.95).aspx#Y0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多