如何在PowerShell中交换XML属性?

时间:2016-05-25 16:36:13

标签: xml powershell

我有一个power shell脚本,它对XML文件进行了大量更改,除了一个部分外,它都可以正常工作。我需要在XML文件中为每个匹配项切换两个属性的值。在下面的示例中,我需要为每个产品交换“描述”和“名称”的值。我该怎么做?

现有XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MetrixXML xmlns="http://www.lithotechnics.com" SchemaVersion="1.0">
    <Project Description="" Name="test123" ProjectID="test123">
        <ProductPool>
            <Product Description="A #61792-39" Name="21170:01">
            </Product>
            <Product Description="B #61793-39" Name="21170:02">
            </Product>
            <Product Description="C #61728-39" Name="21170:03">
            </Product>
        </ProductPool>
    </Project>
</MetrixXML>

应转换为:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MetrixXML xmlns="http://www.lithotechnics.com" SchemaVersion="1.0">
    <Project Description="" Name="test123" ProjectID="test123">
        <ProductPool>
            <Product Description="21170:01" Name="A #61792-39">
            </Product>
            <Product Description="21170:02" Name="B #61793-39">
            </Product>
            <Product Description="21170:03" Name="C #61728-39">
            </Product>
        </ProductPool>
    </Project>
</MetrixXML>

1 个答案:

答案 0 :(得分:3)

只需使用Get-Content cmdlet加载xml,迭代注释并交换值:

$xml = [xml] (Get-Content 'Path_to_your_xml')
$xml.DocumentElement.Project.ProductPool.Product | % {
    $oldDescription = $_.Description
    $_.Description = $_.Name
    $_.Name = $oldDescription
}
$xml.Save('Path_to_your_xml')