Tenho usado essa função para despejar XML no console para revisão enquanto trabalho no código para fazer alguma manipulação extensa de XML e, na maior parte, funciona conforme o esperado.
function Write-PxXmlToConsole {
param (
[Xml.XmlNode]$Xml
)
if ($Xml -is [Xml.XmlDocument]) {
$xmlDocument = $Xml
} else {
$xmlDocument = [Xml.XmlDocument]::new()
$newElement = $xmlDocument.ImportNode($Xml, $True)
[Void]$xmlDocument.AppendChild($newElement)
}
$stringWriter = [System.IO.StringWriter]::new()
$xmlWriter = [System.Xml.XmlTextWriter]::new($stringWriter)
$xmlWriter.Formatting = "indented"
$xmlDocument.WriteTo($xmlWriter)
$xmlWriter.Flush()
$stringWriter.Flush()
Write-Host $stringWriter.ToString()
Write-Host
}
No entanto, parece que em algum lugar as [System.IO.StringWriter]
variáveis estão sendo expandidas. Porque quando meu XML fica assim
$xml = [Xml]@"
<Pattern>$key.Value</Pattern>
"@
Write-PxXmlToConsole $xml
Recebo <Pattern>Autodesk Revit 2019.Value</Pattern>
como saída porque em algum lugar desta sessão a variável $key
foi preenchida. E se eu iniciar uma nova sessão, obterei <Pattern>.Value</Pattern>
. Um pouco doloroso, e não consigo encontrar nada aqui que sugira uma configuração que suprima esse comportamento.
As variáveis estão sendo expandidas durante a criação
[Xml]
com aspas duplas :A saída é diferente quando aspas simples são usadas: