2009-06-30 6 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 파일로 내 보냅니다.

$ downloaded.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> 

일부 파워 쉘 컨텍스트 : www.hanselman.com: XSLT with Powershell

관련 문제