如何检查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模板下面应用了这个,如果发生任何一个标签重复xslt正在工作,如果假设另一个标签在xml中重复发生意味着如何在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,普利文,pravz,USA
O102N,000002,praveen,pubbypravz,英国
答案 0 :(得分: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