Thomas J.S.: Umwandlung XML - HTML

Beitrag lesen

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