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?
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
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
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.
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