如何检查xsl模板中的两个或多个条件

问题描述 投票:1回答:1

如何检查xslt中的两个或多个条件

这是我的xml

 <swift>
    <message>
        <block2 type="input">
            <messageType>102</messageType>
            <receiverAddress>BKTRUS33XBRD</receiverAddress>
            <messagePriority>N</messagePriority>     
        </block2>
        <block3>
            <tag>
                <name>32</name>
                <value>praveen</value>
            </tag>
            <tag>
                <name>42</name>
                <value>pubby</value>
            </tag>
        </block3> 
        <block4>
            <tag>
                <name>77</name>
                <value>pravz</value>
            </tag>
            <tag>
                <name>77</name>
                <value>pubbypravz</value>
            </tag>
            <tag>
                <name>99</name>
                <value>USA</value>
            </tag>
            <tag>
                <name>99</name>
                <value>UK</value>
            </tag>
            <tag>
                <name>76</name>
                <value>shanmu</value>
            </tag>
        </block4>
    </message>
</swift>

对于上面的xml,如果发生任何标签重复,我们将在xsl模板下应用此模板,如果假设另一个标签在xml中重复发生,则xslt正常工作,这意味着如何在xslt中应用逻辑。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">    

    <xsl:output method="text" indent="no" />

    <xsl:template match="/">
        <xsl:apply-templates select="/swift/message/block4/tag [name='77']"/>
    </xsl:template>

    <xsl:template match="/">
        <xsl:apply-templates select="/swift/message/block4/tag [name='99']"/>
    </xsl:template>

    <xsl:template match="message/block4/tag [name='77']">
        <xsl:apply-templates select="../../block2/@type"/>
        <xsl:value-of select="../../block2/messageType"/>
        <xsl:value-of select="../../block2/messagePriority"/>,<xsl:text/>
        <xsl:number format="000001"/>,<xsl:text/>
        <xsl:value-of select="../../block3/tag [name='32']/value"/>,<xsl:text/>
        <xsl:value-of select="value"/>

    </xsl:template>

    <xsl:template match="message/block4/tag [name='99']">
        <xsl:value-of select="value"/>
        <xsl:text>
        </xsl:text>
    </xsl:template>

    <xsl:template match="@type[.='input']">O</xsl:template>

    <xsl:template match="@type[.='output']">I</xsl:template>

    <xsl:template match="text()"/>

</xsl:stylesheet>

预期输出

O102N,000001,praveen,pravz,美国

O102N,000002,praveen,pubbypravz,UK

xslt xslt-1.0
1个回答
0
投票
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="text" indent="no" /> <xsl:template match="/"> <xsl:apply-templates select="/swift/message/block4/tag [name='77']"/> </xsl:template> <xsl:template match="message/block4/tag [name='77']"> <xsl:variable name="position" select="position()"/> <xsl:apply-templates select="../../block2/@type"/> <xsl:value-of select="../../block2/messageType"/> <xsl:value-of select="../../block2/messagePriority"/>,<xsl:text/> <xsl:number format="000001"/>,<xsl:text/> <xsl:value-of select="../../block3/tag [name='32']/value"/>,<xsl:text/> <xsl:value-of select="value"/>,<xsl:text/> <xsl:apply-templates select="/swift/message/block4/tag [name='99'][position()=$position]"/> </xsl:template> <xsl:template match="message/block4/tag [name='99']"> <xsl:value-of select="value"/> <xsl:text> </xsl:text> </xsl:template> <xsl:template match="@type[.='input']">O</xsl:template> <xsl:template match="@type[.='output']">I</xsl:template> <xsl:template match="text()"/> </xsl:stylesheet>

应用于本文档:

 <swift>
    <message>
        <block2 type="input">
            <messageType>102</messageType>
            <receiverAddress>BKTRUS33XBRD</receiverAddress>
            <messagePriority>N</messagePriority>
        </block2>
        <block3>
            <tag>
                <name>32</name>
                <value>praveen</value>
            </tag>
            <tag>
                <name>42</name>
                <value>pubby</value>
            </tag>
        </block3>
        <block4>
            <tag>
                <name>77</name>
                <value>pravz</value>
            </tag>
            <tag>
                <name>77</name>
                <value>pubbypravz</value>
            </tag>
            <tag>
                <name>99</name>
                <value>USA</value>
            </tag>
            <tag>
                <name>99</name>
                <value>UK</value>
            </tag>
            <tag>
                <name>76</name>
                <value>shanmu</value>
            </tag>
        </block4>
    </message>
</swift>

它产生以下结果:

O102N,000001,praveen,pravz,USA
O102N,000002,praveen,pubbypravz,UK
© www.soinside.com 2019 - 2024. All rights reserved.