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