Subject: RE: Name space confusion
From: "Lars Huttar" <lars_huttar@xxxxxxx>
Date: Thu, 30 Oct 2003 21:47:38 -0600
|
Hugh wrote:
> I am wanting to write stylesheets that can be used by xml files from a
> variety of sources
> I have trouble because the name space is not always specified by the
> supplier. I would like to be able to match on an element of
> known local
> name, but from a, possibly undefined namespace.
...
> Sample XSL
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:fo="http://www.w3.org/1999/XSL/Format">
>
> <xsl:template match="/">
> <xsl:element name="myNewRoot">
> <xsl:for-each select=".//CgPoints">
> <xsl:element name="SomeOtherThing">
> <xsl:apply-templates select="."/>
> </xsl:element>
> </xsl:for-each>
> </xsl:element>
> </xsl:template>
>
> <xsl:template match="CgPoints">
> <xsl:element name="myFirstLevelChild">
> </xsl:element>
> </xsl:template>
> </xsl:stylesheet>
The match pattern is relatively easy; do
<xsl:template match="*[local-name() = 'CgPoints']">
I'm not sure what you want to do for namespaces in the output...
If you don't need a namespace, you can leave your stylesheet as-is.
If you want to copy the namespace of the input XML, you can do
something like
<xsl:template match="*[local-name() = 'CgPoints']">
<xsl:element name="myFirstLevelChild"
namespace="{namespace-uri()}" />
</xsl:template>
This will copy the namespace-uri from CgPoints in the input XML.
Hopefully you're not picky about what namespace prefix is used. :-)
Lars
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|