XSLT 1.0 및 문자열 계산
-
11-12-2019 - |
문제
그래서 나는 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>
. 제휴하지 않습니다 StackOverflow