Quick and Easy PowerShell Test-XMLFile

The PowerShell community extensions module contains Test-XML which can perform a number of checks for the validity of an XML file. For my particular needs I wasn’t able to take a dependency on an external module, consequently I needed to make something similar of my own to carry out some basic tests.

The below function makes use of the XmlException exception from the XmlDocument class . An attempt is made to load the XML file and then any Load or Parse errors are caught by the XmlException exception.

Let’s take a look at a couple of examples:

The following XML file is missing a closing ‘/’ in Set 1 for Orange

[xml]

Orange Orange

Apple Green

[/xml]

The function will pick it up like this:


Test-XMLFile Fruit.xml -verbose

Note that it also returns $true or $false so you can use it say in ‘if’ statements.

In this example an additional has been erroneously copied into the wrong place.

[xml]

Orange Orange

Apple Green

[/xml]

The function will pick it up like this:


Test-XMLFile Fruit.xml -verbose


function Test-XMLFile { <# .SYNOPSIS Test the validity of an XML file #> \[CmdletBinding()\] param ( \[parameter(mandatory=$true)\]\[ValidateNotNullorEmpty()\]\[string\]$xmlFilePath )

\# Check the file exists if (!(Test-Path -Path $xmlFilePath)){ throw "$xmlFilePath is not valid. Please provide a valid path to the .xml fileh" } # Check for Load or Parse errors when loading the XML file $xml = New-Object System.Xml.XmlDocument try { $xml.Load((Get-ChildItem -Path $xmlFilePath).FullName) return $true } catch \[System.Xml.XmlException\] { Write-Verbose "$xmlFilePath : $($\_.toString())" return $false } }