我正在使用xsl:if在更大的xsl:template块中执行一个小条件,并且我想测试当前xsl:template匹配节点的属性的相等性.
以下不起作用:
<xsl:template match="soMetag[@type='sometype']"> ==SoMetag== <xsl:if test="@something!='hidden'">something</xsl:if> <!--a lot of other stuff that I don't want to duplicate by multiplying the xsl:templates--> <xsl:template>
这个测试似乎总是评估为假,也许我没有良好的语法?
这个XML:
<soMetag type="sometype" something="visible"/> <soMetag type="sometype" something="hidden"/> <soMetag type="sometype"/>
应该给
==SoMetag== something... ==SoMetag== ==SoMetag== something...
解决方法
the 2nd tag should not get the “something” part printed.
我不完全确定你想要实现的目标,但我会试一试.
你的soMetag元素之一根本就没有某个属性.没有这个属性与@something!=’hidden’完全不同.因此,如果something属性不存在,则不输出字符串“something”.
因此,您需要在xsl:if条件被评估之前测试是否存在某个属性.
输入
<?xml version="1.0" encoding="utf-8"?> <root> <soMetag type="sometype" something="visible"/> <soMetag type="sometype" something="hidden"/> <soMetag type="sometype"/> </root>
样式表
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:strip-space elements="*"/> <xsl:template match="/root"> <xsl:apply-templates/> </xsl:template> <xsl:template match="soMetag[@type='sometype']"> <xsl:text>==SoMetag==</xsl:text> <xsl:choose> <xsl:when test="@something"> <xsl:if test="@something!='hidden'"> <xsl:text>something</xsl:text> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:text>something</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
编辑@Tim C建议更短的版本:
<xsl:template match="soMetag[@type='sometype']"> <xsl:text>==SoMetag==</xsl:text> <xsl:if test="@something!='hidden' or not(@something)"> <xsl:text>something</xsl:text> </xsl:if> </xsl:template>
产量
==SoMetag==something==SoMetag====SoMetag==something
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。