通过 Powershell 在 XML 文档中附加属性值
Appending attribute value in a XML document via Powershell
我一直在尝试在 powershell 中开发一个脚本,它可以更新/附加新的属性值(不更改现有值),最多 4 个值由“,”分隔。
文件格式为
<configuration>
<appSettings>
<add key="servername" value="server1"/>
</appSettings>
</configuration>
想要的结果是
<configuration>
<appSettings>
<add key="servername" value="server1,server2,server3,server3,server4"/>
</appSettings>
</configuration>
我可以通过以下代码添加新值但不能保留旧值
$file = "C:\Users\test\Desktop\server.exe.config"
$xml = [xml] (Get-Content $file)
$XPpath = "/configuration/appSettings/add[@key='servername']"
$nodes = $xml.SelectNodes($XPpath)
foreach ( $n in $nodes ) {
$n.value = $n.value = 'server2'
}
我阅读了帮助文档/进行了在线搜索,但没有找到任何有关如何获得所需结果的提示。我有什么想念的吗?感谢您的帮助。
你很接近。 Value 是一个字符串,所以就像附加任何其他字符串一样,只需附加您想要的内容即可。我在下面使用 +=
来执行此操作。
$xml = [xml]@'
<configuration>
<appSettings>
<add key="servername" value="server1"/>
</appSettings>
</configuration>
'@
$XPpath = "/configuration/appSettings/add[@key='servername']"
$nodes = $xml.SelectNodes($XPpath)
foreach ( $n in $nodes ) {
$n.value += ',server2,server3,server4,server5'
}
# or
# $xml.configuration.appSettings.add.value += ",server2,server3,server4"
$xml.configuration.appSettings.add.value
# output: server1,server2,server3,server4,server5
$xml.Save(".\new.xml")
# new.xml:
# <configuration>
# <appSettings>
# <add key="servername" value="server1,server2,server3,server4,server5" />
# </appSettings>
# </configuration>
我一直在尝试在 powershell 中开发一个脚本,它可以更新/附加新的属性值(不更改现有值),最多 4 个值由“,”分隔。
文件格式为
<configuration>
<appSettings>
<add key="servername" value="server1"/>
</appSettings>
</configuration>
想要的结果是
<configuration>
<appSettings>
<add key="servername" value="server1,server2,server3,server3,server4"/>
</appSettings>
</configuration>
我可以通过以下代码添加新值但不能保留旧值
$file = "C:\Users\test\Desktop\server.exe.config"
$xml = [xml] (Get-Content $file)
$XPpath = "/configuration/appSettings/add[@key='servername']"
$nodes = $xml.SelectNodes($XPpath)
foreach ( $n in $nodes ) {
$n.value = $n.value = 'server2'
}
我阅读了帮助文档/进行了在线搜索,但没有找到任何有关如何获得所需结果的提示。我有什么想念的吗?感谢您的帮助。
你很接近。 Value 是一个字符串,所以就像附加任何其他字符串一样,只需附加您想要的内容即可。我在下面使用 +=
来执行此操作。
$xml = [xml]@'
<configuration>
<appSettings>
<add key="servername" value="server1"/>
</appSettings>
</configuration>
'@
$XPpath = "/configuration/appSettings/add[@key='servername']"
$nodes = $xml.SelectNodes($XPpath)
foreach ( $n in $nodes ) {
$n.value += ',server2,server3,server4,server5'
}
# or
# $xml.configuration.appSettings.add.value += ",server2,server3,server4"
$xml.configuration.appSettings.add.value
# output: server1,server2,server3,server4,server5
$xml.Save(".\new.xml")
# new.xml:
# <configuration>
# <appSettings>
# <add key="servername" value="server1,server2,server3,server4,server5" />
# </appSettings>
# </configuration>