Javascript 基于xsl:value of有条件地显示2个char.s中的1个

Javascript 基于xsl:value of有条件地显示2个char.s中的1个,javascript,html,xslt,moss,Javascript,Html,Xslt,Moss,我有一个来自SharePoint的值,即 这将有2个可能值中的1个:空字符串或“是”。这在SharePoint显示表单的中 如果值是空字符串,我想显示一个字符,但如果是“是”,我想显示另一个字符 我将一个标记与HTML内联,并使用document.write()。但我没有运气让这些行动符合fldNm的价值 我已经找到了很多例子,但它们与我正在尝试的是如此不同,以至于我无法理解它们 情况就是这样: 创建SharePoint自定义列表时,将为您创建3.aspx页面:newForm、editForm和

我有一个来自SharePoint的值,即

这将有2个可能值中的1个:空字符串或“是”。这在SharePoint显示表单的

如果值是空字符串,我想显示一个字符,但如果是“是”,我想显示另一个字符

我将一个标记与HTML内联,并使用
document.write()
。但我没有运气让这些行动符合fldNm的价值

我已经找到了很多例子,但它们与我正在尝试的是如此不同,以至于我无法理解它们

情况就是这样:

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

这些.aspx页面加载了各种xsl和xslt功能。创建了几个xsl模板,其中一个模板包含使用.aspx时将显示的HTML。SharePoint将该模板命名为“dvt_1”。然后在
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>

答案是:如果(=‘是’){
文件。写('A');
}否则{
文件。写('B');
}
但是xsl标记本身没有被识别


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

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

如图所示:

一个更通用的XPath 1.0表达式,如果 $val为“x”,如果$val为“y”,则生成字符串$s2:

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

假设:

<?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
  • “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

因为你没有给我们提供太多的信息,这是我能给出的最好的答案

如图所示:

一个更通用的XPath 1.0表达式,如果 $val为“x”,如果$val为“y”,则生成字符串$s2:

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

假设:

<?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
  • “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)
 number(true()) = 1
如果名为“fldNm”的属性(上下文节点)的值为“yes”,则此表达式的求值将生成字符“x”,否则求值将生成字符“y”

这里我们使用的事实是,根据定义

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

使用

substring('yx', 1 + (@fldNm = 'yes'), 1)
 number(true()) = 1
如果名为“fldNm”的属性(上下文节点)的值为“yes”,则此表达式的求值将生成字符“x”,否则求值将生成字符“y”

这里我们使用的事实是,根据定义

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


这不足以理解问题,也没有真正意义。值不是作为XSL标记“来自SharePoint”,它们(可能)位于您正在使用XSL转换的XML文档中。显示XML文档的相关部分和相应的XSL样式表。转到主要问题…这不足以理解问题,也没有真正意义。值不是作为XSL标记“来自SharePoint”,它们(可能)位于您正在使用XSL转换的XML文档中。显示XML文档的相关部分和相应的XSL样式表。转到主要问题……这是一个非常好的答案,非常简洁。但阿巴克的答案似乎更为详细,这也是我所用的。@BrianWren,是的,阿巴克从我的一个答案(引用他的话)中学到了这个更为普遍的技巧。但是,我建议只有在无法找到更专业、更高效的解决方案时才使用这种更通用的技术。在这种情况下,将两个子字符串(其中一个参数为1除以0)串联起来,对于一般XSLT程序员来说,这实在是太过冗长,效率低得多,复杂得多,而且很难理解。这是一个非常好的答案,而且非常简洁。但阿巴克的答案似乎更为详细,这也是我所用的。@BrianWren,是的,阿巴克从我的一个答案(引用他的话)中学到了这个更为普遍的技巧。但是,我建议只有在无法找到更专业、更高效的解决方案时才使用这种更通用的技术。在这种情况下,将两个子字符串(其中一个参数为1除以0)串联起来,对于一般XSLT程序员来说,这实际上是一种过度的拉伸,而且效率低得多,复杂得多,也难以理解。