如何使用PowerShell更新XML节点的值?

14

我该如何将节点的值 <Test>Test</Test>更改为 <Test>Power</Test>?

示例:

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add key="DeploymentDate" value="test" />
        <add key="DateOfInitialization" value="Vinoj" />
    </appSettings>
    <Test>Test</Test>
</configuration>

这是我目前使用的PowerShell脚本:

$configuration = "app.config"
[xml]$xml = New-Object XML
$xml.Load($configuration)
$xml.selectnodes("/configuration/Test") = {"UST"}
$xml.Save($configuration)

问题标题上方有一个框,上面写着“这个问题已经在这里有答案了...”,但是它链接到的是一个2013年提出的问题。而这个问题是在2010年提出的,并且当年就已经有了答案,你可以看到。所以...那个框应该被移除。 - R.D. Alkire
1个回答

35

我不知道你想要实现什么,但这个例子应该能给你一个想法:

$file = 'c:\temp\aa\ServerService.exe.config'
$x = [xml] (Get-Content $file)
Select-Xml -xml $x  -XPath //root/level |
    % { $_.Node.'#text' = 'test'
        $_.Node.SomeAttribute = 'value'
      }
$x.Save($file)

您不需要使用.NET进行xpath查询。只需使用PowerShell(具有Select-Xml)即可。
还可以通过Get-Content加载xml文件并将其转换为[xml],这会创建XmlDocument��加载文件内容。


运行得非常好。您能告诉我 | % 通常是什么意思吗? - Rahul Soni
5
它的意思是 foreach-object。你可以使用 Get-Alias -Name % 找到它。 - stej
3
你也可以访问测试值 $xml.configuration.test - 很方便(只要它不是一个集合),但之后你可以使用 foreach ($thing in $xml.things) { $thing.value }。我在这里是因为我需要在增加版本号后保存我的 XML 文件。这对我很有帮助。+1 - Piotr Kula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接