如何检查xsl模板中的两个或多个条件
如何检查 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,praveen,pravz,USA
O102N,000002, praveen,pubbypravz,UK
how to check two or more conditions in xslt
here is my 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>
for this above xml we have applying this below xsl template here if any one of tag repeatation is occur xslt were working if suppose another tag were repeatation happen in xml means how can apply a logic in 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>
Expected Output
O102N,000001,praveen,pravz,USA
O102N,000002, praveen,pubbypravz,UK
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了帮助您通过示例学习,我稍微修改了您的转换:
当应用于本文档时:
它会产生以下结果:
To help you learn by example, I modified your transformation just a little:
When applied to this document:
It produces the following result: