Announcement

Collapse
No announcement yet.

XSLT for-each loop mit alternierendem Inhalt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSLT for-each loop mit alternierendem Inhalt

    Hallo zusammen ...
    ich arbeite gerade an einer xsl Transformation in ein xsl-FO Dokument. Mein Zeil ist es, eine Tabelle zu erzeugen, welche aus zwei spalten besteht.
    Die Inhalte werden mit einem for-each Loop aus der Quell XML Datei ausgelesen.
    Ich möchte immer nach zwei Durchgängen des Loops eine neue Zeile in der Tabelle einfügen.
    Der XSLT Prozessor von FOP meckert aber wie folgt:

    [Fatal Error] style.xsl:530:12: The element type "fo:table-row" must be terminated by the matching end-tag "</fo:table-row>".
    file:/C:/abcd/xxxx.yyyy/xyz/fop-1.0/./test/style.xsl; Zeilennummer530; Spaltennummer12; org.xml.sax.SAXParseException: The element type "fo:table-row" must be terminated by the matching end-tag "</fo:table-row>".

    Hier der xslt Code:

    Code:
    ...
    <fo:table>
    	<fo:table-column column-width="50%"/>
    	<fo:table-column column-width="50%"/>
    
    	<xsl:for-each select="/foo/bar/[@type='language']">
    	<xsl:sort select="@order"/>
    		
    		<xsl:choose>
    			
    			<xsl:when test="position() mod 2 = 0">
    				<fo:table-body>
    					<fo:table-row>
    						<fo:table-cell>
    							<fo:block font-family="Helvetica, Arial, sans"
    								font-size="11pt">
    								<xsl:value-of select="foobar"/>
    							</fo:block>
    							<fo:block font-family="Helvetica, Arial, sans"
    								font-size="9pt">
    								-<xsl:value-of select="blabla"/>
    							</fo:block>
    						</fo:table-cell>
    			</xsl:when>
    			
    			<xsl:otherwise>
    						<fo:table-cell>
    							<fo:block font-family="Helvetica, Arial, sans"
    								font-size="11pt">
    								<xsl:value-of select="name"/>
    							</fo:block>
    							<fo:block font-family="Helvetica, Arial, sans"
    								font-size="9pt">
    								-<xsl:value-of select="description"/>
    							</fo:block>
    						</fo:table-cell>
    					</fo:table-row>
    				</fo:tabla-body>	
    			</xsl:otherwise>
    			
    		</xsl:choose>
    		
    	</xsl:for-each>
    
    </fo:table>
    ...
    ich kann auch verstehen warum, denn daas Dokument ist ja schließlich nicht wirklich wellformed ...
    mir fällt aber keine andere Möglichkeit ein ...

    Wenn mir jemand einen Tip in die richtige Richtung geben könnte wäre ich sehr dankbar!

    Viele Grüße

  • #2
    Ohne XML-Daten lässt sich das kaum beurteilen. Da aber zwei Spalten definiert werden, sollten auch zwei Zellen pro Reihe vorkommen. Vielleicht ist es so gedacht:

    Code:
    <xsl:if test="position() mod 2 = 0">
      <fo:table-body>
        <fo:table-row>
          <fo:table-cell>
            <fo:block font-family="Helvetica, Arial, sans-serif" font-size="11pt">
              <xsl:value-of select="foobar"/>
            </fo:block>
            <fo:block font-family="Helvetica, Arial, sans-serif" font-size="9pt">
             -<xsl:value-of select="blabla"/>
            </fo:block>
          </fo:table-cell>
          <fo:table-cell>
            <fo:block font-family="Helvetica, Arial, sans-serif" font-size="11pt">
              <xsl:value-of select="name"/>
            </fo:block>
            <fo:block font-family="Helvetica, Arial, sans-serif" font-size="9pt">
              -<xsl:value-of select="description"/>
            </fo:block>
          </fo:table-cell>
        </fo:table-row>
      </fo:table-body>
    </xsl:if>
    BTW: sans sollte als fallback eher sans-serif lauten und im Ausgangscode steht </fo:tabla-body>.

    Comment

    Working...
    X