Subject: RE: [xsl] Namespace problem From: "Michael Kay" <mhk@xxxxxxxxx> Date: Mon, 13 Sep 2004 22:48:33 +0100 |
My reading of Dave's response was that in Xalan-C the namespace axis does return all in-scope namespaces, but that you cannot reliably obtain the parent element of a namespace node. So rather than accessing the parent of the namespace node using the parent axis, you need to save it (the parent element) in a variable. Is that correct? Michael Kay > -----Original Message----- > From: Marc Schneider [mailto:mschneider@xxxxxxxxx] > Sent: 13 September 2004 22:36 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Namespace problem > > Dave - > > Since WSDL files have QName in attributes, the namespace > prefix in the > attribute can be any in-scope namespace. This deviation from > the XPath data > model makes it very difficult to process WSDL files. > > Marc > > At 04:27 PM 9/13/2004, you wrote: > > > Hello - > > > > > > I may have spoken too soon when I said that using > current() did the > >trick. > > > This apparently works in XalanJ, but XalanC v1.7 appears to have a > >problem > > > with namespace::* and doesn't evaluate > namespace::*[starts-with(name(), > > > substring-before(current()/parent::node()/@name,':'))] correctly. > > > > > > Unfortunately, I need to support XalanC v1.7, does anyone > know of a way > >to > > > resolve a namespace URI from the prefix in XalanC 1.7? > > > >This is a case where Xalan-C deviates from the XPath data > model, and does > >not have a namespace node for every in-scope namespace on > every element. > >The following stylesheet produces the desired result: > > > ><?xml version="1.0"?> > ><xsl:stylesheet > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" > > version="1.0"> > > > ><xsl:output encoding="utf-8" /> > > > ><xsl:template match="wsdl:operation"> > > <xsl:element name="operation"> > > <xsl:choose> > > <xsl:when test="contains(parent::node()/@name,':')"> > > <xsl:variable name="ns" > >select="substring-before(parent::node()/@name, ':')" /> > > <xsl:attribute name="portType_nspc"> > > <xsl:choose> > > <xsl:when test="contains(parent::node()/@name,':')"> > > <xsl:value-of select="namespace::*[name() = $ns]"/> > > </xsl:when> > > <xsl:otherwise> > > <xsl:value-of > >select="ancestor::*[last()]/@targetNamespace"/> > > </xsl:otherwise> > > </xsl:choose> > > </xsl:attribute> > > </xsl:when> > > <xsl:otherwise> > > <xsl:attribute name="portType_nspc"/> > > </xsl:otherwise> > > </xsl:choose> > > </xsl:element> > ></xsl:template> > > > ></xsl:stylesheet> > > > >I've been tempted numerous times to fix this deviation, but the cases > >where this has caused a problem have been extremely rare, > and the cost in > >memory overhead is considerable in many cases. > > > >Dave
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Namespace problem, Marc Schneider | Thread | RE: [xsl] Namespace problem, Marc Schneider |
Re: [xsl] Namespace problem, Marc Schneider | Date | RE: [xsl] Namespace problem, Marc Schneider |
Month |