Powershell, вывод xml на экран - PullRequest
22 голосов
/ 26 мая 2011

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

Ответы [ 4 ]

38 голосов
/ 25 марта 2014

Мне не удалось заставить работать расширения сообщества, и я действительно не хочу устанавливать что-то дополнительноеЯ нашел другой подход в блоге 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
19 голосов
/ 26 мая 2011

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

4 голосов
/ 26 мая 2011

Посмотрите на 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

0 голосов
/ 16 сентября 2016

Это старая ветка, но я хотел поделиться своим хакерским ответом.Мне нужно было отправить 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, и он отлично работал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...