Andreas Bock: XSL:FO - ≥ verwenden

Hallo,

ich versuche verzweifelt, in meinem FO-mapping das ≥ anzuzeigen, aber ich bekomme immer die Fehlermeldung

org.apache.fop.apps.FOPException: The entity "ge" was referenced, but not declared.

Kann mir jemand helfen? Wo muss ich ge definieren, damit es funktioniert?

Danke im Voraus,
Andreas

  1. Hallo,

    da es bei mir ebenso mal vorkam, dass statt ü oder ö dieses ü oder eben ö vorkam, musste ich dies als Entity im Kopf meiner XML-Datei schreiben:

    <!DOCTYPE article [
    <!ENTITY bdquo "" >
    <!ENTITY quot "" >
    <!ENTITY uuml "ü" >
    <!ENTITY auml "ä" >
    <!ENTITY ouml "ö" >
    <!ENTITY Uuml "Ü" >
    <!ENTITY Auml "Ä" >
    <!ENTITY Ouml "Ö" >
    <!ENTITY szlig "ß" >
    <!ENTITY nbsp " " >
    <!ENTITY lt "" >
    <!ENTITY gt "" >
    ]>

    Dann klappte es auch mit der Transformation.

    Gruß,
    Kerstin

    --
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
    1. Danke für die schnelle Antwort, hat leider nicht geklappt :-(

      Mein XSL-File sieht am Kopf jetzt so aus:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE xsl:stylesheet [
      <!ENTITY ge "&#8805;" >
      ]>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:sdf="java.text.SimpleDateFormat" xmlns:date="java.util.Date" exclude-result-prefixes="xsl sdf date">
          <xsl:template match="/">
              <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
                  fo:layout-master-set
                      <fo:simple-page-master marg   usw usw usw

      Bekomme aber immer noch die gleiche Fehlermeldung...

      1. Hello out there!

        Bekomme aber immer noch die gleiche Fehlermeldung...

        Verwendest du in dem zu transformierenden XML auch die Entity-Referenz '&ge;' ohne 'gt' deklariert zu haben?

        Vielleicht ließt es auch am XSLT-Prozessor, der im Stylesheet deklarierte Entities nicht referenzieren kann?

        Warum verwendest du nicht das Zeichen '≥' oder die NCR '&#x2265;'* im Quelltext?

        See ya up the road,
        Gunnar

        * https://forum.selfhtml.org/?t=136043&m=883218

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
        1. Warum verwendest du nicht das Zeichen '≥' oder die NCR '&#x2265;'* im Quelltext?

          Habe in meinem Quelltext jetzt das NCR drin:
          <Data>
          ...
          ...
          <LOOKUP_KREDITART>
            <KREDITART_TEXT>Langfristfinanzierung &#x2265; 5 Jahre</KREDITART_TEXT>
          </LOOKUP_KREDITART>
          ...
          ...
          </Data>

          Die zugehörige xsl-Zeile:

          <xsl:value-of select="/Data/LOOKUP_KREDITART[KREDITART_ID = $CURRENT/KREDITART_ID]/KREDITART_TEXT"/>

          Nutze ich die xsl-Zeile wie beschrieben, erhalte ich als Ergebnis
               Langfristfinanzierung &#x2265; 5 Jahre

          Was ich auch schon getestet habe:
          <xsl:value-of select="/Data/LOOKUP_KREDITART[KREDITART_ID = $CURRENT/KREDITART_ID]/KREDITART_TEXT" disable-output-escaping="yes"/>

          Ergebnis dann:
               Langfristfinanzierung # 5 Jahre

          Deswegen kam ich auf die Idee mit dem &gt; Hat aber nicht funktioniert...

          1. Was ich auch schon getestet habe:
            <xsl:value-of select="/Data/LOOKUP_KREDITART[KREDITART_ID = $CURRENT/KREDITART_ID]/KREDITART_TEXT" disable-output-escaping="yes"/>

            Ergebnis dann:
                 Langfristfinanzierung # 5 Jahre

            Das '#' hat mich auf eine Idee gebracht - vielleicht macht er es ja richtig, nur die entsprechende Schriftart um das Zeichen anzuzeigen fehlt?

            Arial Unicode MS als Schriftart dem fop bekannt gemacht, die Zeile folgendermaßen geschrieben:

            <fo:block font-size="9pt" font-family="Arial Unicode MS">
                <xsl:value-of select="/Data/LOOKUP_KREDITART[KREDITART_ID = $CURRENT/KREDITART_ID]/KREDITART_TEXT" disable-output-escaping="yes"/>
            </fo:block>

            BINGO! Hat geklappt!
            Danke für die Hilfe trotz allem!

          2. Hallo,

            Warum verwendest du nicht das Zeichen '≥' oder die NCR '&#x2265;'* im Quelltext?

            Habe in meinem Quelltext jetzt das NCR drin:
              <KREDITART_TEXT>Langfristfinanzierung &#x2265; 5 Jahre</KREDITART_TEXT>

            Nutze ich die xsl-Zeile wie beschrieben, erhalte ich als Ergebnis
                 Langfristfinanzierung &#x2265; 5 Jahre

            Es sieht so aus, als ob die Schrift die FOP verwendet nicht über das Zeichen verfügt. Damit hast du jetzt ein echtes Problem, denn wenn du für die Ausgabe ein font-family="Symbol"  verwenden würdest, würde es mit: &#8805; oder &#x2265; oder ≥ klappen. Nur wird leider der normaler Text dabei "verunstaltet".

            Was du versuchen kannst ist das Auseinaderpflücken des Textes:
            <xsl:value-of select="substring-before(., '≥')" />
            <fo:inline font-family="Symbol"> ≥ </fo:inline>
            <xsl:value-of select="substring-after(., '≥')" />

            Grüße
            Thomas