XSL如果包含

问题描述 投票:1回答:2

我正在研究一个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>

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

谢谢!

xml xslt
2个回答
3
投票
<xsl:if "contains(sp_stList/sp_st/mes_switch, 'X'))">

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

  1. 必须在test属性中指定要评估的布尔表达式 - 不存在此类属性。
  2. 有一个右括号没有相应的左括号。

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

<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>

0
投票

也许没有两个右括号,将是一个开始。还使用:

测试=包含(...

比使用更好:

包含(...

你不太可能遇到问题

© www.soinside.com 2019 - 2024. All rights reserved.