XSL如果包含

时间:2012-05-30 02:03:32

标签: xml xslt

我正在处理一个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>

由于某些原因,这看起来不起作用。您可以提供的任何帮助将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:3)

<xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))">

这在语法上是非法的XML(因此在语法上也是非法的XSLT代码:

  1. 必须在test属性中指定要评估的布尔表达式 - 不存在此类属性。

  2. 右括号没有对应的左括号。

  3. 解决方案:纠正这两个问题会导致工作代码:

    <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 =包含(...

比仅仅使用:

包含(...

您不太可能遇到问题