Bonjour à tous,
Après quelques recherches sur le net, je n'ai pas pu trouvé la réponse à ma question. Je me permets donc de créer ce sujet pour solliciter votre aide.
Je viens droit au but, donc voici a quoi ressemble mon fichier .xml
<route id="L1_ROUTE_UP">
<siteList>
<siteEntry id="RAN1" order="1" />
<siteEntry id="C012" order="2" />
<siteEntry id="R01" order="3" />
<siteEntry id="R02" order="4" />
<siteEntry id="R03" order="5" />
<siteEntry id="R04" order="6" />
<siteEntry id="E01" order="7" />
<siteEntry id="D01" order="8" />
<siteEntry id="EC2" order="9" />
<siteEntry id="C04" order="10" />
<siteEntry id="BL3" order="11" />
<siteEntry id="Q2" order="12" />
<siteEntry id="C01" order="13" />
<siteEntry id="C02" order="14" />
<siteEntry id="C03" order="15" />
<siteEntry id="ED06" order="16" />
</siteList>
</route>
Le but est de créer un script Powershell qui va demander à l'utilisateur d'ajouter une ID (par exemple : SLT02 ) qui va s'insérer dans la balise <siteList> de cette forme :
<siteEntry id="SLT02" order="1" />
Chaque ID doit s'inserer à la premiere position soit à ordre "1" dans <siteList>. Donc lorsque l'utilisateur va ajouter une ID, naturellement, l'ordre des autres ID déja présents dans le fichier doivent etre incrémenter de 1. Ce qui nous donne qqchose comme ca :
<route id="L1_ROUTE_UP">
<siteList>
<siteEntry id="SLT02" order="1" />
<siteEntry id="RAN1" order="2" />
<siteEntry id="C012" order="3" />
<siteEntry id="R01" order="4" />
<siteEntry id="R02" order="5" />
<siteEntry id="R03" order="6" />
<siteEntry id="R04" order="7" />
<siteEntry id="E01" order="8" />
<siteEntry id="D01" order="9" />
<siteEntry id="EC2" order="10" />
<siteEntry id="C04" order="11" />
<siteEntry id="BL3" order="12" />
<siteEntry id="Q2" order="13" />
<siteEntry id="C01" order="14" />
<siteEntry id="C02" order="15" />
<siteEntry id="C03" order="16" />
<siteEntry id="ED06" order="17" />
</siteList>
</route>
Voici mon code en powershell :
$Path = "C:\Users\Rinzler\Desktop\topology.xml"
[xml]$xmlFichier2 = Get-Content -Path $Path
$newOrderUp = 1
$xmlTargetSiteEntry = $xmlFichier2.SelectNodes('//route[@id = "L1_ROUTE_UP"]/siteList/siteEntry')
foreach($id in $xmlTargetSiteEntry)
{
$orderValue = $xmlTargetSiteEntry.getAttribute("order")
$xmlTargetSiteEntry.SetAttribute("order", $newOrderUp + $orderValue)
}
Donc le but de la boucle foreach est de recuperer chaque numéro d'ordre grace a la fonction getAttribute, puis de l'incrémenter de 1.
Sauf que Powershell me renvoie une erreur a cette ligne ci : $xmlTargetSiteEntry.SetAttribute("order", $newOrderUp + $orderValue)
Powershell :
Échec lors de l’appel de la méthode, car [System.Object[]] ne contient pas de méthode nommée « op_Addition ».
Au caractère Ligne:1 : 2
+ $xmlTargetSiteEntry.SetAttribute("order", $newOrderUp + $orderValue)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
J'ai ensuite regardé par rapport a ma variable $orderValue, et au lieu de stocker un par un les numéros d'ordre, elle a stocké tous les numéros d'ordre. Du coup, c'est pour ca que le setAttribute ne fonctionne pas. J'ai donc fait qql recherches pour savoir comment recuperer un par un chaque numéro d'ordre dans une variable, mais je n'ai rien trouvé de concret ...
Cordialement,