Question Fusionner 2 fichiers xml

Plus d'informations
il y a 1 an 5 mois #32713 par Boulch
Fusionner 2 fichiers xml a été créé par Boulch
Bonjour, 
je tente depuis quelques semaines de fusionner 2 fichiers XML en powershell mais je n'y connais rien.
Voici les deux fichiers que récupère mon script : 
wcf.tourinsoft.com/Syndication/3.0/cdt85...888f9c1a4d/$metadata
wcf.tourinsoft.com/Syndication/3.0/cdt85...8666a7e35f/$metadata

L'un possède des données simples, l'autre des données enrichies et j'aimerai que l'un complète l'autre pour avoir un fichier unique complet.
J'ai fait cela : 
$WebRequest = New-Object System.Net.WebClient
$WebRequest.DownloadFile([System.Uri]'https://wcf.tourinsoft.com/Syndication/3.0/cdt85/953fa134-788f-441d-bc2e-c4888f9c1a4d/$metadata', "C:\Users\t-aubry\Desktop\tourinsoft\flux\Restaurants\test1.xml")
$WebRequest.DownloadFile([System.Uri]'https://wcf.tourinsoft.com/Syndication/3.0/cdt85/2a2f82af-f82f-4831-b958-798666a7e35f/$metadata', "C:\Users\t-aubry\Desktop\tourinsoft\flux\Restaurants\test2.xml")
Get-Content C:\Users\toto\Desktop\tourinsoft\flux\test1.xml, C:\Users\toto\Desktop\tourinsoft\flux\test2.xml | Out-File C:\Users\toto\Desktop\tourinsoft\flux\merge.xml

Mais cela copie le fichier 2 a la suite du fichier 1. Je doute que cela soit la structure voulu...

Merci d'avance, je suis perdu ;)

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

Plus d'informations
il y a 1 an 5 mois #32714 par Boulch
Réponse de Boulch sur le sujet Fusionner 2 fichiers xml
Dans l'idéal, l'objectif final sera un fichier json mais je me dit étape par étape.

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

Plus d'informations
il y a 1 an 5 mois - il y a 1 an 5 mois #32719 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Fusionner 2 fichiers xml
Salut,
il faut transformer le fichier texte .xml en document XML :
$WebRequest = New-Object System.Net.WebClient
$WebRequest.DownloadFile([System.Uri]'https://wcf.tourinsoft.com/Syndication/3.0/cdt85/953fa134-788f-441d-bc2e-c4888f9c1a4d/$metadata', "C:\Temp\test1.xml")
$WebRequest.DownloadFile([System.Uri]'https://wcf.tourinsoft.com/Syndication/3.0/cdt85/2a2f82af-f82f-4831-b958-798666a7e35f/$metadata', "C:\Temp\test2.xml")
[xml]$A=Get-Content C:\Temp\test1.xml
[xml]$B=Get-Content C:\Temp\test2.xml


Un essai rapido:
$a.edmx.DataServices.schema[1].AppendChild($b.edmx.DataServices.schema[1].EntityContainer)
Exception lors de l'appel de «AppendChild» avec «1» argument(s): «Le noeud à insérer provient d'un contexte de document différent.»

Effectivement les deux objets sont similaires mais a chacun un namespace différent. Une piste ?
stackoverflow.com/questions/3019136/erro...ent-document-context

Tutoriels PowerShell
Dernière édition: il y a 1 an 5 mois par Laurent Dardenne.
Les utilisateur(s) suivant ont remercié: Boulch

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

Plus d'informations
il y a 1 an 5 mois #32726 par Boulch
Réponse de Boulch sur le sujet Fusionner 2 fichiers xml
Finalement j'ai réussi en faisant ça :
$WebRequest = New-Object System.Net.WebClient
$WebRequest.DownloadFile([System.Uri]'https://wcf.tourinsoft.com/Syndication/3.0/cdt85/953fa134-788f-441d-bc2e-c4888f9c1a4d/Objects', "C:\Users\toto\Desktop\tourinsoft\flux\Restaurants\test1.xml") #téléchargement des fichiers de data simples et enrichies
$WebRequest.DownloadFile([System.Uri]'https://wcf.tourinsoft.com/Syndication/3.0/cdt85/2a2f82af-f82f-4831-b958-798666a7e35f/Objects', "C:\Users\toto\Desktop\tourinsoft\flux\Restaurants\test2.xml")


$xmldoc = new-object xml
$rootnode = $xmldoc.createelement("stuff")
$xmldoc.appendchild($rootnode)
$finalxml = $null
$files = gci C:\Users\toto\Desktop\tourinsoft\flux\Restaurants\

foreach ($file in $files) {
    [xml]$xmlstuff = gc $file.fullname
    $innerel = $xmlstuff.selectnodes("/*/*")

    foreach ($inone in $innerel) {
        $inone = $xmldoc.importnode($inone, $true)
        $rootnode.appendchild($inone)
    }
}
# get rid of multiple spaces. might want to add regex to replace line breaks etc.
foreach ($t34 in $rootnode.selectnodes("//*/text()")) {
    $t34.innertext = [regex]::replace($t34.innertext,"\s+"," ")
}

# create and set xmlwritersettings
$xws = new-object system.xml.XmlWriterSettings
$xws.Indent = $true
$xws.indentchars = "`t"
$xtw = [system.xml.XmlWriter]::create("C:\Users\toto\Desktop\tourinsoft\flux\merge.xml", $xws)
$xmldoc.WriteContentTo($xtw)
$xtw.flush()
$xtw.dispose()

Le script évolue mais il reste certains problèmes, l'encodage ne semble pas fonctionner, j'ai un problème avec les accents.
Aussi j'ai plusieurs fois xml:space="preserve" dans mon code, j'ai essayer de rajouter :
[code]$xws.Encoding = [System.Text.Encoding]::Unicode
[/code]
Mais cela ne fonctionne pas...

Quelqu'un a une piste ?

 

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

Plus d'informations
il y a 1 an 5 mois #32728 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Fusionner 2 fichiers xml
Vérifie déjà si l'encodage est correct à la réception du fichier.

Tutoriels PowerShell
Les utilisateur(s) suivant ont remercié: Boulch

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

Plus d'informations
il y a 1 an 5 mois #32735 par Boulch
Réponse de Boulch sur le sujet Fusionner 2 fichiers xml
Après le téléchargement des fichiers, les accents sont bien présents, c'est lors de la fusion que le fichier xml ne prend plus les accents, j'ai vérifié et l'encodage semble ètre en utf-8 mais lorsque j'ouvre dans chrome les accents ne sont pas pris...

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

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