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