|
Subject: [xsl] Merging adjacent elements From: "Rick Quatro rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 28 Aug 2015 21:25:10 -0000 |
I have this xml content:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>This is a <code>test</code> of <code><i>adjacent</i>
</code><code>code </code><code>elements</code> to see if we can merge
them.</p>
</root>
What I want to end up with is this:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>This is a <code>test</code> of <code><i>adjacent</i> code
elements</code> to see if we can merge them.</p>
</root>
Here is my XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="p">
<xsl:copy>
<xsl:for-each-group select="*"
group-adjacent="boolean(self::code)">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<code>
<xsl:apply-templates
select="current-group()/node()"/>
</code>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Here is my output:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>
<code>test<i>adjacent</i> code elements</code>
</p>
</root>
How do I get the rest of the <p> content from the input? Thanks in advance.
Rick
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Of interest - Prose Mirror, Adam Retter adam.ret | Thread | Re: [xsl] Merging adjacent elements, Imsieke, Gerrit, le- |
| [xsl] Of interest - Prose Mirror, Adam Retter adam.ret | Date | Re: [xsl] Merging adjacent elements, Imsieke, Gerrit, le- |
| Month |