-1
votes

Exportation de données XML à CSV

J'ai 100 fichiers zip avec 10-20 xml pour chaque fichier zip. J'ai besoin d'exporter un élément de balise spécifique à la CSV. Par exemple, j'ai 20 fichiers zip avec 10 xml chacun (20 * 10 = 200) 200 lignes sont dignes dans un CSV.

Exemple XML Code: P>

    <?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>


2 commentaires

dans votre question, vous devez inclure ce que vous avez essayé jusqu'à présent pour résoudre le problème


Dans quelle partie rencontrez-vous des problèmes? Obtenir les fichiers des archives ZIP? Obtenir le contenu des fichiers? convertir en objets XML? Obtenir les deux propriétés que vous voulez? Exporter vers la CSV? ////// Vous n'avez pas posé de question ... [ Grin ]


3 Réponses :


0
votes

Ceci est un début. La clé est de se lancer vers [XML]. Il n'y a pas de cmdlet "importateur-xml". Vous voudrez sélectionner ce que vous voulez de l'objet PowerShell $ XML avant d'exporter vers CSV. $ xml.save ('fichier.xml') pour l'exporter sur 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"


0 commentaires

0
votes

Alors .... Ceci ....

[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 commentaires

1
votes

Essayez quelque chose comme ceci:

[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 commentaires