2012-03-22 11 views
2
<?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:msxml="urn:schemas-microsoft-com:xslt" 
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
    exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets "> 

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

<xsl:param name="currentPage"/> 
<xsl:variable name="MediaNodeId" select="./@id"/> 
<!-- Input the documenttype you want here --> 
<xsl:variable name="level" select="1"/> 

<xsl:template match="/"> 

<!-- The fun starts here --> 
<ul class=" menu nav"> 
<xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']"> 
    <li> 
    <a href="{umbraco.library:NiceUrl(@id)}"> 
     <xsl:value-of select="@nodeName"/> 
    </a> 
    <xsl:if test="count(./child::*[@isDoc and string(umbracoNaviHide) != '1']) &gt; 0"> 
     <ul> 
     <xsl:for-each select="./child::*[@isDoc and string(umbracoNaviHide) != '1']"> 
      <li> 
      <xsl:choose> 

       <xsl:when test="name()= 'Link' "> 

       <xsl:if test="linkUrl!=''"> 
        <a href="{umbraco.library:GetMedia(linkUrl, 0)/umbracoFile}" target="_blank"> 
        <xsl:value-of select="@nodeName"/></a> 
       </xsl:if> 
       </xsl:when>   

       <xsl:otherwise> 
       <a href="{umbraco.library:NiceUrl(@id)}"> 
       <xsl:value-of select="@nodeName"/></a> 
       </xsl:otherwise> 

      </xsl:choose> 

      <xsl:if test="count(./child::*[@isDoc and string(umbracoNaviHide) != '2']) &gt; 0"> 
     <ul> 
     <xsl:for-each select="./child::*[@isDoc and string(umbracoNaviHide) != '2']"> 
      <li> 
      <a href="{umbraco.library:NiceUrl(@id)}"> 
       <xsl:value-of select="@nodeName"/> 
      </a> 
      </li> 
     </xsl:for-each> 
     </ul> 
    </xsl:if> 
      </li> 
     </xsl:for-each> 
     </ul> 
    </xsl:if> 
    </li> 
</xsl:for-each> 
</ul> 
<div id="jflanguageselection"><div class="rawimages"><span id="active_language"><a href="http://www.hooymans-duivensport.nl/nl"><img src="/images/nl.gif" alt="Nederlands (NL-nl)" title="Nederlands (NL-nl)" /></a></span><span><a href="http://www.hooymans-duivensport.nl/en"><img src="/images/en.gif" alt="English (United Kingdom)" title="English (United Kingdom)" /></a></span></div></div> 
</xsl:template> 

</xsl:stylesheet> 

私はこのエラーが発生したpdfファイルのメニューでリンクを作成する必要があります。メニューからPDFへのリンク

エラーが

System.OverflowExceptionが発生しました:値がInt32に対して大きすぎるか小さすぎるのいずれかでした。 at System.Convert.ToInt32(double値) System.Convert.ChangeType(オブジェクト値、型変換型、IFormatProviderプロバイダー) at System.Xml.Xsl.Runtime.XmlQueryRuntime.ChangeTypeXsltArgument(XmlQueryType xmlType、Object value、Type destinationType (XmlQueryRuntime {urn:schemas-microsoft-com:xslt-debug} runtime) atat System.Xml.Xsl.Runtime.XmlQueryContext.InvokeXsltLateBoundFunction(String name、String namespaceUri、IList`1 [] args) at Root (XmlQueryRuntime {URN:スキーマ - マイクロソフト-COM:XSLTデバッグ}ランタイム)System.Xml.Xsl.XmlILCommand.Executeで はSystem.Xml.Xsl.XslCompiledTransformで (defaultDocument、XmlResolverのデータソース、XsltArgumentList ArgumentListは、のXmlWriterライタオブジェクト) .Transform(IXPathNavigable input、XsltArgumentList argumen)パーサはあなたのそのいくつかを想定しているとして、TS、たTextWriter結果) umbraco.presentation.webservices.codeEditorSave.SaveXslt(文字列ファイル名、文字列OLDNAME、文字列FILECONTENTS、ブールignoreDebugging)

+0

あなたがエラーを投げている正確なライン/ブロックを知っていますか? –

答えて

1

でこのエラーはXSLTの構文解析時にUmbracoでは一般的です実際には[常に]割り当てられている場合があります。

トリックは、コードの犯人行を見つけて、それをブロックのためのテストのために囲みます。例えば

、それ月またはそれはかなり一般的@idNiceUrl()で発生するが、この行ではないかもしれない。

<xsl:otherwise> 
    <xsl:if test="@id != ''"> 
     <a href="{umbraco.library:NiceUrl(@id)}"> 
      <xsl:value-of select="@nodeName"/> 
     </a> 
    </xsl:if> 
</xsl:otherwise> 

エラーがGetMedia() 又はNiceUrl() から生じる可能性がありますこれらはInt32型のパラメータを渡す必要があるため呼び出すことができますが、あなたはすでにGetMedia()呼び出しをifブロックに入れています。

http://our.umbraco.org/forum/developers/xslt/30131-Loading-Xslt-Value-was-either-too-large-or-too-small-for-an-Int32-

http://our.umbraco.org/forum/developers/xslt/3102-Using-niceurl-Value-was-either-too-large-or-too-small-for-an-Int32-

+0

ページノードをループしている場合、すべてのINodeオブジェクトにid属性が必要であるため、@idは空ではありません。 – Digbyswift

+0

@Digbyswift - あなたは私の答えを読んだことがありますか?あなたは、別のポイントを証明するために、そのコード行を_example_として使用したことを認識していますか? IFブロック内でエラー行を囲む必要がある場合があります。私はそれがこの特定のコード行ではないかもしれないと言った。すべての_page_ノードにID属性が含まれている必要がありますが、パーザはこれを想定せず、すべての_actual_ノードがID(Umbracoプロパティなど)を持っていない_actual_ XMLに基づいて前提を作成します。この[PasteBin](http://pastebin.com/Tyw0Zust)でXSLTを実行して、私が意味することを正確に見てください。 –

+0

はい、私はしていた、あなたはあなたの答えを明確にする必要があります。 Umbracoタグ付き投稿の例として@idとNiceUrl()を使用することにより、後続のユーザーに混乱が生じます。 – Digbyswift