himmel: Problem mit der bedingten Formatierung bei xsl-fo (fop)

Hallo,

ich habe folgendes Problem mit XSL-FO.

Auszug aus meiner XML-Datei:

...
 <A>
  <Ab>
   <Abc Abcd="wert_1">Inhalt_1</Abc>
   <Abc Abcd="wert_2">Inhalt_2</Abc>
   <Abc Abcd="wert_3">Inhalt_3</Abc>
   <Abc Abcd="wert_4">Inhalt_4</Abc>
  </Ab>
 </A>
...

Auszug aus meiner XSL-Datei:

<xsl:template match="Abc">
 <fo:table margin-top="0.2cm">
 <fo:table-column column-width="100%"/>
  fo:table-body
   fo:table-row
    <fo:table-cell font-family="Times" font-size="12pt">
     fo:block
      xsl:choose
       <xsl:when test="Abc[@Abcd='Inhalt_1']">
 <fo:inline font-size="14pt" font-weight="bold">xsl:/
         xsl:apply-templates/
        </fo:inline>
       </xsl:when>
       <xsl:when test="Abc[@Abcd='Inhalt_2']">
 <fo:inline font-size="12pt" font-weight="italic">xsl:/
         xsl:apply-templates/
        </fo:inline>
       </xsl:when>
      </xsl:choose>
     </fo:block>
    </fo:table-cell>
   </fo:table-row>
  </fo:table-body>
 </fo:table>
</xsl:template>

Das bedeutet, dass ich entsprechend des Wertes des Attributes eine andere Formatierung des Inhalts des Elements haben möchte. So funktioniert das aber leider nicht. Ich habe es auch schon mit xsl:value-of und xsl:for-each versucht; auch ohne Ergebnis. Was mache ich falsch. Ist bereits der Ansatz falsch oder fehltz nur irgendein Parameter oder ist ein solcher falsch gestezt?

Gruß
Jürgen

  1. In dem template befindest du dich durch match="Abc" bereits auf dem Abc Knoten im xml Dokument. Dein test <xsl:when test="Abc[@Abcd='Inhalt_1']">
    bedeutet daher, dass du nach einem Unterelement mit dem Namen Abc suchst.

    Deine Abfrage duerfte das gewünschte Ergebnis liefern wenn du entweder:

    <xsl:when test="@Abcd='Inhalt_1'">

    verwendest.

    Oder aber, du musst dein match anpassen und einen Knoten höher gehen

    <xsl:template match="Ab">
      <xsl:when test="Abc[@Abcd='Inhalt_1']">

    </xsl:when>
    </xsl:template>

    Das hängt aber ganz davon ab, an welcher stelle du die Ausgabe möchtest.

    Gruß,

    Holge O

  2. Hallo himmel,

    Das bedeutet, dass ich entsprechend des Wertes des Attributes eine andere Formatierung des Inhalts des Elements haben möchte.

    Dann sollte die Prüfung aber nicht mit test="@Abcd='Inhalt_1'" sondern mit test="@Abcd='wert_1'" erfolgen.

    Grüße,
    Thomas