2011-07-26 6 views
1

XSLTを使用して各子ノードから部分文字列を選択して表示する際に問題があります。次のコードを使用しました。これは、4つの子ノードがあるので、最初の子ノードを4回返します。誰も助けることができますか?umbracoは最初の子ノードを返し続けます。すべての子ノードの値を返すことはありません。

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: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:template match="/"> 

    <xsl:param name="testString"> 

    <xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]"> 
     <xsl:value-of select="whatWeDoItemDescription"/> 
    </xsl:for-each> 

    </xsl:param> 
    <xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]"> 


     <p><xsl:value-of select="umbraco.library:TruncateString($testString,170,'...')"/></p> 
    </xsl:for-each> 

</xsl:template> 

</xsl:stylesheet> 
+0

良い質問、+1を。私の答えは短くて簡単な解決策を見てください:) –

+0

私の答えは現在受け入れられているものより簡単で短くなっていることに気付くかもしれません。 –

答えて

1

私はあなたが完全にパラメータとループを捨てることができると思います。

<xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]"> 
    <xsl:variable name="description" select="whatWeDoItemDescription"/> 
    <p><xsl:value-of select="umbraco.library:TruncateString($description,170,'...')"/></p> 
</xsl:for-each> 
+0

これはなぜこれがあるかもしれないかについて何も考えられていないようです。 – macroj

+0

データノードから値を取得するように私の答えを編集しました。 – nickvane

+0

私はこれを試して何らかの理由で何も返されていないのですか? – macroj

1

このコード

<xsl:param name="testString"> 
     <xsl:for-each select="$currentPage/WhatWeDoItems [@isDoc]"> 
      <xsl:value-of select="whatWeDoItemDescription"/> 
     </xsl:for-each> 
    </xsl:param> 

は(4本)それぞれの(4つ)の文字列値を連結し単一ストリングを含有するtestString名前xsl:paramを定義whatWeDoItemDescription$currentPage/WhatWeDoItems [@isDoc]の子供。

この連結の切り捨てられた部分文字列を4回出力すると、連結された4つの文字列の最初の切り捨てが表示されます。

Soluton

あなたはパラメータで文字列を連結すべきではない - 単純にすべての要素たかっ選択:

<xsl:param name="pTestString" select= 
      "$currentPage/WhatWeDoItems[@isDoc]/whatWeDoItemDescription"/> 

<xsl:for-each select="$pTestString"> 
    <p><xsl:value-of select= 
    "umbraco.library:TruncateString(.,170,'...')"/></p> 
</xsl:for-each>   
関連する問題