我有以下XML:
<dependency>
<groupId>blabla1</groupId>
<artifactId>test1</artifactId>
<version>if strArtifactId equals test1, put iVersion value here</version>
</dependency>
<dependency>
<groupId>blabla2</groupId>
<artifactId>test2</artifactId>
<version>if strArtifactId equals test2, put iVersion value here</version>
</dependency>
<dependency>
<groupId>blabla3</groupId>
<artifactId>test3</artifactId>
<version>if strArtifactId equals test3, put iVersion value here</version>
</dependency>
以下XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="strArtifactID"/>
<xsl:param name="iVersion"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="artifactId">
<xsl:copy>
<xsl:value-of select="$strArtifactID"/>
</xsl:copy>
</xsl:template>
<xsl:template match="version">
<xsl:copy>
<xsl:value-of select="$iVersion"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我需要做的是用我的参数
替换依赖项的version标签strArtifactId:选择要修改的依赖版本。
iVersion:我想要的版本。
这两个参数都由GUI给出。
问题:当我启动代码时,它只会复制原始的xml,但没有任何变化。
请帮忙吗?
答案 0 :(得分:0)
您提供的XML不完整,因此我在代码示例中的<root>
个节点周围添加了<dependency>
节点,以使其成为有效的XML。
所以你的XML看起来像这样:
<root>
<dependency>
<groupId>blabla1</groupId>
<artifactId>test1</artifactId>
<version>if strArtifactId equals test1, put iVersion value here</version>
</dependency>
<dependency>
<groupId>blabla2</groupId>
<artifactId>test2</artifactId>
<version>if strArtifactId equals test2, put iVersion value here</version>
</dependency>
<dependency>
<groupId>blabla3</groupId>
<artifactId>test3</artifactId>
<version>if strArtifactId equals test3, put iVersion value here</version>
</dependency>
</root>
以下是XSL样式表,它将根据符合上述示例的XML为您提供所需的结果:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="strArtifactID" />
<xsl:param name="iVersion" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="dependency">
<dependency>
<xsl:copy-of select="groupId" />
<xsl:copy-of select="artifactId" />
<xsl:choose>
<xsl:when test="artifactId = $strArtifactID">
<version><xsl:value-of select="format-number($iVersion, '#.0')" /></version>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="version" />
</xsl:otherwise>
</xsl:choose>
</dependency>
</xsl:template>
</xsl:stylesheet>
所以样式表中发生的事情是:
<dependency>
节点以您想要的格式重建(步骤4,5,6)。<groupId>
和<artifactId>
个节点,因为它们的内容不会更改。<artifactId>
中的<dependency>
节点值与'strArtifactID'参数值的值匹配时,会创建一个包含'iVersion'参数值的<version>
节点(我有假设是数字,并且格式化为保留一个小数位。)<artifactId>
中的<dependency>
节点值与'strArtifactID'参数值的值不匹配时,将复制现有的<version>
节点。