Hi Ruud,
I'm not sure what you misunderstood, but here's the XSLT that does what you
want. I've added a couple of comments to indicate what goes on where.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform i Ruud,version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs xsl">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<!-- establish the default namespace for the created document -->
<document xmlns="http://www.w3.org/1999/xhtml">
<xsl:apply-templates/>
</document>
</xsl:template>
<!-- match an element from the no-namespace -->
<xsl:template xmlns="" match="p">
<xsl:variable name='blip'>
<xsl:apply-templates />
</xsl:variable>
<xsl:apply-templates select='$blip' mode='pass2' />
</xsl:template>
<!-- match another element from the no-namespace -->
<xsl:template xmlns="" match="Char">
<!-- element created here is in the no-namespace -->
<char><xsl:apply-templates /></char>
</xsl:template>
<!-- match the element created during pass 1, still from the no-namespace
-->
<xsl:template xmlns="" match='char' mode='#all'>
<!-- element for the final document, to be in the (re-established)
xhtml-ish default namespace -->
<c xmlns="http://www.w3.org/1999/xhtml"><xsl:apply-templates /></c>
</xsl:template>
</xsl:transform>
Input:
<doc>
<p><Char>hello</Char><Char> there</Char></p>
</doc>
Output:
<?xml version="1.0" encoding="utf-8"?>
<document xmlns="http://www.w3.org/1999/xhtml">
<c>hello</c>
<c> there</c>
</document>
HTH
Wolfgang
On 4 September 2014 09:16, Ruud Grosmann r(_dot_)grosmann(_at_)sdu(_dot_)nl <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
Hi Wolfgang,
thanks for your reaction
On 09/03/14 17:37, Wolfgang Laun wolfgang(_dot_)laun(_at_)gmail(_dot_)com
wrote:
You need to match a document that has elements <doc>, <p>, <Char> that are
in *no namespace*, where the name has no namespace name, just a locsl
name.
Your output document is supposed to be in the namespace "
http://www.w3.org/1999/xhtml", and you'd like to use the shortened
notation
known as *default namespace*. In the 2nd version of your XSLT you
introduce
a default namespace, and, sure enough, the matches written without a
prefix
aren't in the no namespace ghetto any more.
That puzzles me a bit, because templates p and Char *do* match. The
difference is the char template, the char elements are now part of the
documentnode in the blip variable.
I tried to change the namespace of that documentnode, but up till now, I
have not succeeded.
You may, however, at any time cancel the definition for the default
namespace by writing
xmlns=""
and everything below that has no prefix hasn't a namespace name either.
Assuming this has to be added to a template match, I tried this:
<xsl:template xmlns='' match='char' mode='#all'>
<c><xsl:apply-templates /></c>
</xsl:template>
But that does not work either, nor when I change that to the xhtml
namespace.
Maybe I misunderstood you. Thanks for the explanation; I realize more and
more it is essential to have a good understanding of namespaces...
regards, Ruud
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--