XML Leerzeichen übernehmen
Moderator: Moderatoren
XML Leerzeichen übernehmen
Guten Tag,
ich passe momentan den xslt Filter von Doc Book nach Open Document für ein Entwicklerhandbuch an und stoße gerade auf folgendes Problem:
Die Zeilenumbruche aus dem XML File erhalte ich per xsl:preserve-space und sind auch in der Datei content.xml zu erkennen. Jedoch werden jene Umbrüche nicht ins *.odt File übernommen! Jetzt wollte ich fragen ob es ein Attribut gibt, das die Zeilenumbrüche und sonstigen Leerraumzeichen beibehält.
Vielen Dank
Michael Polotzek
ich passe momentan den xslt Filter von Doc Book nach Open Document für ein Entwicklerhandbuch an und stoße gerade auf folgendes Problem:
Die Zeilenumbruche aus dem XML File erhalte ich per xsl:preserve-space und sind auch in der Datei content.xml zu erkennen. Jedoch werden jene Umbrüche nicht ins *.odt File übernommen! Jetzt wollte ich fragen ob es ein Attribut gibt, das die Zeilenumbrüche und sonstigen Leerraumzeichen beibehält.
Vielen Dank
Michael Polotzek
Re: XML Leerzeichen übernehmen
Wüsste einer wenigstens an wen ich mich mit diesem Problem wenden könnte?
Re: XML Leerzeichen übernehmen
das *.odt öffnen, einen Zeilenumbruch einbauen, speichern, im content.xml nachschauen
wie das aussehen muss - ob da ein Muster, ein Unterschied zu erkennen ist ?? Lässt sich damit der
xslt Filter anpassen ?
hilft sowas weiter ?
wf
wie das aussehen muss - ob da ein Muster, ein Unterschied zu erkennen ist ?? Lässt sich damit der
xslt Filter anpassen ?
hilft sowas weiter ?
wf
Re: XML Leerzeichen übernehmen
vielleicht wars ja ein bischen Unsinn gerade eben -- obwohl:
hab aber noch ein bisschen gegoogelt und man kann wohl
Zeilenumbrüche in XSLT erkennen:
http://www.xmlplease.com/whitespace
und dort
1. Whitespace in a text string
mit replace bzw. translate Funktionen anpacken.
So lese ich das zumindest mal -- hoffe es hilft.
wf
hab aber noch ein bisschen gegoogelt und man kann wohl
Zeilenumbrüche in XSLT erkennen:
http://www.xmlplease.com/whitespace
und dort
1. Whitespace in a text string
mit replace bzw. translate Funktionen anpacken.
So lese ich das zumindest mal -- hoffe es hilft.
wf
Re: XML Leerzeichen übernehmen
Ja, an das für solche Fragen eingerichtete Forum OOo Basic und Java.polo85 hat geschrieben:Wüsste einer wenigstens an wen ich mich mit diesem Problem wenden könnte?
Gruß
lorbass
Re: XML Leerzeichen übernehmen
Kann ein Admin diesen Beitrag zum OOo Basic und Java Forum hinzufügen, da ich nicht doppelt posten möchte.
Re: XML Leerzeichen übernehmen
Also nach dem Tip von wfrank kam ich ein wenig weiter, jedoch hänge an der nächsten Stelle:
Anbei die kritische Codestelle:
Ich weiß nicht mit welchen Zeichen ich den Zeilenumbruch und die Leerzeichen ersetzen muß, damit diese auch im Dokument auftauchen. Der Zeilenumbruch in ODF sieht
Anbei die kritische Codestelle:
Code: Alles auswählen
<xsl:template match="programlisting">
<xsl:element name="text:p">
<xsl:attribute name="text:style-name">Frame contents</xsl:attribute>
<!-- Zeilenumbruch -->
<xsl:value-of select="translate(current(),'
','?')" />
<!--Leerzeichen-->
<xsl:value-of select="translate(current(),' ','?')" />
</xsl:element>
</xsl:template>
aus und das Leerzeichen<text:p text:style-name="Standard"/>
<text:s text:c="17"/>
Re: XML Leerzeichen übernehmen
ich hatte mir vorgestellt, dass dein Filter direkt das *.odt, also
irgendwie das content.xml erstellt und hatte daher
gedacht den Zeilenumbruch durch "<text:line-break />"
zu ersetzen.
"<text:line-break />" ist das Element das ooo in ein content.xml
schreibt, wenn man ins Dokument z.B. ein Return reinsetzt und sich
das dann in content.xml anschaut.
(ist das zu brutal gedacht ? )
wf
irgendwie das content.xml erstellt und hatte daher
gedacht den Zeilenumbruch durch "<text:line-break />"
zu ersetzen.
"<text:line-break />" ist das Element das ooo in ein content.xml
schreibt, wenn man ins Dokument z.B. ein Return reinsetzt und sich
das dann in content.xml anschaut.
(ist das zu brutal gedacht ? )
wf
Re: XML Leerzeichen übernehmen
Ne der Filter arbeitet anders.
1) Liest das Ursprungsdokument (in meinem Fall Open Book) ein
2) Erstellt mit Hilfe des XSLT-Filters und einer Dokumentenvorlage ein neues Dokument und wandelt die Formatierungen in jene Syntax des ODT Dokuments um. Jedoch ist die Standard Umwandlung sehr spartanisch und kennt nicht die ganze Open Book Befehle.
Und da spring ich ein und versuche das Enddokument mit Hilfe des Filters nach unseren Anforderungen zu erstellen.
Aber im Prinzip hast du schon Recht und arbeite ähnlich wie du es mir vorgeschlagen hast, nur stoße ich eben auf das Problem dass die Zeilenumbrüche in einem bestimmten Kontext auftreten, so dass ich die Zeilenumbruchbefehle nicht einfach durch suchen und ersetzten kann.
1) Liest das Ursprungsdokument (in meinem Fall Open Book) ein
2) Erstellt mit Hilfe des XSLT-Filters und einer Dokumentenvorlage ein neues Dokument und wandelt die Formatierungen in jene Syntax des ODT Dokuments um. Jedoch ist die Standard Umwandlung sehr spartanisch und kennt nicht die ganze Open Book Befehle.
Und da spring ich ein und versuche das Enddokument mit Hilfe des Filters nach unseren Anforderungen zu erstellen.
Aber im Prinzip hast du schon Recht und arbeite ähnlich wie du es mir vorgeschlagen hast, nur stoße ich eben auf das Problem dass die Zeilenumbrüche in einem bestimmten Kontext auftreten, so dass ich die Zeilenumbruchbefehle nicht einfach durch suchen und ersetzten kann.
Re: XML Leerzeichen übernehmen
ich hab jetzt verstanden dass es bei content.xml schon zu spät ist -- du
hast ein XML document das über diesen angepassten Filter in den Writer
geladen wird. Und da solls halt schon stimmen.
Mit dem Filter kannst jetzt zwar Zeilenumbrüche erkennen (?) und durch ein Zeichen
ersetzen (?) aber du weisst nicht womit du ersetzen musst damit im Writer ein
Zeilenumbruch kommt. (?)
Du hast keine Stelle an der ein Zeilenumbruch richtig rüberkommt, sonst hättest du ja
dort ablesen können was an diesem Zeilenumbruch in deinem Original anders ist.
So langsam wirds schwierig -- kannst du ein Text Schnipsel als Beispiel
und vielleicht den geänderten Filter oder den Original Filter zur Verfügung
stellen. (Im Idealfall kommst du bei der Gelegenheit von allein auf die Lösung )
wf
hast ein XML document das über diesen angepassten Filter in den Writer
geladen wird. Und da solls halt schon stimmen.
Mit dem Filter kannst jetzt zwar Zeilenumbrüche erkennen (?) und durch ein Zeichen
ersetzen (?) aber du weisst nicht womit du ersetzen musst damit im Writer ein
Zeilenumbruch kommt. (?)
Du hast keine Stelle an der ein Zeilenumbruch richtig rüberkommt, sonst hättest du ja
dort ablesen können was an diesem Zeilenumbruch in deinem Original anders ist.
So langsam wirds schwierig -- kannst du ein Text Schnipsel als Beispiel
und vielleicht den geänderten Filter oder den Original Filter zur Verfügung
stellen. (Im Idealfall kommst du bei der Gelegenheit von allein auf die Lösung )
wf
Re: XML Leerzeichen übernehmen
Hi so ähnlich ja, ich gebe diesen Weg langsam ab und werde wohl in den sauren Apfel beißen und sämtliche Dokumente händisch bearbeiten! würg!
Aber hier die Codeschnipsel:
Auszug aus Docbook:
Das XSLT:
Das erwartete Ergebnis mit dem pdf , das die Vorlage für ODT ist beigefügt!
nachtrag: Irgendwie kann ich das jpg nicht hochladen bzw. wird nicht angezeigt!
Vielleicht findet da noch wer die Lösung.

Aber hier die Codeschnipsel:
Auszug aus Docbook:
Code: Alles auswählen
<section id="DatenLoggin">
<title>LOGGING-Sektion</title>
<para>Diese Sektion ist optional.</para>
<para>Sofern der <literal>LOGFILENAME</literal> mit einem
<literal>.</literal> oder <literal>/</literal> beginnt, wird er direkt
übernommen, andernfalls wird der Inhalt der Environmentvariable
<literal>$HOME</literal> am Anfang eingefügt.</para>
<para>Verzeichnisnamen dürfen Unxistyle <literal>/</literal> oder
OS2-style <literal>\\</literal> getrennt werden, die Trennzeichen
werden entsprechend dem Betriebssystem angepaßt.</para>
<para>Falls das Logfile nicht geöffnet werden kann, beendet sich der
Server.</para>
<para>Es gibt eine Alterung der Logfiles statt, dafür kann die Anzahl
der Logfiles <literal>LOGFILECOUNT</literal>.</para>
<para>Und eine maximale Größe <literal>LOGFILESIZE</literal> angegeben
werden. Das aktuelle Logfile bekommt eine zusätzliche Endung
<literal>.000</literal>, die älteren Logfiles bekommen aufsteigende
Nummern als Endung.</para>
<programlisting>{LOGGING
CURRENTDEVICE = FILE # current log-device
{
DEVICES # Description of all devices
{
FILE
LOGFILENAME = log/bas.log
LOGFILECOUNT = 5 # maximum number of logfiles created
# before reuse occurs
LOGFILESIZE = 25000000 # maximum filesize in bytes
ADDPROCESSID = FALSE
}
}
} </programlisting>
</section>
Code: Alles auswählen
<xsl:template match="programlisting">
<xsl:element name="text:p">
<xsl:attribute name="text:style-name">Frame contents</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
nachtrag: Irgendwie kann ich das jpg nicht hochladen bzw. wird nicht angezeigt!
Vielleicht findet da noch wer die Lösung.
Re: XML Leerzeichen übernehmen
Anbei die Darstellung des bisher verwendeten PDF generators.
- Dateianhänge
-
- So sollte die endgütige Fassung als ODT aussehen.
- AuszugPDF.jpg (40.03 KiB) 3291 mal betrachtet
Re: XML Leerzeichen übernehmen
noch was zum schnellen testen: funktioniert ein
<literallayout>blab bla
bla bla </literallayout>
Konstrukt ??
Quelle: http://www.hoferichter.net/index.php?id ... lenumbruch
wf
<literallayout>blab bla
bla bla </literallayout>
Konstrukt ??
Quelle: http://www.hoferichter.net/index.php?id ... lenumbruch
wf
Re: XML Leerzeichen übernehmen
Also mein xslt kennt dieses Konstrukt nicht ist aber auch irrelevant, da die docBook Dokumente bereits existieren und ich jene nicht vorher abändern möchte bevor ich in sich nach odt umwandle!
Re: XML Leerzeichen übernehmen
vielleicht fällt ja noch jemand was dazu ein
--- ich kenn jetzt nur einen Workaround, den ich erstmal verwenden würde, damit es handhabbar fertig wird:
im Oo-Dokument sieht das dann so aus:
{LOGGING<literal>mybreak</literal> CURRENTDEVICE = FILE
und dann mit Suchen - Ersetzen:
Suche : <literal>mybreak</literal>
Ersetze: \n
unter Optionen muss "Regulärer Ausdruck angeklickt sein".
Damit kann man dann alle Suchen und alle auf einen Schlag ersetzen -- wenn man mutig ist.
(ich klick mich da immer erst von einem zum anderen durch... )
aber vielleicht machst du das ja schon so oder so ähnlich ...
wf
P.S. ist ja vielleicht ein bisschen hart was wir da wollen
--- ich kenn jetzt nur einen Workaround, den ich erstmal verwenden würde, damit es handhabbar fertig wird:
Code: Alles auswählen
<xsl:template match="programlisting">
<xsl:element name="text:p">
<xsl:attribute name="text:style-name">Frame contents</xsl:attribute>
<!-- Zeilenumbruch -->
<xsl:value-of select="replace(current(),'
','<literal>mybreak</literal>')" />
<!-- <xsl:apply-templates/> -->
</xsl:element>
</xsl:template>
</xsl:stylesheet>
{LOGGING<literal>mybreak</literal> CURRENTDEVICE = FILE
und dann mit Suchen - Ersetzen:
Suche : <literal>mybreak</literal>
Ersetze: \n
unter Optionen muss "Regulärer Ausdruck angeklickt sein".
Damit kann man dann alle Suchen und alle auf einen Schlag ersetzen -- wenn man mutig ist.
(ich klick mich da immer erst von einem zum anderen durch... )
aber vielleicht machst du das ja schon so oder so ähnlich ...
wf
P.S. ist ja vielleicht ein bisschen hart was wir da wollen