jack
jack

Reputation: 1538

compare xml structure using Powershell

I have two xml config files, I need compare ONLY the structure of the two files and display the difference. Please note: when comparing, the values within the xml nodes should be ignored.

ex:

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

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

The result should be a difference of the two xml files.

xml1 <ingredient2>
xml2 <images>

Help much appreciated.

Upvotes: 3

Views: 7203

Answers (1)

Webplanet TFS Consulting
Webplanet TFS Consulting

Reputation: 1269

Quickest solution I can come up with is:

[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

You will need to do a little bit of work to get the exact formating you need, but the main work had been done. If you want to improve on it you can look at using Select-XML alternatively.

Upvotes: 7

Related Questions