如何使用xslt从xml获取标记值

时间:2011-02-15 11:11:32

标签: xml xslt

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

我需要输出,好像消息类型是103.然后我们传递一个像CTD一样的字符串。

输出:CTD,I103N

2 个答案:

答案 0 :(得分:1)

<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>

输出为CTD,I103N

在XSLT 2.0中,可以使用fn:upper-casefn:lower-case

答案 1 :(得分:0)

for-each循环不是必需的,即

<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>