Powershell,输出xml到屏幕

Vim*_*mes 24 xml powershell

我正在学习PowerShell.我可以将xml文件加载到变量中并对其进行操作.然后我可以调用对象的save方法来保存到磁盘.我希望有一种方法可以将生成的xml输出到屏幕.我好像找不到一个.有没有办法,除了输出到文件然后文件到屏幕?

sam*_*pin 41

我无法让社区扩展工作,我真的不想安装额外的东西.我在微软博客上找到了另一种方法 -

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
Run Code Online (Sandbox Code Playgroud)


Emi*_*ggi 20

我知道的唯一方法是使用或等System.Xml属性.只要源是,这些属性应该已经缩进代码.outerxmlinnerxml

  • 啊哈,`$ xmlObj.InnerXml`似乎可以解决问题. (7认同)
  • 关于一开始让我困惑的事情的一个注释.我必须设置`$ xmlObject.PreserveWhitespace = $ true`(其中xmlObject是你的变量名)_before_将xml数据加载到`$ xmlObject`以获取原始的换行符和缩进. (3认同)

iRo*_*Ron 7

[System.Xml.Linq.XDocument]::Parse($Xml.OuterXml).ToString()
Run Code Online (Sandbox Code Playgroud)


ste*_*tej 5

看看PSCX 模块。你会找到Format-Xmlcmdlet 正是这样做的。

例子:

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
Run Code Online (Sandbox Code Playgroud)

将产生:

<root>
  <so>
    <user name="john">thats me</user>
    <user name="jane">do you like her?</user>
  </so>
</root>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看 help format-xml -full