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 и отлично работал