Question Insérer une ligne de texte, à plusieurs endroits dans un fichier.

Plus d'informations
il y a 5 mois 1 semaine #34471 par Rudy
Bonjour à vous, 

Je vous donne le contexte.  J'ai une application que je dois mettre à jour en gardant le fichier de configuration.  Cette application contient différents modules.  Chaque module a une fonction "Send", et après avoir installé la nouvelle version, je voudrais reprendre mon fichier de configuration mais y ajouter une ligne pour chaque module. 

Le fichier de config est un XML. et donc dans ce fichier config.xml, j'ai plusieurs fois cette section: 

 <TargetDLL>SendRegistration.dll</TargetDLL>
<PluginSettings>
...
...
...
</PluginSettings>
Et donc, entre ces deux balises <PluginSettings></PluginSettings> qui suivent le <Targetdll>sendregistration.dll</targetdll>, je voudrais insérer une ligne contenant un nouveau paramètre ... je n'ai aucune idée de comment le faire.  Je suppose que la commande 'add-content' sera mon amie, mais ma compréhension de comment faire s'arrête à peu près là ... donc ... déjà merci à l'équipe :) 

Rudy
Merci pour le coup de main !

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

Plus d'informations
il y a 5 mois 1 semaine #34472 par Fabien
Bonjour Rudy,

Peux-tu me transmettre un exemple de fichier XML source et l'exemple de fichier XML de sortie ?
Les utilisateur(s) suivant ont remercié: Rudy

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

Plus d'informations
il y a 5 mois 1 semaine #34473 par Rudy
Hello Fabien,
Déjà, merci de m'aider. Je ne peux malheureusement pas partager le fichier en question dans son intégralité pour des raisons de propriété intellectuelle, mais en substance, cet extrait devrait être suffisant : (j'ai dû enlever certains morceaux ... désolé ... ) 

Voici mon fichier de départ ... Cette section se répète plusieurs fois :

<Registration>
<RegistrationName>Module1</RegistrationName>
<Modules>
<RegistrationElement>
<TargetDLL>AlphaBE.dll</TargetDLL>
<TargetClass>UcPluginTpAlphaBE</TargetClass>
<Text>Case details</Text>
<LanguageKey>CaseInput</LanguageKey>
<ImageIcon>pack://application:,,,/Presentation;component/resources/images/32/notebook.png</ImageIcon>
<PluginSettings>
</PluginSettings>
</RegistrationElement>
<RegistrationElement>
<TargetDLL>Capture.dll</TargetDLL>
<TargetClass />
<LanguageKey>Capture</LanguageKey>
<ImageIcon>pack://application:,,,/UiClient.Interfaces;component/resources/images/scan.png</ImageIcon>
<PluginSettings>
<Setting Key="DefaultScanSequence" Type="String" Value="13,11,0,1,2,3,4,25,22,14,12,5,6,7,8,9,27,24" />
<Setting Key="ShowRescanWarning" Type="Bool" Value="True" />
<Setting Key="DoQualityCheckForscans" Type="Bool" Value="False" />
<Setting Key="SetMissingpartsToNAMsgBox" Type="Bool" Value="True" />
<Setting Key="IgnoreRecommendedRescan" Type="Bool" Value="True" />
<Setting Key="DisplayScanCancelWarning" Type="Bool" Value="True" />
<Setting Key="CallbackUri" Type="String" Value="assembly:BeCallbackPugin.dll;type:OnCancelActionPlugin.BeCallbackPugin" />
<Setting Key="UseErrorBeep" Type="Bool" Value="True" />
<Setting Key="ShowRescanButton" Type="Bool" Value="False" />
</PluginSettings>
</RegistrationElement>
<RegistrationElement>
<TargetDLL>SendRegistration.dll</TargetDLL>
<TargetClass />
<Text>Send transaction</Text>
<LanguageKey>SendCase</LanguageKey>
<ImageIcon>pack://application:,,,/Presentation;component/Resources/Images/32/mail_send.png</ImageIcon>
<PluginSettings>
<Setting Key="NistTemplate" Type="String" Value="apfis.be-BE.xml" />
<Setting Key="StoreToDataAccessLayer" Type="String" Value="OnSuccess" />
<Setting Key="ViewInCaseLogButtonText" Type="String" Value="Go to caselog" />
<Setting Key="ViewInCaseLogField" Type="String" Value="" />
<Setting Key="PrintDialogType" Type="String" Value="Standard" />
<Setting Key="ActiveSendPlugins" Type="String" Value="FitPlus.AfisSender.dll;" />
<Setting Key="AllowPrintImageExport" Type="Bool" Value="True" />
<Setting Key="DisableSendButtonAfterSend" Type="Bool" Value="True" />
<Setting Key="PrintDialogDisplay" Type="String" Value="Embedded" />
<Setting Key="PrintImageExportForceGrayscale" Type="Bool" Value="True" />
<Setting Key="SendValidation" Type="String" Value="False" />
<Setting Key="NewCase" Type="String" Value="promptonsuccess" />
<Setting Key="RecreateExisting" Type="String" Value="alphaonly" />
</PluginSettings>
</RegistrationElement>
</Modules>
</Registration>


Voici à quoi il devrait ressembler après exécution du script :

<Registration>
<RegistrationName>Module1</RegistrationName>
<Modules>
<RegistrationElement>
<TargetDLL>AlphaBE.dll</TargetDLL>
<TargetClass>UcPluginTpAlphaBE</TargetClass>
<Text>Case details</Text>
<LanguageKey>CaseInput</LanguageKey>
<ImageIcon>pack://application:,,,/Presentation;component/resources/images/32/notebook.png</ImageIcon>
<PluginSettings>
</PluginSettings>
</RegistrationElement>
<RegistrationElement>
<TargetDLL>Capture.dll</TargetDLL>
<TargetClass />
<LanguageKey>Capture</LanguageKey>
<ImageIcon>pack://application:,,,/UiClient.Interfaces;component/resources/images/scan.png</ImageIcon>
<PluginSettings>
<Setting Key="DefaultScanSequence" Type="String" Value="13,11,0,1,2,3,4,25,22,14,12,5,6,7,8,9,27,24" />
<Setting Key="ShowRescanWarning" Type="Bool" Value="True" />
<Setting Key="DoQualityCheckForscans" Type="Bool" Value="False" />
<Setting Key="SetMissingpartsToNAMsgBox" Type="Bool" Value="True" />
<Setting Key="IgnoreRecommendedRescan" Type="Bool" Value="True" />
<Setting Key="DisplayScanCancelWarning" Type="Bool" Value="True" />
<Setting Key="CallbackUri" Type="String" Value="assembly:BeCallbackPugin.dll;type:OnCancelActionPlugin.BeCallbackPugin" />
<Setting Key="UseErrorBeep" Type="Bool" Value="True" />
<Setting Key="ShowRescanButton" Type="Bool" Value="False" />
</PluginSettings>
</RegistrationElement>
<RegistrationElement>
<TargetDLL>SendRegistration.dll</TargetDLL>
<TargetClass />
<Text>Send transaction</Text>
<LanguageKey>SendCase</LanguageKey>
<ImageIcon>pack://application:,,,/Presentation;component/Resources/Images/32/mail_send.png</ImageIcon>
<PluginSettings>
<Setting Key="NistTemplate" Type="String" Value="apfis.be-BE.xml" />
<Setting Key="StoreToDataAccessLayer" Type="String" Value="OnSuccess" />
<Setting Key="ViewInCaseLogButtonText" Type="String" Value="Go to caselog" />
<Setting Key="ViewInCaseLogField" Type="String" Value="" />
<Setting Key="PrintDialogType" Type="String" Value="Standard" />
<Setting Key="ActiveSendPlugins" Type="String" Value="FitPlus.AfisSender.dll;" />
<Setting Key="AllowPrintImageExport" Type="Bool" Value="True" />
<Setting Key="DisableSendButtonAfterSend" Type="Bool" Value="True" />
<Setting Key="PrintDialogDisplay" Type="String" Value="Embedded" />
<Setting Key="PrintImageExportForceGrayscale" Type="Bool" Value="True" />
<Setting Key="SendValidation" Type="String" Value="False" />
<Setting Key="NewCase" Type="String" Value="promptonsuccess" />
<Setting Key="RecreateExisting" Type="String" Value="alphaonly" />
<Setting Key="AutomaticMode" Type="Bool" Value="True" />
</PluginSettings>
</RegistrationElement>

</Modules>
</Registration>


Et ceci se répète plusieurs fois ... Comme je l'indiquais dans mon post précédent, la balise "<TargetDLL>SendRegistration.dll</TargetDLL>" se répète pour chaque module concerné ... et cette ligne (en évidence) doit être positionnée dans la section <PluginSettings> sous cette balise ""<TargetDLL>SendRegistration.dll</TargetDLL>""

Rudy
Merci pour le coup de main !

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

Plus d'informations
il y a 5 mois 6 jours #34474 par Fabien
Salut Rudy,

Désolé pour la réponse tardive, pas mal de taf en ce moment.
Voici le script que tu peux exécuter pour modifier ton fichier XML.
#Chemin du fichier XML
$Fichier_xml = "C:\Temp\Test\Logs.xml"
#Récupération du contenu
$booksXml = [xml](Get-Content $Fichier_xml)

#Ajouter les données dans le fichier XML
#Création d'un nouveau noeud
$NewNode = $booksXml.CreateNode("element","Setting",$null)
#Ajout des attributs dans le noeud
$NewNode.SetAttribute("Key","AutomaticMode")
$NewNode.SetAttribute("Type","Bool")
$NewNode.SetAttribute("Value","True")

#Sélectionner l'emplacement cible pour l'ajout
$cible = $booksXml.SelectsingleNode("//RegistrationElement[TargetDLL='SendRegistration.dll']/.//PluginSettings")

#Insertion de l'élément à la fin de la cible
$cible.AppendChild($NewNode)

#Écriture du fichier sur le disque
$booksXml.Save($Fichier_xml)

Ceci est à adapter en fonction de ton besoin.
Je suis disponible si tu as besoin de plus de détail.
Bonne journée

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

Plus d'informations
il y a 5 mois 6 jours #34475 par Rudy
Ha super ... je vais essayer ça :) ... je te tiens au courant du résultat.

Rudy
Merci pour le coup de main !

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

Plus d'informations
il y a 5 mois 6 jours #34476 par Rudy
Salut Fabien ... et merci pour tout ... en me basant sur ton script et avec l'aide de ChatGPT (je suis vieux, mais j'essaye d'utiliser des outils de jeunes :) ) j'ai réussi à adapter mon script à mon bon vouloir ...

Donc, je vérifie la présence du setting ... si il est présent dans chacun des plugins, rien n'est modifié. Si il est manquant dans un des plugins, le setting est ajouté.

Voici le code final

# Chemin du fichier XML
$Fichier_xml = "C:\Temp\Test\registrations.xml"

# Vérifie si le fichier existe
if (-Not (Test-Path $Fichier_xml)) {
Write-Error "Le fichier XML spécifié n'existe pas : $Fichier_xml"
exit
}

# Récupération du contenu
$booksXml = [xml](Get-Content $Fichier_xml)

# Sélectionner tous les emplacements cibles pour l'ajout
$registrationElements = $booksXml.SelectNodes("//RegistrationElement[TargetDLL='FitWpf.SendRegistration.dll']")

if ($registrationElements.Count -eq 0) {
Write-Error "Aucun emplacement cible n'a été trouvé dans le fichier XML."
exit
}

# Parcourir chaque RegistrationElement
foreach ($registrationElement in $registrationElements) {
$pluginSettings = $registrationElement.PluginSettings

# Vérifier si le nœud Setting avec Key=AutomaticMode existe déjà
$settingExists = $false
foreach ($setting in $pluginSettings.SelectNodes("Setting[@Key='AutomaticMode']")) {
$settingExists = $true
break
}

# Ajouter le nouveau nœud si nécessaire
if (-not $settingExists) {
$NewNode = $booksXml.CreateElement("Setting")
$NewNode.SetAttribute("Key", "AutomaticMode")
$NewNode.SetAttribute("Type", "Bool")
$NewNode.SetAttribute("Value", "True")

$pluginSettings.AppendChild($NewNode)

Write-Output "Nouveau nœud ajouté avec succès à PluginSettings dans RegistrationElement avec TargetDLL='FitWpf.SendRegistration.dll'."
}
else {
Write-Output "Le nœud avec Key=AutomaticMode existe déjà dans PluginSettings dans RegistrationElement avec TargetDLL='FitWpf.SendRegistration.dll'."
}
}

# Écriture du fichier sur le disque
$booksXml.Save($Fichier_xml)



Il me reste à découvrir maintenant comment faire pour que mon output affiche les accents et ne me mettent pas des caractères bizarres (par exemple déjà au lieu de déjÃ)

Rudy
Merci pour le coup de main !

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

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