【问题标题】:XML to LINQ Question/sXML to LINQ 问题
【发布时间】:2009-11-05 16:57:54
【问题描述】:

在我开始之前,先简要概述一下我正在努力实现的目标,然后我们将深入探讨血淋淋的细节。目前我正在开发一个应用程序,它将监视用户注册表以更改与用户偏好相关的特定键。目前正在使用强制配置文件(不是我的选择),无论如何,整个想法是将更改记录到可以在下次登录时将更改写回用户注册表的位置。

目前,我有系统监视注册表更改并触发事件,返回已更改的键、值名称和值。我将这些输入到一个列表中以创建一个包含所有数据的字符串,然后每隔一段时间将该列表写入一个文本文件。现在这一切都很好,但我需要更改数据的保存方式,因为将字符串分解为键、值名称和值,以便再次写回注册表需要太多开销,并且还存在将字符串分解为唯一可识别的问题时尚。

所以有人建议我看看 XML,我以前没有使用过,我已经开始研究它,一切看起来都很简单,我之前也使用 LINQ 连接到嵌入式数据库。我目前正在努力解决的问题是 LINQ 如何能够从 XML 检索和操作内存中的数据,因为我不想因为需要保持应用程序的速度而不断访问 XML 文件尽可能。目前,注册表中的所有更改都缓存到一个 List(String) 中,然后每分钟左右写入一个文本文件。

目前我所拥有的是系统返回不同字符串中的键、值名称和值,将它们聚合成一个 List(String) 值,而我需要的是表或等效的表示一个键,它包含多个值名称,每个值名称包含一个值,最后是一个类型(这将是一个数字,表示这是什么类型的注册表值,REG SZ,REG BINARY 等)。在 XML 文件和它自己的程序中。

另外,我不太明白的是,与数据库不同,表和架构在程序首次运行之前不会存在,因为它将创建一个新的 XML 文件,而不是它已经存在。这是由于信息被写回用户个人驱动器,因此必须在首次在用户计算机上运行时创建。

我已经尝试了一些链接和教程等,但还没有点击,所以如果你有一个例子或者可以更好地向我解释一下,我们将不胜感激。

我想补充的最后一点是,我目前在程序中存储数据的想法是创建一个值列表,嵌入在值名称列表中,并在键列表中嵌入值名称列表。听起来可以吗?

现在我知道这很长,而且到处都是,所以如果有人可以提供帮助,我们将不胜感激,或者如果您需要进一步的澄清信息,请告诉我,我会尽力而为。

谢谢

【问题讨论】:

    标签: c# xml linq registry linq-to-xml


    【解决方案1】:

    据我了解,您只是想错了方向。您的应用程序不想在内存中操作 XML。您只想使用内存中的一些数据结构,并希望有一种简单的方法将其存储到磁盘并读回?如果我理解正确:

    不要关心 LINQ for XML。看看 XML 序列化基础设施中的构建。然后构建一个适合您的应用程序需求的内部数据结构,并使用 XmlSerializer 将其写入磁盘并读回。无需手动触摸任何 XML!

    【讨论】:

    • 基本上是的,没错,我想操作内存中的数据,然后有一个存储将被写入和读取。请参阅我习惯使用 SQL 中的 LINQ,其中我有一个现有的数据存储并使用数据集等。
    • 您应该忘记在内存中使用 XML 的想法。请参阅 switchonthecode.com/tutorials/csharp-tutorial-xml-serialization 获取示例,了解 XML 序列化的工作原理。
    【解决方案2】:

    根据您的描述,在这里使用 XML 似乎是个好主意。

    关于访问内存中的 XML 数据,我发现 MSDN 文档很有帮助:
    http://msdn.microsoft.com/en-us/library/bb387098.aspx

    基本思想是,LINQ-to-XML 只是 LINQ-to-Objects,使用表示 XML 元素的对象。

    恐怕我不太明白你的第二个问题。

    【讨论】:

    • 是的,我只需要知道关于 XML 的内容就可以了,我已经阅读了大部分文档,但我会再去看看这次能否更好地理解它,现在我已经睡了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多