XSLT修改值

时间:2011-04-19 22:28:41

标签: xslt

我需要将XML转换为另一种XML。

我需要做的是修改其中一个元素的值。在源头我有这个

<NUM>I19071230</NUM>

我需要用固定的'ABCD'替换第一个字母。所以它会变成这个

ABCD19071230

然后我需要确保总长度为14.如果不是,则在ABCD之间添加0,输出应该如下所示。

ABCD0019071230

我需要将此值存储在变量中,以便可以重复使用。 我正在使用XSLT 1.0。在此先感谢。

2 个答案:

答案 0 :(得分:2)

使用此XPath表达式:

concat(
   substring(
      'ABCD0000000000',
      1,
      15 - string-length(NUM)
   ),
   substring(NUM,2)
)

答案 1 :(得分:2)

使用

<xsl:variable name="vComposed" select=
   "concat('ABCD',
           substring('000000000000000',
                     1,
                     14 -string-length(NUM) -3),
           substring(NUM, 2, 10)
           )
 "/>

以下是使用此变量的简短转换

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:variable name="vComposed" select=
   "concat('ABCD',
           substring('000000000000000',
                     1,
                     14 -string-length(NUM) -3),
           substring(NUM, 2, 10)
           )
 "/>

 <xsl:value-of select="$vComposed"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<NUM>I19071230</NUM>

产生了想要的正确结果

ABCD0019071230

您可以更改NUM字符串值的长度,并验证在所有情况下都会生成正确的结果。