Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 26.06.2013, 10:41
tony667 tony667 ist offline
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 26.06.2013
Beiträge: 1
tony667 befindet sich auf einem aufstrebenden Ast
Standard XSL - leere Zeilen entfernen.

Hallo liebes Forum,

ich bin neu hier und habe (natürlich) direkt eine frage.

Ich habe folgende XML:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE FORM SYSTEM "formvalid.dtd" [ <!ENTITY % FC5 "INCLUDE">]>
<FORM ACTIVE.PAGE="1" ID="0" LANG="DE" USER="0"><FC5><FLAG_IMP>N</FLAG_IMP><REF.LINK>2020012</REF.LINK><MAIN.INFO><COUNTRY.FLAG>LU</COUNTRY.FLAG>
<DATE>28.05.2012</DATE></MAIN.INFO><TENANT.INFO><TENANT.COMPANY><NAME>Mustermann AG</NAME><PERSONAL.ADDR>
<ADDRESS><STREET>Musterstraße 1</STREET><ZIPCODE>1234</ZIPCODE><CITY>Musterstadt</CITY><COUNTRY>DE</COUNTRY></ADDRESS>
</PERSONAL.ADDR></TENANT.COMPANY></TENANT.INFO><FC5.SPEC><DATE.EX>21.05.2008</DATE.EX></FC5.SPEC>
<ADD.INFO>Zusatinfos</ADD.INFO><REMARK>Vorlage 1 Uhr</REMARK>
<ENTR><ZIPCODE>6246</ZIPCODE><CITY>Musterzweite Stadt</CITY><REPORTER>Heinzel</REPORTER></ENTR>
</FC5></FORM>

jetzt wird diese per XSL in validiert und transformiert. Soweit kein Problem.
Jetzt bin ich an einem Punkt, bei dem ich mir nicht sicher bin wie diese xsl mechanik funktioniert, ich möchte Leerzeilen entfernen.

Nun kommt es aber zu folgender Problematik:
es kann sein, dass in dem Tag <Remark> HTML Code verborgen liegt, aber garantiert immer mit <REMARK><p>Text</p>Mehr Text</REMARK>
Durch falsche Eingabe kann es aber vorkommen, dass innerhalb Remark eine Leerzeile entsteht, z.B. so:
<REMARK><p>Text</p><p>*</p><p>Mehr Text</REMARK>
D.h. das <p>*</p> sorgt für eine Leerzeile, die entfernt werden muss.


In dem Tag <ADD.INFO>Zusatinfos</ADD.INFO> kommt es aber nun auch mal vor, das zuviele \r\n's eingefügt werden, die entfernt werden sollen.

Nun habe ich folgendes gelesen:
man soll <xsl:value-of select="translate(normalize-space(COMPONENT),' ','')" /> ausführen.
eine andere möglichkeit die ich fand ist:
<xsl:value-of select="normalize-space(COMPONENT)" />
und:
<xsl:value-of select="translate(component, '&#x20,&#xa,&#xd;&#x9', ''')" />

da ich kein freund von "trial and error" bin, würde ich gerne mal wissen, was der unterschied zu diesen zeilen ist, und wie wirkt der sich aus - und welche davon ist denn jetzt das , was ich brauche?
Funktioniert das ganze auch bein unnötigen <p>*</p>? Denn selbst wenn "*" entfernt würde, wäre ja immernoch eine unnötige leerzeile enthalten.

Ich muss gestehen,ich bin xsl einsteiger, aber mit guten erklärungen werde ich es wohl verstehen und anwenden können.


letztenendes würde dann in einem textfeld die xml datei nochmal transformiert und einen solchen output generieren(nur bezogen auf remarks, beispielhaft)

Code:
Remark Zeile 1
Remark Zeile 2
jetzt kann es, wie oben beschrieben sein, dass zwischen Remark Zeile 1 und Remark Zeile 2 unnötige "\r\n"'s, "<p>"'s enthalten sind.

d.h. statt: (wären eine leerzeile)
Code:
Remark Zeile 1\r\n\r\n
Remark Zeile 2
sollte nur 1x \r\n stehen, (was ja korrekt wäre)

und statt:
Code:
<p>Remark Zeile 1</p> <p>*</p>
<p>Remark Zeile 2</p>
bzw:
Code:
<p>Remark Zeile 1</p> <p></p>
<p>Remark Zeile 2</p>
jeweils:
Code:
<p>Remark Zeile 1</p> 
<p>Remark Zeile 2</p>

danke für eure zeit und geduld.

ach, mir ist gerade aufgefallen dass das forum aus <p>UND.RAUTE.160.SEMIKOLON</p>(die worte bitte durch symbole ersetzen und punkte wegdenken) ein * macht.... (siehe text oben).

Geändert von tony667 (26.06.2013 um 10:43 Uhr) Grund: hinweis
Mit Zitat antworten
Sponsored Links