我正在学习PowerShell。我可以将xml文件加载到变量中并对其进行操作。然后我可以调用对象的save方法来保存到磁盘。我希望有一种方法可以将生成的xml输出到屏幕。我好像找不到一个。有没有办法,除了输出到文件然后文件到屏幕?
答案 0 :(得分:35)
我无法让社区扩展工作,我真的不想安装额外的东西。我在微软博客上找到了另一种方法 -
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
答案 1 :(得分:17)
我知道的唯一方法是使用System.Xml
或outerxml
等innerxml
属性。只要源是。
答案 2 :(得分:4)
看看PSCX module。您将找到完全相同的Format-Xml
cmdlet。
示例:
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
答案 3 :(得分:0)
这是一个旧帖子,但我想分享我的hackish答案。我需要将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并且它运行良好
答案 4 :(得分:0)
我发现的最干净的解决方案是像这样使用 System.Xml.Linq.XDocument.Parse:
Write-Host ([System.Xml.Linq.XDocument]::Parse("$(Get-Content -path 'c:\myxml.xml' -Raw)"));