我有一个要求,我必须检查字段REF的字符串的长度。如果小于6,则需要在前缀后附加0,否则打印该值。
我们通过提供XPath将XB值映射到REF。我是初学者,尝试了几次声明,但对我而言不起作用。
输入:
<Group xmlns="">
<ITM xmlns="">
<>
<>
<REF>123</REF>
<>
<>
</ITM>
</Group>
输出:
<FID>
<ID>
<ED>
Hard coded values
</ED>
<E1>
<XB>000123</XB>
</E1>
</ID>
</FID>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<xsl:element name="TA">
<xsl:text>ED1</xsl:text>
</xsl:element>
<xsl:element name="MA">
<xsl:text>123</xsl:text>
</xsl:element>
<xsl:element name="DOC">
<xsl:text>0000</xsl:text>
</xsl:element>
<xsl:element name="DOCL">
<xsl:text>731</xsl:text>
</xsl:element>
<xsl:element name="STA">
<xsl:text>53</xsl:text>
</xsl:element>
<xsl:element name="DIR">
<xsl:text>2</xsl:text>
</xsl:element>
</ED>
<E1>
<xsl:element name="BU">
<xsl:value-of select="Mapping by giving XPATH"/>
</xsl:element>
<xsl:element name="BL">
<xsl:value-of select=""/>
</xsl:element>
<xsl:element name="BL">
<xsl:value-of select=""/>
</xsl:element>
<xsl:element name="BU">
<xsl:value-of select=""/>
</xsl:element>
<xsl:element name="WW">
<xsl:value-of select=""/>
</xsl:element>
<xsl:element name="TC">
<xsl:text>FB01</xsl:text>
</xsl:element>
<xsl:element name="XB">
<xsl:value-of select="Need to Map REF value here with
condition"/>
</xsl:element>
<xsl:element name="WA">
<xsl:value-of select=""/>
</xsl:element>
</E1>
</ID>
</FID>
现在对于XB,如果条件小于6,我必须执行该条件,然后我们需要在前缀后附加0,否则打印该值。
答案 0 :(得分:0)
如果元素名称是静态的,则使用元素文字更容易(更少的键入且更易于阅读)。不用xsl:element name="XB">
构造函数,只需使用<XB>
。通常,只有在动态构造元素名称时,才需要使用xsl:element
。
根据您的示例XML,我假设指向您的REF
元素的XPath是/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>