我正在处理一个XSL文件,如果相应的XML文件包含某个字符串,它将显示一个按钮(以及许多其他内容)。我似乎遇到了一个问题,即我一直显示按钮(即使XML文件不包含我想要的值)或从不(即使XML文件确实包含值。)XML的一部分我关心的文件是:
<sp_stList>
<sp_st>
<st_num>1234</st_num>
<feanme>FAKE</feanme>
<featyp>ST</featyp>
<dirsuf></dirsuf>
<dirpre></dirpre>
<lv_apt></lv_apt>
<mun>VAN</mun>
<msgs>
<msg filename="File.pdf">d:\folder1\fild.pdf</msg>
</msgs>
<spst_poly>0</spst_poly>
<mes_switch>X</mes_switch>
<cdts>20120103161202PS</cdts>
</sp_st>
</sp_stList>
当<mes_switch>
包含X时,应该显示按钮。如果它是空白或有其他字符,则它不应显示按钮。
我尝试的代码是:
<a name="Info"></a>
<xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))">
<a href="#SpSt" style="color:orange" t:id="Spec_Sit_hdr">
<img border="0" src="./file.jpg"></img>
</a>
</xsl:if>
由于某些原因,这看起来不起作用。您可以提供的任何帮助将不胜感激!
谢谢!
答案 0 :(得分:3)
<xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))">
这在语法上是非法的XML(因此在语法上也是非法的XSLT代码:
必须在test
属性中指定要评估的布尔表达式 - 不存在此类属性。
右括号没有对应的左括号。
解决方案:纠正这两个问题会导致工作代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<a name="Info"></a>
<xsl:if test="contains(sp_stList/sp_st/mes_switch, 'X')">
<a href="#SpSt" style="color:orange" id="Spec_Sit_hdr">
<img border="0" src="./file.jpg"></img>
</a>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<sp_stList>
<sp_st>
<st_num>1234</st_num>
<feanme>FAKE</feanme>
<featyp>ST</featyp>
<dirsuf></dirsuf>
<dirpre></dirpre>
<lv_apt></lv_apt>
<mun>VAN</mun>
<msgs>
<msg filename="File.pdf">d:\folder1\fild.pdf</msg>
</msgs>
<spst_poly>0</spst_poly>
<mes_switch>X</mes_switch>
<cdts>20120103161202PS</cdts>
</sp_st>
</sp_stList>
产生了想要的正确结果:
<a name="Info"/>
<a href="#SpSt" style="color:orange" id="Spec_Sit_hdr">
<img border="0" src="./file.jpg"/>
</a>
答案 1 :(得分:0)
也许没有两个右括号,这是一个开始。还使用:
test =包含(...
比仅仅使用:
包含(...
您不太可能遇到问题