原生Xml处理或(外部)库

本文关键字:外部 Xml 处理 原生 | 更新日期: 2023-09-27 18:08:33

我有多个具有不同配置的项目,所有这些配置必须在单个XML文件中指定。这不是app.config,而是在一个通用位置上指定的。

我当前的项目结构:

  • 核心项目(带有一些XML)
  • 子项目(需要以通用方式访问核心XML配置+来自同一XML文件的自己的配置)

哪个。net XML技术最适合这个?

Thanks in advance

原生Xml处理或(外部)库

我没有在你的文章中看到任何暗示。net框架的内置Xml功能不能胜任这项任务的内容。

我几乎每天都要处理Xml,到目前为止,我从来没有需要过任何外部库。当然,这完全取决于您的项目需求,但是您有两个项目将使用相同的功能,因此您可以(并且应该)轻松地为两个项目抽象和隔离Xml处理,要么在子项目中引用您自己的核心Xml类,要么在单独的dll项目中引用(我的偏好)。dll可以在将来很好地为您服务。

编写自己的Xml功能的一个额外好处是,您可以收集到关于。net Xml名称空间内部工作的更深入的知识,这些知识绝不会被浪费,而您可以通过使用外部库(通常只不过是。net类的包装器和外壳)来远离它

希望这是一些有帮助和快乐的编码。

app.config文件可能是最适合的。您可以创建自己的配置部分,并且所有引用的程序集都可以访问项目的单个配置文件,因此每个程序集都可以拥有自己的部分。您还可以在user中配置特定于用户的配置。

如果你不能使用app.config,因为它需要在一个特定的位置,你可以用ConfigurationManager.OpenMappedExeConfiguration从一个不同的位置加载一个app.config文件

其他选择:

  • 使用XmlSerializer在配置中将XML反序列化为POCO。
  • 受虐选项:使用普通XDocumentXmlDocument手动解析动态配置文件。

当前问题的解决方案:

使用LINQ to XML,我取匹配对象的XML元素。这个XML元素比根元素深一层。通过这种方式,我首先"过滤"根标签,然后将其转换为字符串,并使用反序列化。

例如

<root>
    <project1>
       <somevalue>myvalue</somevalue>
    </project1>
    <project2/>
</root>

如果我想从project1的一切,我得到与LINQ后裔的字符串到XML,然后反序列化字符串到相应的对象