View difference between Paste ID: URDp6H0V and PkJEpusF
SHOW: | | - or go back to the newest paste.
1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:transform version="1.0"
3
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
>
5
6-
<!-- merge sibling elements, maybe separated with blankspace nodes -->
6+
<!-- merge sibling elements, maybe separated with blankspace text nodes -->
7
8
<xsl:template match="*">
9
  <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
10
</xsl:template>
11
12-
<xsl:template match="text()[not( normalize-space() )]" mode="greek"/>
12+
13
<xsl:template match="text()[not( normalize-space() )]" mode="merge"/>
14-
<xsl:template match="text()[not( normalize-space() )][ following-sibling::node()[self::spoj] ]" mode="greek">
14+
15
<xsl:template match="text()[not( normalize-space() )][ following-sibling::node()[1][self::spoj] ]" mode="merge">
16
  <xsl:text> </xsl:text>
17
</xsl:template>
18-
<xsl:template match="spoj" mode="greek">
18+
19
<xsl:template match="spoj" mode="merge">
20
  <xsl:apply-templates/>
21
</xsl:template>
22-
<xsl:template match="defpozn">
22+
23-
  <comment><xsl:copy-of select="@*"/>
23+
<xsl:template name="merge">
24-
    <xsl:copy-of select="node()[1][self::text()]"/>
24+
  <!-- recursive for the all following siblings in the group -->
25-
    <xsl:if test="spoj">
25+
  <xsl:apply-templates select="." mode="merge"/>
26-
    <expression>
26+
  <xsl:for-each select="following-sibling::node()[1][ self::text()[not(normalize-space())] or self::spoj ]">
27-
      <xsl:apply-templates select=" spoj[1] | spoj[1]/following-sibling::node()" mode="greek"/>
27+
    <xsl:call-template name="merge"/>
28-
    </expression>
28+
  </xsl:for-each>
29-
    </xsl:if>
29+
30-
  </comment>
30+
31
32
<!-- skip merged -->
33-
<xsl:template match="defpozn[ *[ not(self::spoj)] ] | defpozn[ spoj[1]/following-sibling::text()[ normalize-space() ] ] ">
33+
<xsl:template match="text()[ preceding-sibling::node()[1]/self::spoj ][ following-sibling::node()[1]/self::spoj ][not(normalize-space())]"/>
34-
  <xsl:message terminate="yes">
34+
<xsl:template match="spoj" />
35-
    <xsl:text>Not supported:</xsl:text>
35+
36-
    <xsl:copy-of select="."/>
36+
<!-- the first 'spoj' in the group -->
37-
  </xsl:message>
37+
<xsl:template match="spoj[preceding-sibling::node()[1][ self::text()[normalize-space()] or self::*[ not(self::spoj )] ] ]">
38
  <expression>
39
    <xsl:call-template name="merge"/>
40
  </expression>
41
</xsl:template>
42
43
44
<xsl:output
45
  encoding="UTF-8"
46
  indent="yes"
47
  method="xml"
48
/>
49
50
</xsl:transform>