Problem mit "<" bei Transf. von XML > XSLT > PDF
Natascha
- xsl
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 "<" zu ersetzten, dann ist die wohlgeformtheit gegeben und das PDF wird generiert, nur steht im Text dann das "<".
Im Doctype des XML Dokuments steht folgendes:
'<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html [
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
]>
ich kenne mich mit DTD überhaupt nicht aus.
Hat jemand eine Idee?
vielen Dank
N.
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"><</xsl:text>
oder defininiere unter XSLT 2.0 eine xsl:character-map mit xsl:output-character-Kindelementen.
Grüße,
Thomas
Schreibe im XSLT-Stylesheet:
<xsl:text disable-output-escaping="yes"><</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"><</xsl:text>
Grüße
Natascha
Hallo Natascha,
wo setzte ich das denn jetzt ein
<xsl:text disable-output-escaping="yes"><</xsl:text>
Vermutlich steht im FO die Zeichenfolge &lt; und nicht <. 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 < 6</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Im PDF-Ergebnis steht 5 < 6.
Grüße,
Thomas
Hallo Thomas
es stimmt wenn ich das "<"-Zeichen mit "lt;" ersetzte, steht nachher "&lt;" drin und es steht im PDF dann lt; und nicht <. Wieso setzt er das "&" davor?
Grüße,
Natascha
Hi Thomas,
ich glaub ich habe es, ich habe selbst eine str_replace-Funktion eingesetzt die mir das "&" durch "&" ersetzt. Schön doof.
vielen Dank nochmal
Gruß
N.
Nachtrag:
Schreibe im XSLT-Stylesheet:
<xsl:text disable-output-escaping="yes"><</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 < doch vom FO-Formatter im PDF entsprechend umgewandelt werden.
Grüße,
Thomas
Nachtrag:
Schreibe im XSLT-Stylesheet:
<xsl:text disable-output-escaping="yes"><</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 < 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 "<" ersetzte, steht im PDF "<" statt "<".
<xsl:text disable-output-escaping="yes"><</xsl:text>
kann ich wohl nicht einfach ins Stylesheet einsetzen, weil ich nicht weiß, wo das "<" auftritt (Text aus CMS)