Hi,
I'm facing grouping problem in one of my project. I have to make a group of each "ce-def-term" and "ce-def-description". The condition is "ce-def-description" can appear more than one time.
Could you please look into this and suggest.
Thanks,
Anil Yadav
Input xml
Code:
<ce-def-list id="deflist1">
<ce-def-term id="defterm1">adverse effects,</ce-def-term>
<ce-def-description><ce-para id="para26"><ce-cross-ref refid="p9">p. 9</ce-cross-ref></ce-para></ce-def-description>
<ce-def-description><ce-para id="para26a"><ce-cross-ref refid="p9">p. 99</ce-cross-ref></ce-para></ce-def-description>
<ce-def-term id="defterm2">allopathic medicine,</ce-def-term>
<ce-def-description><ce-para id="para27"><ce-cross-ref refid="p2">p. 2</ce-cross-ref></ce-para></ce-def-description>
<ce-def-term id="defterm3">chemical name,</ce-def-term>
<ce-def-description><ce-para id="para28"><ce-cross-ref refid="p4">p. 4</ce-cross-ref></ce-para></ce-def-description>
<ce-def-term id="defterm4">collaborative problems,</ce-def-term>
<ce-def-description><ce-para id="para29"><ce-cross-ref refid="p10">p. 10</ce-cross-ref></ce-para></ce-def-description>
<ce-def-description><ce-para id="para29a"><ce-cross-ref refid="p10">p. 100</ce-cross-ref></ce-para>
</ce-def-description>
</ce-def-list>
Required output xml
Code:
<dl>
<defitem>
<dt id="defterm1">adverse effects,</dt>
<dd>p. 9</dd>
<dd>p. 99</dd>
</defitem>
<defitem>
<dt id="defterm2">allopathic medicine,</dt>
<dd>p. 2</dd>
</defitem>
<defitem>
<dt id="defterm3">chemical name,</dt>
<dd>p. 4</dd>
</defitem>
<defitem>
<dt id="defterm4">collaborative problems,</dt>
<dd>p. 10</dd>
<dd>p. 100</dd>
</defitem>
</dl>
XSLT Code
Code:
<xsl:template match="ce-def-list">
<dl>
<xsl:apply-templates/>
</dl>
</xsl:template>
<xsl:template match="ce-def-list/ce-def-term">
<defitem>
<dt id="{@id}">
<xsl:apply-templates/>
</dt>
<xsl:for-each select="following-sibling::*">
<xsl:if test="local-name()='ce-def-description' and not(name(following-sibling::*[0])='ce-def-term')">
<dd>
<xsl:value-of select="."/>
</dd>
</xsl:if>
</xsl:for-each>
</defitem>
</xsl:template>