Powershell, выход xml на экран

Я изучаю PowerShell. Я могу загрузить XML файл в переменную и манипулировать им. Затем я могу вызвать метод сохранения объекта для сохранения на диск. Я ожидал, что есть способ вывести полученный xml на экран. Кажется, я не могу найти его. Есть ли способ, кроме вывода в файл, а затем файл-на-экран?

Ответы

Ответ 1

Посмотрите модуль PSCX. Вы найдете командлет Format-Xml, который делает именно это.

Пример:

Import-Module pscx
$xml = [xml]'<root><so><user name="john">thats me</user><user name="jane">do you like her?</user></so></root>'
Format-Xml -InputObject $xml

будет производить:

<root>
  <so>
    <user name="john">thats me</user>
    <user name="jane">do you like her?</user>
  </so>
</root>

Подробнее см. help format-xml -full

Ответ 2

Я не мог заставить расширения сообщества работать, и я действительно не хочу, чтобы в любом случае нужно было что-то устанавливать. Я нашел другой подход в блоге Microsoft -

function WriteXmlToScreen ([xml]$xml)
{
    $StringWriter = New-Object System.IO.StringWriter;
    $XmlWriter = New-Object System.Xml.XmlTextWriter $StringWriter;
    $XmlWriter.Formatting = "indented";
    $xml.WriteTo($XmlWriter);
    $XmlWriter.Flush();
    $StringWriter.Flush();
    Write-Output $StringWriter.ToString();
}

$xml = [xml]'<root><so><user name="john">thats me</user><user name="jane">do you like her?</user></so></root>'
WriteXmlToScreen $xml

Ответ 3

Единственный способ, которым я знаю, - использовать System.Xml свойства, такие как outerxml или innerxml. Эти свойства должны иметь уже отформатированный код до тех пор, пока источник был.

Ответ 4

Это старый поток, но я хотел поделиться своим хакерским ответом. Мне нужно было отправить xml на php, и я ничего не мог отправить.

Ответ, который я придумал, заключался в том, чтобы сохранить файл на диск, а затем запустить на нем контент. Это повторяет текст xml и ничего больше:

#hack alert.  
#we need to echo out just the text of the XML back to PHP. 

IF ("$env:TEMP\xml.xml") {Remove-Item "$env:TEMP\xml.xml"}
#$xmlDoc.Save("c:\temp\xml.xml")
$xmlDoc.Save("$env:TEMP\xml.xml")
get-content "$env:TEMP\xml.xml"

В моем случае я отправлял его обратно на PHP и отлично работал