1

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

由于某种原因,这似乎行不通。您能提供的任何帮助将不胜感激!

谢谢!

4

2 回答 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>
于 2012-05-30T02:30:41.390 回答
0

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

测试=包含(...

比仅仅使用更好:

包含(...

你不太可能遇到问题

于 2018-08-19T20:48:48.657 回答