有没有办法让 - XML元素值 - 动态?

时间:2011-06-03 00:22:40

标签: c# .net asp.net xml vb.net

我知道这个问题似乎不合逻辑,但我必须尝试,我希望找到一种方法,

我有一个DLL程序集从XML文件读取变量“GalleryID”。我无法修改程序集,所以我想知道我是否可以使XML元素值动态化?例如,要在不更改程序集的情况下从查询字符串或任何其他方案中获取此值。

Settings.xml

< ?xml version="1.0" encoding="utf-8"? >

< GallerySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    < GalleryID >2< /GalleryID >   // Here I would like this value to be dynamic, not static like this.
< /GallerySettings >

mylibrary汇编中:

protected static XmlDocument myXmlDoc;
    ' in Page_Load ev mylibrary

    MyLibrary.myXmlDoc.Load(base.Server.MapPath("Conntrols/Settings.xml"));
    XmlNode documentElement = MyLibrary.myXmlDoc.DocumentElement;
    MyLibrary.myappSettings.GalleryID = documentElement.SelectSingleNode("GalleryID").ChildNodes[0].Value.ToString();

这是一个拥有多个用户的ASP.NET网站。当用户登录并打开gallery.aspx页面时,它将显示用户自己的图库。此方案现在不起作用,因为库模块根据其在Settings.xml文件中的设置向所有用户显示一个库(Galleryid = 2)。如何在查询字符串中传递galleryid - gallery.aspx?galleryid=5并将其注入Settings.xml文件?

这可能吗?

2 个答案:

答案 0 :(得分:0)

我将重述我从你的问题中理解的内容,以确保我得到它。

您有一个程序集(来自.dll),它将XML文件作为数据源读取,以便从一个看似如下的节点中获取“GalleryID”:<GalleryID>2</GalleryID>

您希望能够在程序集读取之前更改 GalleryID

假设(是的,危险的......)您正在从您可以控制的应用程序中调用程序集。 (因为,您可能无法控制读取XML文档的程序集。)这将是调用上下文,并且主机定义Server.MapPath中“Server”将要查找的确切位置{{1 }}

有两种基本解决方案可供考虑:

  1. 打开XML文档,更改值并将其保存在调用上下文中。
  2. 从您的调用上下文中为“settings.xml”交换XML文档“settings.xml.alt”。

答案 1 :(得分:0)

在进程内数据库中完成这项工作会不会更好?

你向我解释说你将拥有很多不同的画廊。通过这种方式,对于那些动态数据,我认为您最好使用SQL Server Compact等进程内数据库,并且可以使用Entity Framework代码轻松完成。首先,从NuGet获取包裹。如果您可以控制您的数据源,我会亲自走这条路。