[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Processing types of type QName


Subject: RE: [xsl] Processing types of type QName
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Tue, 19 Aug 2003 16:35:12 +0100

This is of course much simpler when you have schema support in XSLT 2.0,
you can then manipulate the value as an instance of type xs:QName. There
are still some pitfalls, however, in making sure that the namespace
prefix is always properly declared.

In 1.0 there are no functions for parsing the lexical QName value, but
it's easy enough to extract the prefix using substring-before. You can
translate it to a namespace URI using the namespace axis:

<xsl:if test="contains(., ':')">
  <xsl:value-of select="namespace::*[name()=substring-before(current(),
'.')]"/>
</xsl:if>

Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Dan Vint
> Sent: 19 August 2003 15:11
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Processing types of type QName
> 
> 
> 
> 
> We are considering the use of QName types for our enumerated 
> values (code 
> lists). We want to be able to determine the standard values 
> from those 
> added by members, so we want member values to be prefixed.
> 
> In theory this seems to work nice, but in XSLT it doesn't 
> seem to allow for 
> the normal processing that I would expect. I would really 
> expect to be able 
> to use name(), local-name(), etc against the text() node 
> value but that 
> doesn't seem to work. Is this something that I have to wait 
> for v2 of XSLT?
> 
> Our code values are in the element content, so an element is of an 
> enumerated type. If I use a template that matches this 
> element, a simple 
> <xsl:value-of select='.'/> gets me the code value acord:A, 
> <xsl:value-of 
> select="name(.)"/> gets me the element name of the template match 
> statement. <xsl:value-of select="name(text())"/> gets a value 
> of #text in 
> Stylus studio.
> 
> I can use the starts-with() function to detect a standard prefix, and 
> contains() to detect a prefix of  given value or at least the 
> use of the 
> ':', but I would really like a more flexible approach and I 
> need to be able 
> to translate the prefix back into the namespace URI as well.
> 
> Any ideas?
> 
> ..dan
>       
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords