Validating Xml in PowerShell

Sometimes a deployment pipeline needs to know that a file is at least vaguely sensible before trying to use it. Here is a short script cmdlet that accepts a file path (or wildcard) and attempts to load the xml as a valid document. Any exceptions caused by document errors will show up as errors and break a build with an exit code of 1.


[CmdletBinding()]
Param (
	[Parameter(Mandatory=$true, HelpMessage="Path or wildcard to xml file to test.")]
	[ValidateNotNullorEmpty()]
	[string]$Path
)

Resolve-Path $Path | % {

	$XmlFile = $_.Path
	
	If (!(Test-Path -Path $XmlFile)) {
		throw "The file $($XmlFile) does not exist"
	}

	$xml = New-Object System.Xml.XmlDocument

	Try {
		$xml.Load($XmlFile)
	}
	Catch [System.Xml.XmlException] {
		Write-Error "$Path : $($_.ToString())"
		exit 1
	}
}

Note that I support wildcard paths by using Resolve-Path to generate a list of matching paths if, for example, we run the cmdlet with *.xml input.