2015-09-15 6 views
-1

У меня есть следующий код для экспорта XML в формат CSV. Код просто создает пустые CSV-файлы без содержимого. Любая идея, как я могу заставить код работать?Экспорт XML в CSV

$in_root = "C:\Temp\xml" 
$out_root = "C:\Temp\csv" 

$files = Get-ChildItem -Path $in_root -File 

foreach ($file in $files) { 
    $xml = [xml](Get-Content -Path $file.FullName -Raw) 
    $props = @{} 
    foreach ($item in $xml.table.row.col) { 
    $props[$item.name] = $item."#text" 
    } 

    [PSCustomObject]$props | 
    Export-Csv -NoTypeInformation -Path (Join-Path -Path $out_root -ChildPath "$($file.BaseName).csv") 
} 

Вот пример XML-файл:

<?xml version="1.0"?> 
<ns0:Root xmlns:ns0="http://Inbound.Schema0"> 
    <BookAttribute> 
    <MainTitle>April 2010: The United States Constitution by United States</MainTitle> 
    <Courtesy_of> berg DVD - April 2010</Courtesy_of> 
    <Title_Heading>The United States Constitution by United States</Title_Heading> 
    <caption>Bibliographic Record</caption> 
    <Firstauths>United States</Firstauths> 
    <Firsttitls>The United States Constitution</Firsttitls> 
    <Naturalsprache>English</Naturalsprache> 
    <FirstLoolassC>JK: Political science: Political inst. and pub. Admin.: United States</FirstLoolassC> 
    <Onesobject>United States</Onesobject> 
    <Twosobject>Government</Twosobject> 
    <Etxextnumber>5</Etxextnumber> 
    <Releasedate>1975-12-01</Releasedate> 
    <Copyrighttus>Not copyrighted in the United States.</Copyrighttus> 
    <Baseddirectory>/etext90</Baseddirectory> 
    <Newlinknumber>etext90</Newlinknumber> 
    </BookAttribute> 
</ns0:Root> 

Нужный выход будет просто точкой с запятой-разделенных столбцы.

ответ

0

Для одна вещь ваши данные XML не имеет элементов table, row или col, так $xml.table.row.col не будет работать. Попробуйте создать пользовательские объекты из дочерних узлов ваших узлов <BookAttribute>:

$xml.SelectNodes('//BookAttribute') | ForEach-Object { 
    $o = New-Object -Type PSCustomObject 
    $_.ChildNodes | ForEach-Object { 
    $o | Add-Member -Type NoteProperty -Name $_.Name -Value $_.'#text' 
    } 
    $o 
} | Export-Csv 'C:\path\to\output.csv' -Delimiter ';' -NoType 
+0

Уважаемые Викестры. Есть ли веская причина ... почему вы понижаете вопрос? Можете ли вы удалить свое понижение. Даже Гений, как Эйнштейн, должен научиться ходить. –

+0

@JohnKings Сдвиг не мой. –