Comment modifier la valeur de L'attribut D'élément XML en utilisant PowerShell?

j'essaie d'accéder et de modifier l'attribut particulier de la balise XML

XML:

<office>
  <staff branch="Hanover" Type="sales">
    <employee>
        <Name>Tobias Weltner</Name>
        <function>management</function>
        <age>39</age>
    </employee>
    <employee>
        <Name>Cofi Heidecke</Name>
        <function>security</function>
        <age>4</age>
    </employee>
  </staff>
  <staff branch="London" Type="Technology">
   <employee>
    <Name>XXXX</Name>
    <function>gement</function>
    <age>39</age>

à partir de l'exemple ci-dessus, je veux imprimer l'attribut branch et puis je veux le changer avec une valeur comme New York dans tout le XML et en utilisant le code ci-dessous pour faire cela

       $xml=New-Object XML

      $xml.Load("C:FE6Work.xml")

      $node=$xml.SelectNodes("/office/staff")

      write-output $node.branch
      $node.branch="New York"

mais obtenir une erreur indiquant ne peut pas trouver l'élément.

quelqu'un peut-il aider?

21
demandé sur love thakker 2014-07-10 18:39:27

2 réponses

essayez ce qui suit:

$nodes = $xml.SelectNodes("/office/staff");
foreach($node in $nodes) {
    $node.SetAttribute("branch", "New York");
}

ceci itérera à travers tous les noeuds retournés par SelectNodes() et modifiera chacun d'eux.

26
répondu PeterK 2015-08-25 12:27:49

vous pouvez accéder aux attributs directement dans l'objet [xml] comme ceci:

# C:\temp> $xml = [xml](Get-Content C:\FE6Work.xml)
# C:\temp> $xml.office.staff

branch                   Type                           employee                                                             
------                   ----                           --------                                                             
Hanover                  sales                          {Tobias Weltner, Cofi Heidecke}                                      
London                   Technology                     {XXXX, Cofi}                                                         

# C:\temp> $xml.office.staff | foreach{$_.branch = "New York"}
# C:\temp> $xml.office.staff

branch                   Type                           employee                                                             
------                   ----                           --------                                                             
New York                 sales                          {Tobias Weltner, Cofi Heidecke}                                      
New York                 Technology                     {XXXX, Cofi}                                                         
8
répondu zdan 2014-07-10 17:05:30