praveen
praveen

Reputation: 63

how to get tag values from xml using xslt

<block2 type="input">
    <messageType>103</messageType>
    <receiverAddress>BKTRUS33XBRD</receiverAddress>
    <messagePriority>N</messagePriority>
    <deliveryMonitoring>3</deliveryMonitoring>
</block2>

I need output as if message type is 103. Then we pass a string like CTD.

output: CTD,I103N

Upvotes: 0

Views: 341

Answers (2)

fpmurphy
fpmurphy

Reputation: 2537

The for-each loop is not necessary i.e.

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="text"/>

    <xsl:variable name="vUpper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
    <xsl:variable name="vLower" select="'abcdefghijklmnopqrstuvwxyz'"/>

    <xsl:template match="//block2[messageType = '103']">
        <xsl:value-of select="concat('CTD,',
           translate(substring(@type, 1, 1), $vLower, $vUpper),
           messageType, messagePriority )"/>
    </xsl:template>

</xsl:stylesheet>

Upvotes: 0

Flack
Flack

Reputation: 5892

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:variable name="vUpper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
    <xsl:variable name="vLower" select="'abcdefghijklmnopqrstuvwxyz'"/>
    <xsl:template match="/">
        <xsl:for-each select="block2[messageType = '103']">
            <xsl:value-of select="
                concat(
                    'CTD,',
                    translate(substring(@type, 1, 1), $vLower, $vUpper),
                    messageType,
                    messagePriority
                )"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Output will be CTD,I103N.

In XSLT 2.0 one could use fn:upper-case and fn:lower-case.

Upvotes: 1

Related Questions