有条件显示2个字符中的1个.S基于xsl:value-of

Conditionally Display 1 of 2 char.s based on xsl:value-of

本文关键字:基于 xsl value-of 1个 显示 2个 字符 有条件      更新时间:2023-09-26

我有一个值来自SharePoint作为<xsl:value-of select="@fldNm" />

This将有两个可能的值之一:一个空字符串,或'yes '。这是在SharePoint显示表单的<xsl:template name="dvt_1.rowedit">中。

如果值是一个空字符串,我想显示一个字符,但如果它是'yes',我想显示一个不同的字符。

我把一个标签内联的HTML,并使用document.write()。但是我没有运气使动作响应fldNm的值。

我找到了很多例子,但是它们和我要做的太不一样了,我搞不懂。

情况如下:

当你创建SharePoint自定义列表时,会为你创建3个.aspx页面:newForm, editForm和disform。

这些.aspx页面装载了各种xsl和xslt功能。创建了几个xsl模板,其中一个包含将在使用.aspx时显示的HTML。这个模板被SharePoint命名为'dvt_1 '。然后在<xsl:for-each select="$Rows"> xsl结构中调用该模板。

在disform页面上调用的模板中,通过使用

显示每个数据。
    <td>
       <div>
            <xsl:value-of select="@fieldName" />
       </div>
    </td>

当页面呈现时,'value-of'标签将被指定的任何字段(当然)的内容所替换。

在我的例子中,由于Design Requirements文档,我所询问的字段将包含'yes'或" .

如果它是yes,我想在那里放一个字符表示'yes '。否则,我想在那里放一个不同的字符,表示'不是'。

我不知道如何将渲染值转换为选择构造。

我试过像

    <td>
    The answer is: <script> if (<xsl:value-of select="@fieldName" /> == 'yes') {
    document.write('A');
    } else {
    document.write('B');
    }
    </script>
    </td>

但是XSL标签没有被识别。

我对xsl非常陌生,虽然我开始了解语法是如何完成任务的,但它对我来说仍然非常神秘。

既然你没有提供给我们太多信息,这是我能给的最好的答案了。

如答案所示:

生成字符串$s1 if的更通用的XPath 1.0表达式$val为"x",如果$val为"y"则产生字符串$s2:

concat(substring($s1, 1 div ($val = "x")),
       substring($s2, 1 div ($val = "y"))
      )

如果我对你的问题理解正确的话,这个原则可以用来生成预期的答案。要查看这一点,请查看以下示例:

假设:

  • "yes"的值应该输出字符"a"
  • ""的值应该输出字符"b"

当此XSLT(使用上述XPath):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes" method="text"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="e">
    <xsl:text>The value is: </xsl:text>
    <xsl:value-of
      select="concat(substring('a', 1 div (@fldNm = 'yes')), 
                     substring('b', 1 div (@fldNm = ''))
              )"/>
    <xsl:text/>
  </xsl:template>
</xsl:stylesheet>

<t>
  <e fldNm="yes"/>
  <e fldNm=""/>
</t>

…生成所需的结果:

The value is: a
The value is: b

使用:

substring('yx', 1 + (@fldNm = 'yes'), 1)

如果(上下文节点的)属性"fldNm"的值为"yes",则该表达式的求值产生字符"x",否则求值产生字符"y"。

这里我们使用了这样一个事实:根据定义:

 number(true()) = 1

 number(false()) = 0