Natascha: Problem mit "<" bei Transf. von XML > XSLT > PDF

Hallo Leute,
weil ich ein "<" in meinem Text habe, den ich zum PDF transformieren möchte, bekomme ich diese Fehlermeldung:

[ERROR] The content of elements must consist of well-formed character data or markup.

Ich habe auch schon versucht das "<" dyn. mit "&lt;" zu ersetzten, dann ist die wohlgeformtheit gegeben und das PDF wird generiert, nur steht im Text dann das "&lt;".

Im Doctype des XML Dokuments steht folgendes:

'<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html [
<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">
]>

ich kenne mich mit DTD überhaupt nicht aus.
Hat jemand eine Idee?

vielen Dank
N.

  1. Hallo Natascha,

    weil ich ein "<" in meinem Text habe, den ich zum PDF transformieren möchte, bekomme ich diese Fehlermeldung:

    [ERROR] The content of elements must consist of well-formed character data or markup.

    Schreibe im XSLT-Stylesheet:
    <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

    oder defininiere unter XSLT 2.0 eine xsl:character-map mit xsl:output-character-Kindelementen.

    Grüße,
    Thomas

    1. Schreibe im XSLT-Stylesheet:
      <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

      Hallo Thomas, vielen Dank für Deine Antwort

      in meinem Stylesheet rufe ich dieses Template auf:

      <!-- ================== Template Einleitung ===================== -->
      <xsl:template name="einleitung">
         <fo:block font-family="Arial" font-size="10pt" font-style="normal" font-weight="normal">
         <xsl:value-of disable-output-escaping="yes" select="content/einleitung" />
         </fo:block>
      </xsl:template>
      <!-- ============================================================= -->

      wo setzte ich das denn jetzt ein
      <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

      Grüße
      Natascha

      1. Hallo Natascha,

        wo setzte ich das denn jetzt ein
        <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

        Vermutlich steht im FO die Zeichenfolge &amp;lt; und nicht &lt;. Im letzteren Fall sollte ein <-Zeichen in der Ausgabe erscheinen.

        Dieser Code verhält sich so:

        <?xml version="1.0" encoding="UTF-8"?>  
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">  
          
          <fo:layout-master-set>  
            <fo:simple-page-master master-name="A4-hoch"  
             page-height="29.7cm" page-width="21cm" margin-top="2cm"  
             margin-bottom="2cm" margin-left="3cm" margin-right="2cm">  
              <fo:region-body/>  
            </fo:simple-page-master>  
          </fo:layout-master-set>  
          
          <fo:page-sequence master-reference="A4-hoch">  
            <fo:flow flow-name="xsl-region-body">  
              <fo:block font-family="sans-serif" font-size="14pt">Hallo Welt!</fo:block>  
              <fo:block font-family="sans-serif" font-size="14pt">Noch ein Text mit 5 &lt; 6</fo:block>  
            </fo:flow>  
          </fo:page-sequence>  
          
        </fo:root>
        

        Im PDF-Ergebnis steht 5 < 6.

        Grüße,
        Thomas

        1. Hallo Thomas
          es stimmt wenn ich das "<"-Zeichen mit "lt;" ersetzte, steht nachher "&amp;lt;" drin und es steht im PDF dann lt; und nicht <. Wieso setzt er das "&amp;" davor?

          Grüße,
          Natascha

          1. Hi Thomas,
            ich glaub ich habe es, ich habe selbst eine str_replace-Funktion eingesetzt die mir das "&" durch "&amp" ersetzt. Schön doof.

            vielen Dank nochmal

            Gruß
            N.

    2. Nachtrag:

      Schreibe im XSLT-Stylesheet:
      <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

      Das bringt natürlich im XML-Kontext (FO=XML) das Problem der mangelnden Wohlgeformtheit, ich war eher auf Text-Ausgaben fixiert. Im Grunde sollte &lt; doch vom FO-Formatter im PDF entsprechend umgewandelt werden.

      Grüße,
      Thomas

      1. Nachtrag:

        Schreibe im XSLT-Stylesheet:
        <xsl:text disable-output-escaping="yes">&lt;</xsl:text>

        Das bringt natürlich im XML-Kontext (FO=XML) das Problem der mangelnden Wohlgeformtheit, ich war eher auf Text-Ausgaben fixiert. Im Grunde sollte &lt; doch vom FO-Formatter im PDF entsprechend umgewandelt werden.

        Grüße,
        Thomas

        Hallo Thomas,
        sobald ein "<" im Text auftaucht (kommt aus der Datenbank) ist die wohlgeformtheit dahin. Wenn ich die auftauchenden "<" im Text mit "&lt;" ersetzte, steht im PDF "&lt;" statt "<".

        <xsl:text disable-output-escaping="yes">&lt;</xsl:text>
        kann ich wohl nicht einfach ins Stylesheet einsetzen, weil ich nicht weiß, wo das "<" auftritt (Text aus CMS)