Umwandlung XML - HTML
Nadine
- xsl
0 wahsaga0 Nadine0 Gunnar Bittersmann0 Nadine
0 Thomas J.S.0 Nadine0 Thomas J.S.0 Nadine
Hallo liebes Forum,
ich habe folgendes Problem:
Ein XML soll in ein HTML umgewandelt werden. An sich kein großes Problem - nun kommt aber der Haken:
Es gibt z.B. solche Codes:
<hinweise><p><b>Erster Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
.....
<hinweise><p><b>Zweiter Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
Dies soll per XSLT so umgeformt werden und hinterher so aussehen:
<font class="hinweise">
<p><b>Erster Hinweis:</b></p><br/>
<p>...</p>
</font>
.....
<font class="hinweise">
<p><b>Zweiter Hinweis:</b></p><br/>
<p>...</p>
</font>
Ich habe es schon mit <xsl:if test="preceding-sibling:[name()=hinweise">... versucht und fuer den ersten und letzten hinweis ne sonderregel zu definieren, aber das ist schon daran scheitert, dass er den <font>-Tag nicht in unterschiedlichen xsl:if-Tags zulässt.
Viele Grüße
Nadine
hi,
Dies soll per XSLT so umgeformt werden und hinterher so aussehen:
<font class="hinweise">
<p><b>Erster Hinweis:</b></p><br/>
Himmel, wozu das?
Was willst du heute noch mit font?
Vergebe sinnvoll Klassen und IDs, gruppiere wenn erforderlich mit Div - und formaitere dann mit CSS.
gruß,
wahsaga
hi,
Dies soll per XSLT so umgeformt werden und hinterher so aussehen:
<font class="hinweise">
<p><b>Erster Hinweis:</b></p><br/>Himmel, wozu das?
Was willst du heute noch mit font?
Vergebe sinnvoll Klassen und IDs, gruppiere wenn erforderlich mit Div - und formaitere dann mit CSS.gruß,
wahsaga
Hallo,
Ja, kann ich auch machen - aber darum gehts mir jetzt erstmal gar net.
Das font kann auch ein div sein, trotzdem soll es alle aufeinanderfolgende <hinweis>-knoten auf einmal umschliessen.
Grüßle
Nadine
Hello out there!
Dies soll per XSLT so umgeformt werden und hinterher so aussehen:
<font class="hinweise">
<p><b>Erster Hinweis:</b></p><br/>Himmel, wozu das?
Was willst du heute noch mit font?
Vergebe sinnvoll Klassen und IDs, gruppiere wenn erforderlich mit Div
Divitis?
Hier bietet sich eine Definitionsliste an:
<dl class="hinweise">
<dt>Erster Hinweis:</dt>
<dd>...</dd>
<dt>Zweiter Hinweis:</dt>
<dd>...</dd>
</dl>
- und formaitere dann mit CSS.
Das allerdings. Fast jedenfalls. ;-)
See ya up the road,
Gunnar
Hello out there!
Divitis?Hier bietet sich eine Definitionsliste an:
<dl class="hinweise">
<dt>Erster Hinweis:</dt>
<dd>...</dd><dt>Zweiter Hinweis:</dt>
<dd>...</dd>
</dl>
>
>
> Das allerdings. Fast jedenfalls. ;-)
>
> See ya up the road,
> Gunnar
Hi,
Hm... auch das löst das eigentliche Problem net.
Wäre ganz schön, wenn wir jetzt vom unschönen CSS abrücken könnten und das eigentliche Problem betrachten könnten.
Viele Grüße
Nadine
Hallo,
ich habe folgendes Problem:
Ein XML soll in ein HTML umgewandelt werden. An sich kein großes Problem - nun kommt aber der Haken:
Es gibt z.B. solche Codes:
<hinweise><p><b>Erster Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
.....
<hinweise><p><b>Zweiter Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>Dies soll per XSLT so umgeformt werden und hinterher so aussehen:
<font class="hinweise">
<p><b>Erster Hinweis:</b></p><br/>
<p>...</p>
</font>
.....
<font class="hinweise">
<p><b>Zweiter Hinweis:</b></p><br/>
<p>...</p>
</font>
<xsl:template match="hinweise">
<div class="hinweise">
...
</div>
</xsl:template>
Ich habe es schon mit <xsl:if test="preceding-sibling:[name()=hinweise">... versucht und fuer den ersten und letzten hinweis ne sonderregel zu definieren,
Z.B:
<xsl:for-each select="hinweise">
<div>
<xsl:attribute name="class">
xsl:choose
<xsl:when test="(position() = 1) or (position() = last())">hinweise sonderklasse</xsl:when>
xsl:otherwisehinweise</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</div>
</xsl:for-each>
aber das ist schon daran scheitert, dass er den <font>-Tag nicht in unterschiedlichen xsl:if-Tags zulässt.
Wie bitte?
Grüße
Thomas
Hallo,
ich glaub, ich muss nochmal erklären:
Also ich hab folgendes:
<hinweise><p><b>Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
usw. (sprich es kann noch mehr <hinweise> geben).
Weiter untem im Dokument kommt dann wieder:
<hinweise><p><b>Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
usw. (sprich es kann noch mehr <hinweise> geben).
Diese soll einzeln per XSLT umgeformt werden und hinterher so aussehen:
<div class="hinweise">
<p><b>Hinweis:</b></p><br/>
<p>...</p>(<br/> falls es noch mehr Zeilen mit <hinweise> gibt)
(Es kann noch mehr Zeilen geben)
</div>
Vielleicht kann man nun eher nachvollziehen, was ich brauche.
Viele Grüße
Nadine
Hallo,
ich glaub, ich muss nochmal erklären:
Möglich.
Also ich hab folgendes:
<hinweise><p><b>Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
usw. (sprich es kann noch mehr <hinweise> geben).Weiter untem im Dokument kommt dann wieder:
<hinweise><p><b>Hinweis:</b></p></hinweise>
<hinweise><p>...</p></hinweise>
usw. (sprich es kann noch mehr <hinweise> geben).
Dann lasse mich bitte nachfragen:
Und die <hinweise>-Elemente sollten nun:
- alle innerhalb eines Kontainer-Elements kommen? oder
- gruppiert werden und zwar mit "<hinweise><p><b>Hinweis:</b></p></hinweise>" als Gruppentrenner, pro Gruppe innerhalb eines Kontainer-Elements kommen?
Grüße
Thomas
Hallo,
Dann lasse mich bitte nachfragen:
- in deinem XML kommem <hinweise>-Elemente total willkürlich vor
Ja, kann man so sagen.
- es gibt kein Unterscheidungsmerkmal (oder leitet ein Konstrukt wie "<hinweise><p><b>Hinweis:</b></p></hinweise>" _immer_ eine "neue Hinweis-Gruppe" ein?)
Doch, das ist eigentlich ein gutes Merkmal
- wenn obiger punkt "ja":
- es kann nach dem "<hinweise><p><b>Hinweis:</b></p></hinweise>" (als Gruppentrenner) beliebig viele anderen <hinweise>-Elemente, die quasi zur selben Gruppe gehören, kommen
genau so ist es!
Und die <hinweise>-Elemente sollten nun:
- gruppiert werden und zwar mit "<hinweise><p><b>Hinweis:</b></p></hinweise>" als Gruppentrenner, pro Gruppe innerhalb eines Kontainer-Elements kommen?
Ich denk so müsste es richtig sein, ja.
Grüße
Nadine
Hallo,
Dann lasse mich bitte nachfragen:
- in deinem XML kommem <hinweise>-Elemente total willkürlich vor
Ja, kann man so sagen.- es gibt kein Unterscheidungsmerkmal (oder leitet ein Konstrukt wie "<hinweise><p><b>Hinweis:</b></p></hinweise>" _immer_ eine "neue Hinweis-Gruppe" ein?)
Doch, das ist eigentlich ein gutes Merkmal- wenn obiger punkt "ja":
- es kann nach dem "<hinweise><p><b>Hinweis:</b></p></hinweise>" (als Gruppentrenner) beliebig viele anderen <hinweise>-Elemente, die quasi zur selben Gruppe gehören, kommen
genau so ist es!Und die <hinweise>-Elemente sollten nun:
- gruppiert werden und zwar mit "<hinweise><p><b>Hinweis:</b></p></hinweise>" als Gruppentrenner, pro Gruppe innerhalb eines Kontainer-Elements kommen?
Ich denk so müsste es richtig sein, ja.
Hat schon jemand gesagt, dass so eine XML-Struktur besch***eiden ist?
Also:
------------------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="hinw" match="hinweise" use="."/>
...
<xsl:for-each select="hinweise[generate-id() = generate-id(key('hinw', .)[1])]">
<xsl:variable name="pos" select="position()"/>
<xsl:if test="not(p/b['Hinweis:'])">
<div class="hinweise">
<p><b>Hinweis:</b></p>
<xsl:for-each select="key('hinw', .)">
<p>
<xsl:value-of select="p"/>
</p>
</xsl:for-each>
</div>
</xsl:if>
</xsl:for-each>
...
</xsl:stylesheet>
-------------
Mit XSLT 2:
----------------
<xsl:for-each-group select="hinweise" group-by=".">
<xsl:if test="not(p/b['Hinweis:'])">
<div class="hinweise">
<p><b>Hinweis:</b> </p>
<xsl:for-each select="current-group()">
<xsl:apply-templates />
</xsl:for-each>
</div>
</xsl:if>
</xsl:for-each-group>
------------------
Diese Möglichkeit(en) funktionierte(n) in meinen Test.
Grüße
Thomas