PowerShellを学習しています。 xmlファイルを変数にロードして操作できます。次に、オブジェクトのsaveメソッドを呼び出して、ディスクに保存できます。しかし、結果のxmlを画面に出力する方法があると思っていました。見つからないようです。ファイルに出力してからファイルから画面に出力する以外の方法はありますか?
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
をご覧ください
Community Extensionsを機能させることができなかったので、とにかく何かを追加でインストールする必要はありません。 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
などのプロパティ。これらのプロパティには、ソースがそうである限り、すでにインデントされたコードが必要です。
これは古いスレッドですが、ハックな答えを共有したいと思いました。 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に送り返しましたが、完全に機能しました