Использование PowerShell для загрузки XML и сохранения в виде файла CSV?

Я новичок в PowerShell, но имею большой опыт работы с C#.

Задача, которую я пытаюсь выполнить, состоит в том, чтобы загрузить некоторый 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.


person Frode Lillerud    schedule 30.06.2009    source источник


Ответы (2)


вы можете сделать что-то вроде:

$downloaded.result.case | %{ $_.InputData }`
| select Firstname,Lastname `
| Export-Csv -path foo.csv -NoTypeInformation
person Scott Weinstein    schedule 30.06.2009
comment
Очень хорошо, но как я могу перебрать каждый случай, а не жестко запрограммировать его на случай [0]? Кроме того, столбцы в CSV-файле разделяются запятыми. Как выбрать разделитель? - person Frode Lillerud; 30.06.2009
comment
отредактированный ответ на ваш первый комментарий В. Что касается второго, в PowerShell v2 есть параметр -delimiter, но в v1 для этого требуется решение, написанное вручную - person Scott Weinstein; 30.06.2009

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

person Tomalak    schedule 30.06.2009