xmlstarlet选择并更新xml

黑天鹅

我正在尝试选择与特定元素(具有特定值)匹配的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不会选择任何内容。

如果您需要versionwhen 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章