Как я могу сделать блок XML из одного файла похожим на другой файл? - PullRequest
0 голосов
/ 30 марта 2020

Используя Powershell, я хочу автоматизировать массовую модификацию шаблонов xml. Есть 2 файла, которые имеют одинаковую структуру, но разные элементы управления, и мне нужно привести их к общему виду. file1. xml является ссылкой. Мне нужно перенести содержимое группы тестеров в файл 2. xml к ссылочному типу.

Как мне сделать это правильно? Заменить ребенка или очистить группу, а затем ImportNode? Заранее очень благодарен за помощь

#file1.xml
<?xml version="1.0" encoding="utf-8"?>
<FORM>
<Group>
  <Column PercentWidth="20">
    <Group Label="Tester">
      <Column PercentWidth="100">
            <Control FieldName="Microsoft.VSTS.Scheduling.StoryPoints" Type="FieldControl" Label="Label1" LabelPosition="Left" />
            <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Label="Label2" LabelPosition="Left" />
            <Control FieldName="Microsoft.VSTS.Common.Severity" Type="FieldControl" Label="Label3" LabelPosition="Left" />
      </Column>
    </Group>
  </Column>
</Group>
</FORM>


#file2.xml
<?xml version="1.0" encoding="utf-8"?>
<FORM>
<Group>
  <Column PercentWidth="20">
    <Group Label="Tester">
      <Column PercentWidth="100">
      <Control FieldName="Microsoft.VSTS.Common.Severity" Type="FieldControl" Label="Label1" LabelPosition="Left" />
      <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Label="Label2" LabelPosition="Left" />
      <Control FieldName="Microsoft.VSTS.Scheduling.StoryPoints" Type="FieldControl" Label="Label4" LabelPosition="Left" />
      </Column>
    </Group>
  </Column>
</Group>

1 Ответ

0 голосов
/ 30 марта 2020

Если вы хотите заменить один узел из одного документа другим из другого документа, вы можете использовать метод ReplaceChild().

# Read files into XML objects
$file1 = [xml](Get-Content file1.xml)
$file2 = [xml](Get-Content file2.xml)

# Use XPATH to find nodes to copy and replace
$nodeToReplace = $file1.FORM.Group.Column.SelectSingleNode('./Group[@Label="Tester"]')
$nodeToCopy = $file2.FORM.Group.Column.SelectSingleNode('./Group[@Label="Tester"]')

# Import the node so that the copied node will inherit the target document context
$newnode = $file1.ImportNode($NodeToCopy,$true)

# Replace the node
$file1.FORM.Group.Column.ReplaceChild($newnode,$nodeToReplace)
$file1.Save('C:\PathToXML\file1.xml')

Очевидно, что XPATH можно настроить, чтобы сделать это более Dynami c на всякий случай, если этот вопрос более гипотетический.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...