Question Editer en masse des fichiers XML

Plus d'informations
il y a 11 ans 4 mois #18363 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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 4 mois #18364 par Laurent Dardenne
Salut,
Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. écrit:

J'ai du mal a voir mon erreur

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.

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.

Plus d'informations
il y a 11 ans 4 mois #18367 par kinder540
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 \&quot;FILENAME = $filenameinxml\&quot;[/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.

Plus d'informations
il y a 11 ans 4 mois #18369 par Laurent Dardenne
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:

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 ?

Sans données de test, pas grand chose :P

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 &gt; de Powershell ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 4 mois #18372 par Philippe
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 \&quot;.... La déclaration XML doit être le premier noeud ....\&quot;

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.

Plus d'informations
il y a 11 ans 4 mois #18375 par Laurent Dardenne
6ratgus écrit:

tu cumule tous les fichier et donc les entêtes de fichiers xml

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 confirmer :laugh:

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.053 secondes
Propulsé par Kunena