2009-06-30 25 views
2

PowerShellはかなり新しくなっていますが、C#の背景が強いです。PowerShellを使用してXMLをダウンロードし、CSVファイルとして保存しますか?

私が達成しようとしている作業は、XMLをダウンロードし、XMLファイルの要素の一部を.csvファイルに保存することです。 XMLのすべての要素を必要とするわけではありません。

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

は、今私はからの特性のほんの一部を抽出する必要があります。私はこのようなものを使用してXMLをダウンロードすることができた

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

XMLは次のようになりますそのXMLをCSVファイルにエクスポートします。

$ downloads.result.case [0] .InputData.Firstnameを使用してデータにアクセスできますが、いくつかのプロパティを抽出してCSVとして保存する方法についてのアドバイスが必要です。

答えて

4

あなたのような何かができる:

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

非常に良いが、どのように私はすべてのケースをループ、[0]事例にハードコーディングすることはできませんか? また、.csvファイルの列はカンマで区切られます。区切り文字はどのようにして選択できますか? –

+0

編集した回答が最初のコメントになります。Q. PowerShell v2では、-delimiterオプションがありますが、v1では手作業でコード化されたソリューションが必要です –

0

XSLTは、XMLを他のものに変換する際の標準的な方法です。

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

一部PowerShellのコンテキスト:www.hanselman.com: XSLT with Powershell

関連する問題