【问题标题】:How to get value from a xml file if there are multiple tags with same namespace如果有多个具有相同命名空间的标签,如何从 xml 文件中获取值
【发布时间】:2022-10-31 07:17:05
【问题描述】:

我想从一个有效的 maven pom 文件中获取一个 maven surefire 插件的版本。 它看起来像下面的 xml 文件。它有多个,我想获取插件信息以获取版本信息。 如果仅存在项目并且不存在项目标签,我可以获得此信息。使用以下命令。

xmlstarlet 选择 -t -v ":项目/:建造/:插件/:插入[:artifactId='maven-surefire-plugin']/:版本“epom.xml

     <plugin>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.22.0</version   
</plugin>

   <?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Generated by Maven Help Plugin on 2022-08-01T11:57:29+05:30            -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/                -->
<!--                                                                        -->
<!-- 

====================================================================== -->
<projects>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
..................
    </project>
    
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <build>
        <plugins>
            <plugin>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.22.0</version   
            </plugin>
       </plugins>
    </build>
    </project>
    </projects>
    
    

【问题讨论】:

    标签: java xml pom.xml xmlstarlet


    【解决方案1】:

    假设您的输入文件格式正确(并且不会丢失 &lt;version 的结束 &gt;,如两个都例子);我想你的问题是:

    如何在&lt;projects&gt;-parent 下获取&lt;project&gt;-child 的&lt;version&gt;

    我会使用类似的东西:

    xmlstarlet sel  
      -N e="http://maven.apache.org/POM/4.0.0" 
      -t -m "/projects" 
      -m "e:project" 
      -v "e:build/e:plugins/e:plugin[e:artifactId='maven-surefire-plugin']/e:version" 
      --break 
      -n file.xml
    
    • -Nnamespace,使用字母e 作为随机选择的自定义前缀供以后使用
    • -t -m "/projects" 匹配外部 &lt;projects&gt;-node
      (还没有自定义命名空间前缀)
    • -m "e:project" 匹配所有具有指定命名空间的 &lt;project&gt;-nodes
    • -v "e:build/e:plugins/e:plugin[e:artifactId='maven-surefire-plugin']/e:version" 为所有包含 &lt;artifactId&gt;-node 和 'maven-surefire-plugin' 内容的 &lt;project&gt;-nodes 提供 &lt;version&gt;-value(文本)
    • --break 在没有指定 &lt;artifactId&gt;(插件)的情况下防止 &lt;project&gt;-nodes 的输出中出现换行符

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 2019-05-29
      相关资源
      最近更新 更多