This stylesheet will produce the transformation you asked for.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="other">
<other>
<xsl:apply-templates select="key" />
<xsl:apply-templates select="value" />
</other>
</xsl:template>
<xsl:template match="key">
<key>
<xsl:value-of select="." />_<xsl:value-of
select="name(../value/node()[position() = 1])" />
</key>
</xsl:template>
<xsl:template match="value">
<value>
<xsl:value-of select="./userid" />
</value>
</xsl:template>
</xsl:stylesheet>
--
Charles Knell
cknell(_at_)onebox(_dot_)com - email
-----Original Message-----
From: "Karr, David" <David(_dot_)Karr(_at_)wamu(_dot_)net>
Sent: Thu, 24 Jul 2003 10:26:43 -0700
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Techniques for transforming content like"<tag>content</tag>" to
"<tag>content</tag>"
I have a requirement to write XSLT transformers for XML documents, some
of whose element contents can consist of "encoded" XML, like this:
<other>
<key>stuff</key>
<value><userid>98765</userid></value>
</other>
We need to transform this to this:
<other>
<key>stuff_userid</key>
<value>98765</value>
</other>
There's no avoiding that this will be messy, so I'm only aiming to clean
up the worst part of this process: how I parse the "encoded" XML. A POC
for this is just using "substring-after" and "substring-before" to set
the pieces into variables. Is there a better way to parse content like
this?
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list