Question
Editer en masse des fichiers XML
- kinder540
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 11 ans 4 mois #18363
par kinder540
Editer en masse des fichiers XML a été créé par kinder540
Bonjour tout le monde,
je suis entrain de faire un script qui en gros édit en masse des fichiers XML, je me déplace donc dans une arborescence qui est là suivante : C:\Users\Jean\Desktop\ALTO\1868\
à l'intérieur du dossier 1868, j'ai 50 dossiers qui contiennent a peu près 20 fichiers XML chacun. Exemple
C:\Users\Jean\Desktop\ALTO\1868\B751063001P4NS1698_18680104\B751063001P4NS1698_18680104_001.xml
Jusqu'ici rien de compliquer voilà mon code :
[code:1]$folder = \"C:\Users\Jean\Desktop\ALTO\1868\"
Set-Location $folder
$folders = Get-ChildItem $folder
foreach($files in $folders){
Set-Location $folder
$xmlfiles = Get-ChildItem $files
Set-Location \"$folder\$files\"
ls}[/code:1]
Et quand j'exécute, j'ai tous les fichiers qui s'affichent.
[code:1] Répertoire : C:\Users\Jean\Desktop\ALTO\1868\B751063001P4NS1698_18681226
Mode LastWriteTime Length Name
----
----
-a--- 31/10/2014 14:03 154940 B751063001P4NS1698_18681226_001T.xml
-a--- 31/10/2014 14:04 554113 B751063001P4NS1698_18681226_002T.xml
-a--- 31/10/2014 14:04 574124 B751063001P4NS1698_18681226_003T.xml
-a--- 31/10/2014 14:04 476555 B751063001P4NS1698_18681226_004T.xml
-a--- 31/10/2014 14:03 580878 B751063001P4NS1698_18681226_005T.xml
-a--- 31/10/2014 14:04 547250 B751063001P4NS1698_18681226_006T.xml
-a--- 31/10/2014 14:03 483760 B751063001P4NS1698_18681226_007T.xml
-a--- 31/10/2014 14:03 23146 B751063001P4NS1698_18681226_008T.xml
-a--- 31/10/2014 14:03 413492 B751063001P4NS1698_18681226_009T.xml
-a--- 31/10/2014 14:04 388620 B751063001P4NS1698_18681226_010T.xml
-a--- 31/10/2014 14:03 355078 B751063001P4NS1698_18681226_011T.xml
-a--- 31/10/2014 14:03 116257 B751063001P4NS1698_18681226_012T.xml
-a--- 31/10/2014 14:03 292812 B751063001P4NS1698_18681226_013T.xml
-a--- 31/10/2014 14:03 342813 B751063001P4NS1698_18681226_014T.xml
-a--- 31/10/2014 14:04 462778 B751063001P4NS1698_18681226_015T.xml
-a--- 31/10/2014 14:04 436451 B751063001P4NS1698_18681226_016T.xml
-a--- 31/10/2014 14:04 374605 B751063001P4NS1698_18681226_017T.xml [/code:1]
Le problème que j'ai c'est au moment de l'ouvrir via get-content xml :
[code:1]$xml = [xml](Get-Content -Path $xmlfiles)
#permet de récupérer la valeur de la balise fileName
$filenameinxml = $xml.alto.Description.sourceImageInformation.fileName
Write-Output $filenameinxml[/code:1]
J'ai une erreur [code:1]Erreur: «Déclaration XML inattendue. La déclaration XML doit être le premier noeud du document et aucun
espace blanc ne doit être placé avant. Ligne 1098, position 3.»[/code:1]
Le truc c'est que si je fais un simple [code:1]get-content $xmlfiles[/code:1]je vois bien l'intégralité des fichiers XML s'afficher.
J'ai du mal a voir mon erreur, si quelqu'un peut m'aider, il est le bienvenu, et bien évidemment je reste a votre écoute si vous avez besoin de plus d'informations.
Cordialement,
Paul.<br><br>Message édité par: Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser., à: 7/11/14 11:47
je suis entrain de faire un script qui en gros édit en masse des fichiers XML, je me déplace donc dans une arborescence qui est là suivante : C:\Users\Jean\Desktop\ALTO\1868\
à l'intérieur du dossier 1868, j'ai 50 dossiers qui contiennent a peu près 20 fichiers XML chacun. Exemple
C:\Users\Jean\Desktop\ALTO\1868\B751063001P4NS1698_18680104\B751063001P4NS1698_18680104_001.xml
Jusqu'ici rien de compliquer voilà mon code :
[code:1]$folder = \"C:\Users\Jean\Desktop\ALTO\1868\"
Set-Location $folder
$folders = Get-ChildItem $folder
foreach($files in $folders){
Set-Location $folder
$xmlfiles = Get-ChildItem $files
Set-Location \"$folder\$files\"
ls}[/code:1]
Et quand j'exécute, j'ai tous les fichiers qui s'affichent.
[code:1] Répertoire : C:\Users\Jean\Desktop\ALTO\1868\B751063001P4NS1698_18681226
Mode LastWriteTime Length Name
----
----
-a--- 31/10/2014 14:03 154940 B751063001P4NS1698_18681226_001T.xml
-a--- 31/10/2014 14:04 554113 B751063001P4NS1698_18681226_002T.xml
-a--- 31/10/2014 14:04 574124 B751063001P4NS1698_18681226_003T.xml
-a--- 31/10/2014 14:04 476555 B751063001P4NS1698_18681226_004T.xml
-a--- 31/10/2014 14:03 580878 B751063001P4NS1698_18681226_005T.xml
-a--- 31/10/2014 14:04 547250 B751063001P4NS1698_18681226_006T.xml
-a--- 31/10/2014 14:03 483760 B751063001P4NS1698_18681226_007T.xml
-a--- 31/10/2014 14:03 23146 B751063001P4NS1698_18681226_008T.xml
-a--- 31/10/2014 14:03 413492 B751063001P4NS1698_18681226_009T.xml
-a--- 31/10/2014 14:04 388620 B751063001P4NS1698_18681226_010T.xml
-a--- 31/10/2014 14:03 355078 B751063001P4NS1698_18681226_011T.xml
-a--- 31/10/2014 14:03 116257 B751063001P4NS1698_18681226_012T.xml
-a--- 31/10/2014 14:03 292812 B751063001P4NS1698_18681226_013T.xml
-a--- 31/10/2014 14:03 342813 B751063001P4NS1698_18681226_014T.xml
-a--- 31/10/2014 14:04 462778 B751063001P4NS1698_18681226_015T.xml
-a--- 31/10/2014 14:04 436451 B751063001P4NS1698_18681226_016T.xml
-a--- 31/10/2014 14:04 374605 B751063001P4NS1698_18681226_017T.xml [/code:1]
Le problème que j'ai c'est au moment de l'ouvrir via get-content xml :
[code:1]$xml = [xml](Get-Content -Path $xmlfiles)
#permet de récupérer la valeur de la balise fileName
$filenameinxml = $xml.alto.Description.sourceImageInformation.fileName
Write-Output $filenameinxml[/code:1]
J'ai une erreur [code:1]Erreur: «Déclaration XML inattendue. La déclaration XML doit être le premier noeud du document et aucun
espace blanc ne doit être placé avant. Ligne 1098, position 3.»[/code:1]
Le truc c'est que si je fais un simple [code:1]get-content $xmlfiles[/code:1]je vois bien l'intégralité des fichiers XML s'afficher.
J'ai du mal a voir mon erreur, si quelqu'un peut m'aider, il est le bienvenu, et bien évidemment je reste a votre écoute si vous avez besoin de plus d'informations.
Cordialement,
Paul.<br><br>Message édité par: Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser., à: 7/11/14 11:47
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 4 mois #18364
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Editer en masse des fichiers XML
Salut,
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. écrit:
Il se peut que certains fichier XML soient mal formés, si tu as un XSD tu peux aussi valider son contenu .
Pour traiter un document XML il doit être bien formé ( respect de la structure) et valide ( respect des données contenu, ex pas de string dans un champ numérique). Dans ce cas on peut le lire, mais le résultat sera faux.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. écrit:
L'usage du [XML] transforme l'intégralité du fichier lu en un document XML, le get-content seul lit le fichier et renvoi des string, il n'y a pas de conversion vers une nouvelle structure.J'ai du mal a voir mon erreur
Il se peut que certains fichier XML soient mal formés, si tu as un XSD tu peux aussi valider son contenu .
Pour traiter un document XML il doit être bien formé ( respect de la structure) et valide ( respect des données contenu, ex pas de string dans un champ numérique). Dans ce cas on peut le lire, mais le résultat sera faux.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- kinder540
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 11 ans 4 mois #18367
par kinder540
Réponse de kinder540 sur le sujet Re:Editer en masse des fichiers XML
Bonjour,
Merci de votre réponse, mais je ne peux pas vérifier si le XML est bien formé, mais j'ai pris testé avec un p'tit script tous les XML d'un des dossier
[code:1] $xml = [xml](Get-Content -Encoding UTF8 -Path $xmlfiles)
$filenameinxml = $xml.alto.Description.sourceImageInformation.fileName
Write-Output \"FILENAME = $filenameinxml\"[/code:1]
et je récupère bien : [code:1]FILENAME = B751063001P4NS1698_18680104_001T.tif[/code:1]
Je pense que c'est au niveau de mon foreach le problème, fin j'en sais trop rien, mais je ne pense vraiment pas que le problème vienne des fichiers XML.
Qu'en penses-tu ?
Cordialement,
Paul.
Merci de votre réponse, mais je ne peux pas vérifier si le XML est bien formé, mais j'ai pris testé avec un p'tit script tous les XML d'un des dossier
[code:1] $xml = [xml](Get-Content -Encoding UTF8 -Path $xmlfiles)
$filenameinxml = $xml.alto.Description.sourceImageInformation.fileName
Write-Output \"FILENAME = $filenameinxml\"[/code:1]
et je récupère bien : [code:1]FILENAME = B751063001P4NS1698_18680104_001T.tif[/code:1]
Je pense que c'est au niveau de mon foreach le problème, fin j'en sais trop rien, mais je ne pense vraiment pas que le problème vienne des fichiers XML.
Qu'en penses-tu ?
Cordialement,
Paul.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 4 mois #18369
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Editer en masse des fichiers XML
Effectivement je pensais à un problème potentiel sur l'encodage.
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. écrit:
Vérifie si les collections $Folder et $Xmlfiles contiennent bien ce qu'elles indiquent.
Ensuite ta construction (Get-Content -Path $xmlfiles) me laisse songeur, tu utilises la version 3 ou > de Powershell ?
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. écrit:
Sans données de test, pas grand choseJe pense que c'est au niveau de mon foreach le problème, fin j'en sais trop rien, mais je ne pense vraiment pas que le problème vienne des fichiers XML.
Qu'en penses-tu ?
Vérifie si les collections $Folder et $Xmlfiles contiennent bien ce qu'elles indiquent.
Ensuite ta construction (Get-Content -Path $xmlfiles) me laisse songeur, tu utilises la version 3 ou > de Powershell ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 11 ans 4 mois #18372
par Philippe
Réponse de Philippe sur le sujet Re:Editer en masse des fichiers XML
bonjour Lanrent et Paul
paul ton problème vient très probablement que quand tu fait ton get-content unique tu cumule tous les fichier et donc les entêtes de fichiers xml d'où le message d'erreur \".... La déclaration XML doit être le premier noeud ....\"
laurent avait déjà donner un début de solution a ce type de problème ici
une autre technique si ca peut te servir<br><br>Message édité par: 6ratgus, à: 7/11/14 15:22
paul ton problème vient très probablement que quand tu fait ton get-content unique tu cumule tous les fichier et donc les entêtes de fichiers xml d'où le message d'erreur \".... La déclaration XML doit être le premier noeud ....\"
laurent avait déjà donner un début de solution a ce type de problème ici
une autre technique si ca peut te servir<br><br>Message édité par: 6ratgus, à: 7/11/14 15:22
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 4 mois #18375
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Editer en masse des fichiers XML
6ratgus écrit:
Oui je pense aussi, le doute était si [XML] s'applique à l'intégralité ou à chaque fichier et j'avais autre chose à faire que de créer un jeux de test pour confirmertu cumule tous les fichier et donc les entêtes de fichiers xml
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Editer en masse des fichiers XML