使用Umbraco GetMedia时发生XSLT分析错误
我正在尝试使用GetMedia mediapicker检索图像的url 下面的代码可以正常工作:使用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
<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) > 0">
<xsl:variable name="mediaNode" select="umbraco.library:GetMedia($mediaId, false())" />
<xsl:if test="string-length($mediaNode/umbracoFile) > 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来说太大或太小”。