web-dev-qa-db-ja.com

Powershell、画面にxmlを出力

PowerShellを学習しています。 xmlファイルを変数にロードして操作できます。次に、オブジェクトのsaveメソッドを呼び出して、ディスクに保存できます。しかし、結果のxmlを画面に出力する方法があると思っていました。見つからないようです。ファイルに出力してからファイルから画面に出力する以外の方法はありますか?

26
Vimes

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をご覧ください

4
stej

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
40
samaspin

私が知っている唯一の方法は、System.Xmlouterxmlinnerxmlなどのプロパティ。これらのプロパティには、ソースがそうである限り、すでにインデントされたコードが必要です。

19
Emiliano Poggi

これは古いスレッドですが、ハックな答えを共有したいと思いました。 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に送り返しましたが、完全に機能しました

0
Jared Skarstedt