Reputation: 1538
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
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