如何检查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
<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