使用Umbraco GetMedia时发生XSLT分析错误

使用Umbraco GetMedia时发生XSLT分析错误,xslt,umbraco,Xslt,Umbraco,我正在尝试使用GetMedia mediapicker检索图像的url 下面的代码可以正常工作: <xsl:for-each select="umbraco.library:GetXmlNodeById(1123)/* [@isDoc]"> <article> <img width="1822" height="600"> <xsl:attribute name="src"> <xsl:value

我正在尝试使用GetMedia mediapicker检索图像的url

下面的代码可以正常工作:

<xsl:for-each select="umbraco.library:GetXmlNodeById(1123)/* [@isDoc]">
  <article>
     <img width="1822" height="600">
       <xsl:attribute name="src">
         <xsl:value-of select="umbraco.library:GetMedia(1139, 0)/umbracoFile" />
       </xsl:attribute>
     </img>
     <div class="contents">
        <h1>
          <xsl:value-of select="bannerHeading1"/>
        </h1>
      </div>
  </article>
</xsl:for-each>

但是,如果我将关键行替换为:

<xsl:value-of select="umbraco.library:GetMedia(bannerImage, 0)/umbracoFile" />

我得到一个解析错误,异常为OverflowException(值对于Int32太大或太小),这表明传入的不是1139

有没有办法让我进入我想要的房产?“bannerImage”的价值是1139,正如我所希望的那样

谢谢你的帮助

进一步:这是GetXMLNodeById返回的XML结构:

<?xml version="1.0" encoding="utf-8" ?>
<HomepageBanner id="1141" parentID="1123" level="3" writerID="0" creatorID="0" nodeType="1124" template="1125" sortOrder="0" createDate="2013-08-12T15:53:48" updateDate="2013-08-12T15:54:18" nodeName="Members" urlName="members" writerName="admin" creatorName="admin" path="-1,1065,1123,1141" isDoc="">
  <bannerImage>1139</bannerImage>
  <bannerHeading1>Members Area</bannerHeading1>
  <bannerHeading2>..the place for all your needs</bannerHeading2>
</HomepageBanner>

1139
成员区
…满足你所有需求的地方

对于其他试图从内容文件夹中的项目获取图像的人,我是这样让它工作的:

<xsl:for-each select="umbraco.library:GetXmlNodeById(1123)/* [@isDoc]">
  <article>
    <!-- Store the ID -->
    <xsl:variable name="mediaId" select="bannerImage" />
      <!-- Check the ID is numeric -->
      <xsl:if test="number($mediaId) &gt; 0">
        <xsl:variable name="mediaNode" select="umbraco.library:GetMedia($mediaId, false())" />
        <xsl:if test="string-length($mediaNode/umbracoFile) &gt; 0">
          <img src="{$mediaNode/umbracoFile}" width="1822" height="600" />
          <div class="contents">
            <h1>
              <xsl:value-of select="bannerHeading1"/>
            </h1>
          </div>
        </xsl:if>
      </xsl:if>
    </article>
</xsl:for-each>

您首先需要检查该值是否为数字,然后,对于我不满意的位,您需要将
“/umbracoFile”
部分添加到媒体节点变量中


感谢贡献者在正确的方向上帮助了我。

请包括
umbraco.library:GetXmlNodeById(1123)
返回的内容。我指的是函数调用返回的实际XML结构,粘贴为XML。不要告诉我们“我遇到了解析错误”。告诉我们错误是什么。你可能不明白,但这并不意味着其他人都不明白。@Tomalak,MichaelKay:我已经添加了注释。谢谢你看这个。你仔细检查过你的期望吗?当放置在
上方时,
输出什么?除此之外,XSLT在语法上是有效的。在
umbraco.library:GetMedia()
中会出现运行时错误,这就是为什么我假设您没有为该函数传递正确的参数。一些一般提示:您可以使用
,因为
NaN
的计算结果为
false
(好的,这将允许值0当然是必需的-但在这种情况下,您可以使用
$mediaId>0
,因为数值比较会强制两个参数自动编号)。您也可以使用
,因为空字符串(或分别为空节点集)计算结果也是
false
。@Tomalak-非常感谢。对于我和其他可能是xslt新手的人来说,这是一条非常受欢迎的建议。既然不说什么,那么当您将
NaN
作为第一个参数发送时,
umbraco.library:GetMedia(number(“”),false()
)会有什么反应这也是一个
系统。OverflowException
带有“值对于Int32来说太大或太小”。