Ответы пользователя по тегу XML
  • Как закрыть элемент root в XML силами PowerShell и экспортировать пачку файлов XML в единый CSV?

    @asoplevenko
    программист 1С
    Доброго времени суток.

    1. Если мы точно знаем как поврежден xml файл – то можно его исправить. Для этого сначала загружаем содержимое файла как текст. Проверяем наличие ошибки, исправляем содержимое, и только потом преобразуем в xml.
    $WorkFolder = "c:\WorkFolder"
    $LogFile = $WorkFolder + "\" + "sample_0001.log"
    $FileContent = (Get-Content $LogFile).Trim()
    if (-not ($FileContent -match "</root>$")){$FileContent += "</root>"}
    [xml]$XmlFile = $FileContent


    2. Обходить файлы в каталоге/каталогах можно с помощью командлета Get-ChildItem. Он позволяет задать отбор файлов по шаблону. Собирать данные csv в одном файле позволяет опция -Append командлета Export-Csv.
    $WorkFolder = "c:\WorkFolder"
    $ResultFile = "$WorkFolder\result.csv"
    
    Get-ChildItem "$WorkFolder\*.log" | ForEach-Object {
    
        $FileContent = (Get-Content $_).Trim()
        if (-not ($FileContent -match "</root>$")){$FileContent += "</root>"}
    
        [xml]$XmlFile = $FileContent
    
        $XmlFile.root.item | Select-Object @(
            @{l="date"; e={$_.date}}
            @{l="time"; e={$_.time}}
            @{l="data1"; e={$_.data1}}
            ) | Export-Csv -Path $ResultFile -NoTypeInformation -Append -Encoding UTF8
    }


    Протестировано на Powershell 5.1
    Ответ написан
    2 комментария