web-dev-qa-db-fra.com

PowerShell, sortie XML à l'écran

J'apprends PowerShell. Je peux charger un fichier XML dans une variable et le manipuler. Je peux ensuite appeler la méthode de sauvegarde de l'objet pour enregistrer sur le disque. Je m'attendais cependant à ce qu'il y ait un moyen de générer le résultat XML à l'écran. Je n'arrive pas à en trouver un. Existe-t-il un moyen, autre que la sortie dans un fichier, puis un fichier à l'écran?

18
Vimes

Regardez module PSCX . Vous trouverez Format-Xml cmdlet qui fait exactement cela.

Exemple:

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

produira:

<root>
  <so>
    <user name="john">thats me</user>
    <user name="jane">do you like her?</user>
  </so>
</root>

Pour plus d'informations, regardez help format-xml -full

4
stej

Je ne pouvais pas faire fonctionner les extensions de communauté et je ne voulais pas vraiment installer quelque chose de plus, de toute façon. J'ai trouvé une autre approche sur un blog 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
33
samaspin

Le seul moyen que je connaisse consiste à utiliser des propriétés System.Xml telles que outerxml ou innerxml. Le code de ces propriétés doit déjà être mis en retrait aussi longtemps que la source.

16
Emiliano Poggi

Ceci est un vieux fil mais je voulais partager ma réponse hackish. J'avais besoin d'envoyer le xml à php et je ne pouvais rien envoyer d'autre. 

la réponse que j’ai trouvée était de sauvegarder le fichier sur le disque, puis d’exécuter un contenu sur le fichier. Cela renvoie le texte XML et rien d'autre:

#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"

Dans mon cas, je le renvoyais à PHP et cela fonctionnait parfaitement

0
Jared Skarstedt