我有一个来自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很新,虽然我开始看到语法是如何完成的,但对我来说仍然是非常神秘的。
答案 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