|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Namespaces and template matching
> 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








