문제

그래서 나는 xslt에서 문제를 해결하려고 노력하고 있 으려고 노력하고 있으며, 일반적으로 명령 언어로하는 방법을 알고있을 것입니다.나는 XML 요소 목록, 표준 재료 목록에서 테이블에 셀을 추가하고 있습니다.그래서 :

<some-elements>
  <element>"the"</element>
  <element>"minds"</element>
  <element>"of"</element>
  <element>"Douglas"</element>
  <element>"Hofstadter"</element>
  <element>"and"</element>
  <element>"Luciano"</element>
  <element>"Berio"</element>
</some-elements>
.

그러나 하나의 행을 차단하고 특정 문자가 최대에 도달 한 후 새 것을 시작하려고합니다.그래서 내가 최대 20자를 허용하도록 허용한다고 가정 해보십시오.나는 이것으로 끝낼 것이다 :

<table>
 <tr>
  <td>"the"</td>
  <td>"minds"</td>
  <td>"of"</td>
  <td>"Douglas"</td>
 </tr>
 <tr>
  <td>"Hofstadter"</td>
  <td>"and"</td>
  <td>"Luciano"</td>   
 </tr>
 <tr>
  <td>"Berio"</td>
 </tr>
</table>
.

명령이없는 언어로 각 요소 문자열 계수를 일부 변경할 수있는 변수에 추가하면서 행에 요소를 추가합니다.해당 변수가 20을 초과했을 때 문자열 계수를 0으로 리턴 한 후 해당 행에서 새 행을 멈추고 해당 프로세스 (중지 된 요소에서 시작)를 다시 실행할 것입니다.그러나 XSLT에서 변수 값을 변경할 수 없습니다.이 전체 무국적, 기능 평가 일은 루프에 대해 나를 던지고 있습니다.

도움이 되었습니까?

해결책

xsl-list 에서이 포럼에 오는 것은 10 년 동안 되돌아가는 것과 같습니다. 왜 모두가 XSLT 1 : -)

<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:template match="some-elements">
 <table>
  <xsl:apply-templates select="element[1]"/>
 </table>
</xsl:template>


<xsl:template match="element">
 <xsl:param name="row"/>
 <xsl:choose>
  <xsl:when test="(string-length($row)+string-length(.))>20
          or
          not(following-sibling::element[1])">
   <tr>
    <xsl:copy-of select="$row"/>
    <xsl:copy-of select="."/>
   </tr>
   <xsl:apply-templates select="following-sibling::element[1]"/>
  </xsl:when>
  <xsl:otherwise>
   <xsl:apply-templates select="following-sibling::element[1]">
    <xsl:with-param name="row">
     <xsl:copy-of select="$row"/>
     <xsl:copy-of select="."/>
    </xsl:with-param>
   </xsl:apply-templates>
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>
</xsl:stylesheet>
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top