我在xsl文档中有以下xsl代码

                <A target="_blank" style="text-decoration=none">
                    <xsl:attribute name="href">viewdoc.aspx?doc=<xsl:value-of select="URLFilePath"/>&amp;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:attribute。

因此,If语句将如下所示:

            If correctedPath.ToLower.Contains(".doc") Then
                 //display the word icon and attributes
            Else
                 //display the excel icon and attributes
            End If


您能否给我一些提示和帮助,以帮助我实现这一目标?

谢谢

最佳答案

仅使用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()会产生错误的结果。

关于xslt - 根据字符串的结尾显示不同的xsl:attribute,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2743469/

10-10 23:40