Если ваши имена элементов статичны, проще (меньше печатать и легче читать) использовать литералы элементов.Вместо конструктора xsl:element name="XB">
просто используйте <XB>
.Как правило, единственное время, когда вам нужно использовать xsl:element
, это когда имя элемента динамически создается.
Из вашего примера XML я предполагаю, что XPath, указывающий на ваш элемент REF
, был /Group/ITM/REF
.
Если значение REF всегда является числом, то format-number()
будет самым простым:
<XB>
<xsl:value-of select="format-number(/Group/ITM/REF, '000000')"/>
</XB>
Если значение REF является строкой, тоВы могли бы concat()
использовать substring()
<XB>
<xsl:variable name="$ref" select="/Group/ITM/REF"/>
<xsl:variable name="pad" select="'000000'"/>
<xsl:value-of select="substring(
concat($pad, $ref),
string-length($ref) + 1,
string-length($pad)
)"/>
</XB>
Применение к вашему XSLT:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="#all" >
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<FID>
<ID>
<ED>
<TA>ED1</TA>
<MA>123</MA>
<DOC>0000</DOC>
<DOCL>731</DOCL>
<STA>53</STA>
<DIR>2</DIR>
</ED>
<E1>
<BU>
<xsl:value-of select="Mapping by giving XPATH"/>
</BU>
<BL><xsl:value-of select=""/></BL>
<BL><xsl:value-of select=""/></BL>
<BU><xsl:value-of select=""/></BU>
<WW><xsl:value-of select=""/></WW>
<TC><xsl:text>FB01</xsl:text></TC>
<XB>
<xsl:value-of select="format-number(/Group/ITM/REF, '000000')"/>
</XB>
<WA><xsl:value-of select=""/></WA>
</E1>
</ID>
</FID>
</xsl:template>
</xsl:stylesheet>