我正在学习PowerShell。我可以将一个XML文件加载到一个变量中并对其进行操作。然后,我可以调用对象的save方法将其保存到磁盘中。但是,我希望有一种方法可以将结果XML输出到屏幕上。可是我找不到这种方法。除了先将其输出到文件再输出到屏幕之外,有其他方法吗?
我正在学习PowerShell。我可以将一个XML文件加载到一个变量中并对其进行操作。然后,我可以调用对象的save方法将其保存到磁盘中。但是,我希望有一种方法可以将结果XML输出到屏幕上。可是我找不到这种方法。除了先将其输出到文件再输出到屏幕之外,有其他方法吗?
我无法让社区扩展正常工作,而且我也不想额外安装什么东西。我在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
我所知道的唯一方法是使用 System.Xml
属性,例如 outerxml
或者 innerxml
。只要源代码已经缩进,这些属性应该已经有了缩进好的代码。
PreserveWhitespace
,输出到屏幕的大部分换行和缩进都会丢失,但保存到文件中则会保留它们。除了作为内部文本一部分的换行和缩进之外,它看起来是这样的。奇怪的是,在我的测试文件中,保存到文件时其中一个制表符被转换成了两个空格,但其他制表符都没问题。 - Vimes[System.Xml.Linq.XDocument]::Parse($Xml.OuterXml).ToString()
Linq
程序集不可用,请使用以下命令加载:[Reflection.Assembly]::LoadWithpartialName("System.Xml.Linq") | Out-Null
- PaulFormat-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
Write-Host ([System.Xml.Linq.XDocument]::Parse("$(Get-Content -path 'c:\myxml.xml' -Raw)"));
#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"
Write-Output
使标准函数输出,因此您可以将其捕获到变量$formatted = WriteXmlToScreen $xml
中,或者将其管道传输到其他地方WriteXmlToScreen $xml | Out-File $f
。 - Nathan[xml]
数据类型(即function WriteXmlToScreen ($xml)
),否则PowerShell会认为该变量是一个XML文档,并显示错误:“无法将值“System.Xml.XmlElement”转换为类型“System.Xml.XmlDocument”。 - Dave FWrite-Output
为类似Write-Host
的内容。 - Dave F