使用Powershell比较xml结构

jac*_*ack 3 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>
Run Code Online (Sandbox Code Playgroud)

结果应该是两个xml文件的差异.

xml1 <ingredient2>
xml2 <images>
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Web*_*ing 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
Run Code Online (Sandbox Code Playgroud)

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