2011-07-26 2 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 개)의 스트링 값의 연쇄를 단일 스트링를 포함 testString를라는 xsl:param 정의 의 어린이.

그런 다음이 연결의 잘린 부분 문자열을 네 번 출력하면 네 개의 연결된 문자열 중 첫 번째 문자 만 자릅니다.

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>