Использование powershell для редактирования нескольких файлов XML - PullRequest
5 голосов
/ 24 февраля 2010

Как получить список из нескольких файлов XML из указанного каталога и для каждого файла добавить элемент под вторым корневым узлом с помощью powershell?

Пример: Я хочу добавить <LastName>SomeName</LastName> в элемент FIRST <Names>:

<People>
  <Names>
      <FirstName>someFirstName</FirstName>
  </Names>
  <Names>
      <FirstName>myFirstName</FirstName>
      <Address>SomeAddress</Address>
  </Names>
</People>

станет:

<People>
  <Names>
      <LastName>SomeName</LastName>
      <FirstName>someFirstName</FirstName>
  </Names>
  <Names>
      <FirstName>myFirstName</FirstName>
      <Address>SomeAddress</Address>
  </Names>
</People>

1 Ответ

7 голосов
/ 24 февраля 2010

Вы можете сделать это, используя CreateElement и AppendChild метод

Get-ChildItem c:\temp\ *.xml | 
    % { 
        $xml      = [xml](Get-Content $_.fullname)
        $lastName = $xml.CreateElement('LastName')
        $lastName.PsBase.InnerText = 'SomeName'
        $null     = $xml.People.Names[0].AppendChild($lastName)
        $xml.Save($_.FullName)
    }

В случае, если вы запускаете PowerShell V2, вам не нужно использовать свойство PsBase:

        $lastName.InnerText = 'SomeName'

Конечно, есть и другие пути, но это один из них довольно прост.


В случае, если узел будет глубже в xml, вы можете использовать Xpath следующим образом (оба находят первый Names узел):

$node = (Select-Xml -Xml $x -XPath '//Names[1]').Node
$node = (Select-Xml -Xml $x -XPath '//Names[position()=1]').Node
...