我在xsl文档中有以下xsl代码
<A target="_blank" style="text-decoration=none">
<xsl:attribute name="href">viewdoc.aspx?doc=<xsl:value-of select="URLFilePath"/>&mode=inline</xsl:attribute>
<xsl:attribute name="prefix"><xsl:value-of select="FileName"/>: </xsl:attribute>
<IMG src="images/word_small.gif" border="0"/>
</A>
在代码隐藏中我正在做这个
newItemNode = xmlDocument.CreateElement("URLFilePath")
newItemNode.InnerText = correctedPath
xmlItemNode.ParentNode.AppendChild(newItemNode)
现在适用于word文档。但是我需要在代码中检查文件的扩展名,并根据If语句显示正确的Image和xsl:属性。
所以If语句将是这样的: -
If correctedPath.ToLower.Contains(".doc") Then
//display the word icon and attributes
Else
//display the excel icon and attributes
End If
你能否告诉我如何实现这一目标的一些提示和帮助?
由于
答案 0 :(得分:2)
仅使用contains()
通常可能会产生错误的结果(请参阅测试XML文档)。
ends-with()
函数是必需的,它是XPath 2.0中的标准函数,可以在XSLT 1.0中实现,如下面的转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="URLFilePath">
<xsl:variable name="visDoc">
<xsl:call-template name="ends-with">
<xsl:with-param name="pEnding" select="'.doc'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="visXls">
<xsl:call-template name="ends-with">
<xsl:with-param name="pEnding" select="'.xls'"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$visDoc=1">word_small.gif</xsl:when>
<xsl:when test="$visXls=1">xls_small.gif</xsl:when>
<xsl:otherwise>unknown_small.gif</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="ends-with">
<xsl:param name="pEnding"/>
<xsl:value-of select=
"number(substring(.,
string-length() -string-length($pEnding) +1
)
=
$pEnding
)
"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下测试XML文档:
<files>
<URLFilePath>myFile.doc</URLFilePath>
<URLFilePath>myFile.xls</URLFilePath>
<URLFilePath>myFile.xls.doc</URLFilePath>
<URLFilePath>myFile.doc.xls</URLFilePath>
</files>
产生了正确的结果:
word_small.gif
xls_small.gif
word_small.gif
xls_small.gif
请注意仅使用contains()
会产生错误的结果。
答案 1 :(得分:0)
我设法找到了解决方案!很抱歉迟到的回复,但必须处理其他事情
以下是代码: -
<A target="_blank" style="text-decoration=none">
<xsl:choose>
<xsl:when test="contains(., '.doc')">
<xsl:attribute name="href">viewdoc.aspx?doc=<xsl:value-of select="URLFilePath"/>&mode=inline
</xsl:attribute>
<xsl:attribute name="prefix">
<xsl:value-of select="FileName"/>:
</xsl:attribute>
<IMG src="images/word_small.gif" border="0"/>
</xsl:when>
<xsl:when test="contains(., '.xls')">
<xsl:attribute name="href">viewxls.aspx?doc=<xsl:value-of select="URLFilePath"/>&mode=inline
</xsl:attribute>
<xsl:attribute name="prefix">
<xsl:value-of select="FileName"/>:
</xsl:attribute>
<IMG src="images/excel_small.gif" border="0"/>
</xsl:when>
</xsl:choose>
</A>
感谢所有帮助人员,非常感谢!
答案 2 :(得分:0)
一个迟到的回复,但我找到两个答案,处理匹配字符串的结尾与XSLT 1.0,非常优雅:
去给他们+1
答案 3 :(得分:-2)
如果需要,可以在您的XSLT文档中完全执行此操作。要显示图像,可以使用xsl:choose语句来测试URLFilePath元素
<xsl:choose>
<xsl:when test="contains(., '.doc')">
<IMG src="images/word_small.gif" border="0"/>
</xsl:when>
<xsl:when test="contains(., '.xls')">
<IMG src="images/excel_small.gif" border="0"/>
</xsl:when>
</xsl:choose>
如果您想要检查后面的代码,可以随时为URLFilePath元素添加额外的属性。
imageAttr = xmlDocument.CreateAttr("image")
If correctedPath.ToLower.Contains(".doc") Then
imageAttr.value = "images/word_small.gif"
Else
imageAttr.value = "images/excel_small.gif"
End If
newItemNode.AppendChild(imageAttr)
然后,在xls中,您可以简单地使用此属性来设置图像的源属性
<IMG border="0">
<xsl:attribute name="src"><xsl:value-of select='@image' /></xsl:attribute>
</IMG>