原生Xml处理或(外部)库
本文关键字:外部 Xml 处理 原生 | 更新日期: 2023-09-27 18:08:33
我有多个具有不同配置的项目,所有这些配置必须在单个XML文件中指定。这不是app.config,而是在一个通用位置上指定的。
我当前的项目结构:
- 核心项目(带有一些XML)
- 子项目(需要以通用方式访问核心XML配置+来自同一XML文件的自己的配置)
哪个。net XML技术最适合这个?
Thanks in advance
我没有在你的文章中看到任何暗示。net框架的内置Xml功能不能胜任这项任务的内容。
我几乎每天都要处理Xml,到目前为止,我从来没有需要过任何外部库。当然,这完全取决于您的项目需求,但是您有两个项目将使用相同的功能,因此您可以(并且应该)轻松地为两个项目抽象和隔离Xml处理,要么在子项目中引用您自己的核心Xml类,要么在单独的dll项目中引用(我的偏好)。dll可以在将来很好地为您服务。
编写自己的Xml功能的一个额外好处是,您可以收集到关于。net Xml名称空间内部工作的更深入的知识,这些知识绝不会被浪费,而您可以通过使用外部库(通常只不过是。net类的包装器和外壳)来远离它
希望这是一些有帮助和快乐的编码。
app.config文件可能是最适合的。您可以创建自己的配置部分,并且所有引用的程序集都可以访问项目的单个配置文件,因此每个程序集都可以拥有自己的部分。您还可以在user中配置特定于用户的配置。
如果你不能使用app.config,因为它需要在一个特定的位置,你可以用ConfigurationManager.OpenMappedExeConfiguration
从一个不同的位置加载一个app.config文件
其他选择:
- 使用
XmlSerializer
在配置中将XML反序列化为POCO。 - 受虐选项:使用普通
XDocument
或XmlDocument
手动解析动态配置文件。
当前问题的解决方案:
使用LINQ to XML,我取匹配对象的XML元素。这个XML元素比根元素深一层。通过这种方式,我首先"过滤"根标签,然后将其转换为字符串,并使用反序列化。
例如<root>
<project1>
<somevalue>myvalue</somevalue>
</project1>
<project2/>
</root>
如果我想从project1的一切,我得到与LINQ后裔的字符串到XML,然后反序列化字符串到相应的对象