Announcement

Collapse
No announcement yet.

Durchlaufen und gruppieren einer Struktur

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

  • #16
    Okay, also ich gruppiere meine Struktur:

    Code:
    <xsl:key name="headerGrouped" match="report/OrderAttributes/*" use="Header"/>
    danach rufe ich an der Stelle im XSLT, wo eine Gruppe erscheinen soll das Template auf, mit dem Namen des Headers als Key:

    Code:
    ...
    <fo:table-row>
      <fo:table-cell>
        <fo:block>
    <xsl:apply-templates select="key('headerGrouped', 'Labeling')" mode="mode1"/>
        </fo:block>
      <fo:table-cell>
    </fo:table-row>...
    Jetzt schreibe ich weiter unten ein Template, was mir die Werte ausgibt:
    Code:
    	<xsl:template match="OrderAttributes/*" mode="mode1">
    	<fo:block>
    		<xsl:value-of select="Label"/>
    		<xsl:text>: </xsl:text>
    		<xsl:value-of select="Value"/>
    	</fo:block>
    </xsl:template>
    So habe ich das jetzt verstanden. Allerdings springt er nicht in das Template hinein und somit wird nichts angezeigt, auch mit match="report/OrderAttributes/*" nicht. Was mache ich da bloß falsch?

    Comment


    • #17
      Ich kann in den einzelnen Ausschnitten zumindest beim Lesen keine Fehler erkennen. Wenn du den Fehler nicht selbst finden kannst, dann versuche, minimale aber komplette Codebeispiele zu posten, so dass mit wir mit diesen den Fehler einfach reproduzieren können.

      Comment


      • #18
        Dann habe ich es zumindest richtig verstanden... Ich habe mal eine Datei mit der XML Struktur mal mit rangehangen.
        Das XSLT, welches die Struktur verarbeitet, sieht so hier aus:

        Code:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
        
        <xsl:key name="headerGrouped" match="report/OrderAttributes/*" use="Header"/>
        
        	<xsl:template name="Layout">
        		<fo:block>
        		   	<fo:table table-layout="fixed" width="100%">
        				<fo:table-column/>
        				<fo:table-body>
        					<fo:table-row>
        						<fo:table-cell>
        							<fo:block>
        <xsl:apply-templates select="key('headerGrouped', 'Labeling')" mode="mode1"/>
        							</fo:block>
        						</fo:table-cell>
        					</fo:table-row>
        				</fo:table-body>
        			</fo:table>
        		</fo:block>
        	</template>
        
        	<xsl:template match="OrderAttributes/*" mode="mode1">
        	<fo:block>
        		<xsl:value-of select="Label"/>
        		<xsl:text>: </xsl:text>
        		<xsl:value-of select="Value"/>
        	</fo:block>
        </xsl:template>
        Attached Files

        Comment


        • #19
          Ein Problem, das ich sehe, ist "white space" im "Header"-Element, mache mal aus
          Code:
          <xsl:key name="headerGrouped" match="report/OrderAttributes/*" use="Header"/>
          besser
          Code:
          <xsl:key name="headerGrouped" match="report/OrderAttributes/*" use="normalize-space(Header)"/>
          Ansonsten hat das letzte kurze Stylesheet genau zwei Templates, eines mit Namen "Layout", eines mit mode="mode1". Diese Templates werden automatisch nicht aufgerufen, man sollte also zumindest
          Code:
          <xsl:template match="/">
          statt
          Code:
          <xsl:template name="Layout">
          benutzen, damit der XSLT-Prozessor auch das erste Template benutzt.

          Comment


          • #20
            Okay, vielen Dank für den Hinweis. Ich werde es gleich am Montag vormittag mit dem "normalize-space()" einmal ausprobieren. Das Template "Layout" wird schon aufgerufen (direkt aus einem anderen Template, so geht das noch 3 mal weiter... daher wollte ich jetzt nicht tausende Zeilen kopieren), er kommt halt bis zu der besagten Zeile:
            <xsl:apply-templates select="key('headerGrouped', 'Labeling')" mode="mode1"/>
            und springt dann nicht in das Template. Alles was danach noch kommt, wird auch wieder ausgeführt.
            Ich melde mich Montag nochmal.

            Schönes Wochenende und danke für die Hilfe und Tipps,
            Carsten

            Comment


            • #21
              Hi,

              ich habe es heute nochmal mit dem normalize-space() probiert, und siehe da... es funktioniert nun so wie erwartet.

              Vielen Dank für deine Hilfe.

              Gruß,
              C. Fleischmann

              Comment

              Working...
              X