我正在尝试选择与特定元素(具有特定值)匹配的xml文件的值。例如下面的xml文件:
<dependency>
<groupId>group1</groupId>
<artifactId>art1</artifactId>
<version>0.0.1</version>
<groupId>group2</groupId>
<artifactId>art2</artifactId>
<version>0.0.2</version>
<groupId>group3</groupId>
<artifactId>art3</artifactId>
<version>0.0.3</version>
<groupId>group4</groupId>
<artifactId>art4</artifactId>
<version>0.0.4</version>
</dependency>
我正在尝试使用此命令,但给出的响应为空。
xmlstarlet sel -t -v'// groupId [@ artifactId =“ art1”] / version'-n test.xml
如果我尝试仅使用此命令,它将为我提供组ID的列表
xmlstarlet sel -t -v'// groupId'-n test.xml
group1
group2
group3
group4
我只需要获取特定组ID的版本号,然后将其更新,例如,如果groupid = group1且version = 0.0.1,那么我将使用xmlstarlet将版本更新为0.0.1-done。
任何帮助将不胜感激,因为我是xmlstarlet的新手。我尝试阅读一些文档,但我真的迷路了。
artifactId
不是属性,因此@artifactId
不会选择任何内容。
如果您需要version
when artifactId
=“ art1”的值,它将看起来像这样...
xmlstarlet sel -t -v "//artifactId[.='art1']/following-sibling::version[1]" test.xml
如果您确实要这样做:
如果groupid = group1且版本= 0.0.1,则我会将版本更新为0.0.1-done
您应该改用ed
命令...
xmlstarlet ed -u "//groupId[.='group1' and following-sibling::version[1] = '0.0.1']/following-sibling::version[1]" -x "concat(.,'-done')" test.xml
输出...
<dependency>
<groupId>group1</groupId>
<artifactId>art1</artifactId>
<version>0.0.1-done</version>
<groupId>group2</groupId>
<artifactId>art2</artifactId>
<version>0.0.2</version>
<groupId>group3</groupId>
<artifactId>art3</artifactId>
<version>0.0.3</version>
<groupId>group4</groupId>
<artifactId>art4</artifactId>
<version>0.0.4</version>
</dependency>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句