Экспорт данных из XML в CSV - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть 100 zip-файлов с 10-20 xml для каждого zip-файла.Мне нужно экспортировать определенный элемент тега в CSV.Например, у меня есть 20 zip-файлов с 10 xml каждый (20 * 10 = 200) 200 строк должны присутствовать в одном CSV.

Пример XML-кода:

    <?xml version='1.0' encoding='UTF-8'?>
    <bookstore>
      <book category="children">
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2019</year>
        <price>20.99</price>
      </book>
    </bookstore>

Мне нужно экспортироватьназвание и цена в CSV.

Ответы [ 3 ]

1 голос
/ 28 апреля 2019

попробуй что-то вроде этого:

[Void][Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')  

#take all zip files
Get-ChildItem "C:\temp\test1" -file -Filter "*.zip" | %{

        #take only xml file
        [IO.Compression.ZipFile]::OpenRead($_.FullName).Entries | where Fullname -like "*.xml" | %{

        #extract xml only
        $PathXMLFileextracted="C:\temp\" + $_.name
        [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $PathXMLFileextracted, $true)

        #take content of xml
        [XML] $xml=get-content $PathXMLFileextracted

        #remove new xml created (for clean)
        Remove-Item $PathXMLFileextracted

        #take necessary data
        $xml.bookstore.book | select title, price
        }


} | export-csv "c:\temp\result.csv" -NoTypeInformation # export result to csv
0 голосов
/ 28 апреля 2019

Итак .... это ....

[xml]$XmlDoc = @'
<?xml version='1.0' encoding='UTF-8'?>
<bookstore>
    <book category="children">
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2019</year>
    <price>20.99</price>
    </book>
</bookstore>
'@


$XmlDoc.bookstore.book | 
Select-Object -Property title, price

# Results

title        price
-----        -----
Harry Potter 20.99



$XmlDoc.bookstore.book | 
Select-Object -Property title, price | 
Export-Csv -Path 'E:\Temp\BookList.csv'

Import-Csv -Path 'E:\Temp\BookList.csv'

# Results

title        price
-----        -----
Harry Potter 20.99
0 голосов
/ 27 апреля 2019

Это начало. Ключ должен привести к [xml]. Там нет командлета "import-xml". Вы захотите выбрать то, что хотите, из объекта powershell $ xml перед экспортом в csv. $ xml.save ('file.xml') для экспорта обратно в xml.

PS /Users/js> [xml]$xml = get-content file.xml
PS /Users/js> $xml

xml                            bookstore
---                            ---------
version="1.0" encoding="UTF-8" bookstore

PS /Users/js> $xml | export-csv file.csv
PS /Users/js> get-content file.csv
"xml","bookstore"
"version=""1.0"" encoding=""UTF-8""","System.Xml.XmlElement"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...