输入字符串的格式不正确来自XSLT

时间:2015-08-18 10:13:44

标签: asp.net xml xslt umbraco

我在' /'中收到错误"服务器错误应用。输入字符串的格式不正确。"从Umbraco查看下面插入了XSLT的页面时。

我认为这是由于尝试将字符串转换为此XSLT文件中的数字而引起的。可能来自这条线:

<xsl:if test="string-length($rteLinkText) != 0 and string($rteLink) = number($rteLink)">

如果我从页面中删除XSLT,那么渲染就可以了。

我只是想和知道XSLT的人核实一下,我并没有错过任何明显的东西。

谢谢你看看!

以下XSLT的完整代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
  <!ENTITY nbsp "&#x00A0;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:umbraco.library="urn:umbraco.library"
  exclude-result-prefixes="umbraco.library ">

  <xsl:import href="../xslt/globalFunctions.xslt" />

  <xsl:output method="xml" omit-xml-declaration="yes"/>

  <xsl:param name="currentPage"/>
  <xsl:param name="rteImage" select="/macro/rteImage" />
  <xsl:param name="rteText" select="/macro/rteText" />
  <xsl:param name="rteAuthor" select="/macro/rteAuthor" />
  <xsl:param name="rteLinkText" select="/macro/rteLinkText" />
  <xsl:param name="rteLink" select="/macro/rteLink" />
  <xsl:param name="rteDonationText" select="/macro/rteDonationText" />
  <xsl:param name="rteDonationLinkText" select="/macro/rteDonationLinkText" />
  <xsl:param name="rteDonationLink" select="/macro/rteDonationLink" />

 <xsl:template match="/">

    <blockquote class="quote">
      <xsl:variable name="imageRaw">
        <xsl:call-template name="getImageUrlfromXML">
          <xsl:with-param name="mediaItemXML" select="$rteImage/Image"/>
          <xsl:with-param name="height" />
          <xsl:with-param name="width" select="'100'" />
        </xsl:call-template>
      </xsl:variable>

      <xsl:if test="string-length($imageRaw) != 0">
        <img class="thumbImg" src="{$imageRaw}" />
      </xsl:if>

      <xsl:if test="string-length($rteText) != 0">
        <p>
          <xsl:value-of select="$rteText"/>
        </p>
      </xsl:if>

      <xsl:if test="string-length($rteAuthor) != 0">
        <h4 class="quotee">
          <xsl:value-of select="$rteAuthor"/>
        </h4>
      </xsl:if>

      <xsl:if test="string-length($rteLinkText) != 0 and string($rteLink) = number($rteLink)">
        <a class="quoteLink" href="{umbraco.library:NiceUrl($rteLink)}">
          <xsl:value-of select="$rteLinkText"/>
        </a>
      </xsl:if>

      <xsl:if test="string-length($rteDonationText) != 0 or (string-length($rteDonationLinkText) != 0 and string-length    ($rteDonationLink) != 0)">
        <div class="helpUs">
          <xsl:if test="string-length($rteDonationText) != 0">
            <h2>
              <xsl:value-of select="$rteDonationText"/>
            </h2>
          </xsl:if>
          <xsl:if test="string-length($rteDonationLinkText) != 0 and string-length($rteDonationLink) != 0">
            <a href="{$rteDonationLink}" target="_blank" class="donateBtn">
              <xsl:value-of select="$rteDonationLinkText"/>
            </a>
          </xsl:if>
        </div>
      </xsl:if>

    </blockquote>

  </xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

我认为这个问题是你逻辑的一部分:

string($rteLink) = number($rteLink)

这两个永远不会相等,因为它们是不同的类型(一个数字和一个字符串)? $ rteLink变量也可能无法转换为数字。

不应该是这样的:

<xsl:if test="string-length($rteLinkText) != 0 and string-length($rteLink) != 0 and number($rteLink) &gt; 0">