🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.xml
Article #10286

XSLT - grupowanie następujących po sobie elementów na podstawie atrybutu

#10286
From: Borys Pogoreło
Date: Sun, 02 Nov 2014 18:03
47 lines
2102 bytes
Cześć,

Mam nadzieję, że ktoś tu jeszcze żyje...

Problem jest następujący - muszę w XSLT uzyskać efekt taki, że następujące
po sobie elementy, z tą samą wartością określonego atrybutu, w postaci
wyjściowej będą zawarte wewnątrz jednego elementu.

Czyli przykładowo:

<objects>
 <object template="a">aaa</object>
 <object template="a">aaa</object>
 <object template="b">bbb</object>
 <object template="a">aaa</object>
</object>

powinno dać na wyjściu:

<wrapper> aaa aaa </wrapper>
bbb
<wrapper> aaa </wrapper>

Póki co (chyba) udało mi się uzyskać ten efekt następującym łamańcem, ale
czy da się to zrobić jakoś prościej?

<xsl:template match="object[@template = 'a']">
  <xsl:if test="position() = 1 or preceding-sibling::object[1]/@template !=
'a'">

  <wrapper>
    <xsl:variable name="pos" select="position()"/>
    <xsl:apply-templates select=".|following-sibling::object[@template =
'a' and not(preceding-sibling::object[position() &gt;= $pos and @template
!= 'a'])]" mode="content"/>
  </wrapper>

  </xsl:if>
</xsl:template>

<xsl:template match="object[@template = 'a']" mode="content">
  <!-- ... tutaj wyświetlamy element ... -->
</xsl:template>

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Technical Details
Message-ID: <91ts3jt22p6a.xognombdq08n$.dlg@40tude.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.promontel.net.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.promontel.net.pl!not-for-mail
From: Borys Pogoreło <borys@pl.edu.leszno>
Newsgroups: pl.comp.xml
Subject: XSLT - grupowanie następujących po sobie
 elementów na podstawie atrybutu
Date: Sun, 2 Nov 2014 19:03:10 +0100
Organization: snafu
Lines: 47
Message-ID: <91ts3jt22p6a.xognombdq08n$.dlg@40tude.net>
NNTP-Posting-Host: bdl244.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: thunar.promontel.net.pl 1414951381 775 83.27.253.244 (2 Nov 2014 18:03:01 GMT)
X-Complaints-To: abuse@promontel.net.pl
NNTP-Posting-Date: Sun, 2 Nov 2014 18:03:01 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.14.1pl
X-fnord: obey.
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit