Subject: RE: [xsl] Namespaces and template matching From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Fri, 8 Nov 2002 09:14:44 -0000 |
> I have the following stylesheet which renames any 'x' element to 'y': > > <?xml version='1.0' encoding='UTF-8'?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > <xsl:template match="x"> > <xsl:element name="y"> > <xsl:apply-templates select="@*"/> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > <xsl:template match="@*|node()"> > <xsl:copy> > <xsl:apply-templates select="@*"/> > <xsl:apply-templates/> > </xsl:copy> > </xsl:template> > </xsl:stylesheet> > > But when a namespace is placed on the root node, it ceases to work: > > <?xml version="1.0" encoding="UTF-8"?> > <a xmlns="b"> > <x a="1" b="2" c="3" d="4" /> > </a> > > becomes: > > <?xml version="1.0" encoding="UTF-8"?> > <a xmlns="b"> > <x a="1" b="2" c="3" d="4"/> > </a> > > Why doesn't the second document translate properly? Because it doesn't contain an <x> element, it contains a <{b}x> element. Declare the namespace in the stylesheet with an explicit prefix p, and change the template rule to match="p:x". This is a FAQ. Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Namespaces and template m, David N Bertoni/Camb | Thread | RE: [xsl] Namespaces and template m, David P. Nesbitt |
RE: [xsl] not()'ing a false variabl, Michael Kay | Date | Re: [xsl] UTF-8, RTF and XSLT, David Carlisle |
Month |