使用Powershell比较xml结构

时间:2012-11-04 22:48:44

标签: powershell

我有两个xml配置文件,我只需比较两个文件的结构并显示差异。 请注意:比较时,应忽略xml节点中的值。

前:

XML 1 
----
<recipe>
  <ingredients>
      <ingredient1></ingredient1><ingredient2></ingredient2>
  </ingredients>
  <description></description>
</recipe>

XML 2
-----
<recipe>
  <ingredients>
    <ingredient1></ingredient1>
  </ingredients>
  <description></description>
  <images></images>
</recipe>

结果应该是两个xml文件的区别。

xml1 <ingredient2>
xml2 <images>

非常感谢。

1 个答案:

答案 0 :(得分:7)

我能想出的最快解决方案是:

[xml]$xml1 = @"
<recipe>
  <ingredients>
      <ingredient1>
      </ingredient1>
      <ingredient2>
      </ingredient2>
  </ingredients>
  <description></description>
</recipe>
"@

[xml]$xml2 = @"
<recipe>
  <ingredients>
    <ingredient1>dada</ingredient1>
  </ingredients>
  <description>dadad</description>
  <images></images>
</recipe>
"@

$docDiffs=Compare-Object ($xml1.SelectNodes("//*") | Select-Object -Expand Name) ($xml2.SelectNodes("//*") | Select-Object -Expand Name) 

$docDiffs

您需要做一些工作才能获得所需的确切格式,但主要工作已经完成。如果你想改进它,你可以选择使用Select-XML。