Nadine: Umwandlung XML - HTML

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

  1. 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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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

    2. 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

      --
      „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
      1. 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
        
  2. 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

    1. 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

      1. 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:

        • in deinem XML kommem <hinweise>-Elemente total willkürlich vor
        • es gibt kein Unterscheidungsmerkmal (oder leitet ein Konstrukt wie "<hinweise><p><b>Hinweis:</b></p></hinweise>" _immer_ eine "neue Hinweis-Gruppe" ein?)
        • 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

        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

        1. 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

          1. 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