Private/ConvertFromXml.ps1
using namespace Newtonsoft.Json function ConvertFromXML { #TODO: This requires newtonsoft.json. Present in 6.1 but add a check for 5.1 <# .SYNOPSIS Uses the newtonsoft.json library to convert XML into an intermediate object. Supports PSObject (Default) and JSON #> [CmdletBinding()] param ( #The XML to convert to an object [Parameter(ValueFromPipeline)][XML.XMLElement]$Xml, #Output as JSON instead of just PSObject [Switch]$AsJSON, #Use the raw element processings that newtonsoft.json uses. Only need this if you have conflicting names between your attributes and elements [Switch]$Raw ) if ($useLegacyXMLDeserializer) { Add-Type -AssemblyName System.Xml.Linq $xobject = [Xml.Linq.XDocument]::Parse($xml.OuterXml) $json = [JsonConvert]::SerializeXNode($xobject,'Indented') } else { $json = [JsonConvert]::SerializeXmlNode($Xml,'Indented') } if (-not $Raw) { [Regex]$MatchConvertedAmpersand = '(?m)(?<=\s+\")(@)(?=.+\"\:)' $convertedJson = $json -replace $MatchConvertedAmpersand,'' } if ($AsJson) {return $convertedJson} return ConvertFrom-Json $convertedJson } |