xml - XML 配置比较以检测任何新密钥并在现有配置中添加密钥
问题描述
我有两个用于 c# 应用程序的配置文件 (XML):
CurrentConfigFile
= 此配置文件来自生产环境的运行构建。NewConfigFile
= 这个配置文件来自新版本,来自 QA 团队。
在部署新版本时,我遇到了这个问题:如果NewConfigFile
在新版本中 (xml) 中引入了任何新密钥,那么我手动将其NewConfigFile
与进行比较CurrentConfigFile
以查看是否引入了任何新密钥。如果有任何新密钥,那么我将其CurrentConfigFile
手动插入。
我想编写一个可以为我完成上述任务的 PowerShell 脚本。我是 PowerShell 的新手,我在互联网上做了很多搜索,但没有运气。请在这里帮助我。
解决方案
查看Get-Content
和Compare-Object
cmdlet。-PassThru
参数 forCompare-Object
将使您能够输出两个文件之间的差异。
Compare-Object -ReferenceObject (Get-Content -Path "current-config-file") -DifferenceObject (Get-Content -Path "new-config-file") -PassThru | Out-File "diff-file"
然后,您可以键入将current-config-file 和 diff-file的内容强制转换为,[xml]
以便您可以使用一些有用的方法和属性。
$currentXML = [xml](Get-Content -Path "current-config-file")
$diffXml = [xml](Get-Content -Path "diff-file")
假设$diffXml
拥有有效的 XML(如下所示),您应该能够使用InsertAfter
on 方法$currentXML
将新的 XML 数据插入您想要的位置。检查下面的将新元素插入 XML 文件链接以获取有关如何执行此操作的更多详细信息。
...
<child>
<subchild>...</subchild>
</child>
...
推荐阅读
- python - PyCryptodome decrypt_and_verify 正在返回“ValueError:MAC 检查失败”
- scala - 使用 Spark 更新 ElasticSearch 中的特定字段
- c++ - C++ 查找和检索基于运行时字节/字符的 C++ 类型
- javascript - 反应多轮播每张幻灯片只显示一个元素
- reactjs - 在单独的类中反应路由器
- javascript - 下一个 js 无法使用 kubernetes 集群中的默认下一个 js 路由路由到子文件夹中的页面
- python - 如何从多列中获取切片行值并连接到一个主列 pandas
- reactjs - React 测试库 - 组件未使用更新的数据呈现并导致测试用例中的超时错误
- php - mysql在选择大数据减速
- javascript - 为什么我的 API 调用与它们设置调用的方式不匹配