查询字符串中不区分大小写的xpath 1.0

时间:2014-09-25 13:39:19

标签: xml powershell xpath

这是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函数进行转换很好,因为它不会修改整个文件的大小写,只有搜索值。

谢谢!

1 个答案:

答案 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数据,转换仅应用于路径表达式。