根据xsl:value-of有条件地显示2个char.s中的1个

时间:2013-05-07 20:52:05

标签: javascript html xslt moss

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

这将包含2个可能值中的1个:空字符串或“是”。这在SharePoint显示表单的<xsl:template name="dvt_1.rowedit">范围内。

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

我将标记与HTML内联,并使用document.write()。但我没有运气让行动回应fldNm的价值。

我找到了很多例子,但它们与我想做的事情有很大不同,我无法理解它们。

情况就是这样:

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

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

在dispForm页面上的该被调用模板中,每个数据都通过使用

显示
    <td>
       <div>
            <xsl:value-of select="@fieldName" />
       </div>
    </td>

当呈现页面时,'value-of'标签被替换为任何被伪装的字段的内容(当然)。

就我而言,由于设计要求文档,我要求的字段将包含“是”或“”。

如果是,我想在其中使用一个单个字符来表示“是”。否则我想在那里放一个不同的字符,表示“不是。”

我无法弄清楚如何将渲染的值转换为选择构造。

我试过像

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

但xsl标签未被识别。

我对xsl很新,虽然我开始看到语法是如何完成的,但对我来说仍然是非常神秘的。

2 个答案:

答案 0 :(得分:1)

由于您没有向我们提供太多信息,这是我能给出的最佳答案。

this answer所示:

  

更通用的XPath 1.0表达式,它生成字符串$ s1 if   $ 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>

...适用于以下示例XML:

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

...生成了想要的结果:

The value is: a
The value is: b

答案 1 :(得分:0)

使用

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

如果名为“fldNm”的属性(上下文节点)的值为“yes”,则对此表达式的求值将生成字符“x”,否则评估将生成字符“y”。

在这里,我们使用按照定义

的事实
 number(true()) = 1

 number(false()) = 0