这是Powershell update xml key value based on other key value
的后续内容我有以下格式的xml:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<plugins>
<plugin pluginType="plugin1" polling_internal="2" polling_unit="M" enabled="true">
<params>
<add key="Server" value="server1.local" />
<add key="database" value="DataBaseName1" />
</params>
</plugin>
<plugin pluginType="plugin2" polling_internal="2" polling_unit="M" enabled="true">
<params>
<add key="Server" value="server2.local" />
<add key="database" value="databasename2" />
</params>
</plugin>
</plugins>
</configuration>
在原始帖子中,我想搜索“数据库”键并更新服务器密钥的值,例如搜索databasename1并将server1.local的服务器值更新为其他内容。
原始解决方案xpath是
"/configuration/plugins/plugin/params[add[@value='databasename1' and @key ='database']]/add[@key='Server']/@value"
我后来发现有些数据库名称是大小写混合,而xpath是敏感的,所以它没有获取一些数据库名称。
由于这是xpath 1.0,我知道我必须使用translate函数,但我无法从其他示例中找出我必须插入的位置。
由于这是针对Powershell的,使用外部Powershell函数进行转换很好,因为它不会修改整个文件的大小写,只有搜索值。
谢谢!
答案 0 :(得分:2)
那么,有时候add[@key='database']/@value
只是大肆混杂?这是您使用translate()
函数的方法:
"/configuration/plugins/plugin/params[add[translate(@value, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz') ='databasename1' and @key ='database']]/add[@key='Server']/@value"
这会对value
属性的字符串值中的任何大写字母进行小写。也就是说,它不以任何方式操纵XML数据,转换仅应用于路径表达式。