2009-06-30 4 views
2

Ich bin ziemlich neu in PowerShell, aber habe einen starken C# Hintergrund.PowerShell zum Herunterladen von XML verwenden und als CSV-Datei speichern?

Die Aufgabe, die ich versuche zu erreichen, ist, einige XML herunterzuladen, und dann einige der Elemente aus der XML-Datei in einer .csv-Datei zu speichern. Ich brauche nicht alle Elemente aus dem XML, nur ein paar Dinge.

Die XML sieht ungefähr so ​​aus:

<result> 
    <case> 
    <InputData> 
     <Id>1</Id> 
     <Firstname>John</Firstname> 
     <Lastname>Smith</Lastname> 
     <....lots more properties and subnodes I don't need> 
    </InputData> 
    </case> 
</result> 

Ich habe es geschafft, die XML mit so etwas wie dies zum Download:

$downloaded = ([Xml](New-Object Net.WebClient).DownloadString("http://url.to.server/file.xml")) 

Jetzt muss ich aus um nur einige der Eigenschaften extrahieren das XML und exportieren Sie es in eine CSV-Datei.

Ich verstehe, dass ich die Daten mit $ downloaded.result.case [0] .InputData.Firstname erreichen kann, aber ein paar Ratschläge benötigen, wie Sie einige der Eigenschaften extrahieren und als CSV speichern können.

Antwort

4

Sie so etwas wie tun könnte:

$downloaded.result.case | %{ $_.InputData }` 
| select Firstname,Lastname ` 
| Export-Csv -path foo.csv -NoTypeInformation 
+0

Sehr gut, aber wie kann ich eine Schleife über jeden Fall, hart codieren nicht Fall [0]? Auch die Spalten in der CSV-Datei werden durch Komma getrennt. Wie kann ich das Trennzeichen auswählen? –

+0

bearbeitete Antwort, um Ihren ersten Kommentar zu adressieren. F. Bezüglich der Sekunde, in PowerShell v2, gibt es eine -delimiter Wahl, aber in v1 erfordert es eine handcodierte Lösung –

0

XSLT ist ein (der?) Standardweg, wenn es darum geht, XML in etwas anderes zu verwandeln.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 

    <xsl:template match="InputData"> 
    <xsl:value-of select="concat('"', Id, '"')" /> 
    <xsl:value-of select="','" /> 
    <xsl:value-of select="concat('"', Firstname, '"')" /> 
    <xsl:value-of select="','" /> 
    <xsl:value-of select="concat('"', Lastname, '"')" /> 
    <xsl:value-of select="&#10;" /> 
    </xsl:template> 

</xsl:stylesheet> 

Einige Kontext Powershell: www.hanselman.com: XSLT with Powershell

Verwandte Themen