使用PowerShell下载XML并保存为CSV文件?

问题描述:

我对PowerShell相当陌生,但拥有强大的C#背景。使用PowerShell下载XML并保存为CSV文件?

我试图完成的任务是下载一些XML,然后将一些XML文件中的某些元素保存在.csv文件中。我不需要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:

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

现在我需要提取短短数从属性XML,并将其导出到CSV文件。

我知道我可以通过$ downloaded.result.case [0] .InputData.Firstname访问数据,但需要一些关于如何提取一些属性并另存为CSV的建议。

,你可以这样做:

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

非常好,但我怎么能遍历所有情况下,没有硬编码到[0]呢? 此外,.csv文件中的列以逗号分隔。我怎样才能选择分隔符? – 2009-06-30 19:01:59

当涉及到将XML转换为其他内容时,XSLT是一种(?)标准方式。

<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