如何使一个文件中的XML块看起来像另一个文件?

如何使一个文件中的XML块看起来像另一个文件?,xml,powershell,Xml,Powershell,使用Powershell,我想自动化对xml模板的大规模修改。 有两个文件具有相同的结构,但不同的控件,我需要将它们放到一个公共视图中。 file1.xml是参考文件。我需要将Tester组的内容放到file2.xml中,然后再放到reference类型中 如何正确地执行此操作?是否先替换子项或清除组,然后导入节点? 我事先非常感谢你的帮助 #file1.xml <?xml version="1.0" encoding="utf-8"?> <FORM> <Group

使用Powershell,我想自动化对xml模板的大规模修改。 有两个文件具有相同的结构,但不同的控件,我需要将它们放到一个公共视图中。 file1.xml是参考文件。我需要将Tester组的内容放到file2.xml中,然后再放到reference类型中

如何正确地执行此操作?是否先替换子项或清除组,然后导入节点? 我事先非常感谢你的帮助

#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>
#file1.xml
#file2.xml

如果要将一个文档中的一个节点替换为另一个文档中的另一个节点,可以使用
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使其更具动态性,以防这个问题更具假设性