RE: [xsl] Matching elements based on element type:

Subject: RE: [xsl] Matching elements based on element type:
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 17 Jul 2006 17:07:06 +0100
You write

<xsl:template match="element(*, my_type)">

and use a schema-aware XSLT 2.0 processor.

Michael Kay
http://www.saxonica.com/

 

> -----Original Message-----
> From: David B [mailto:daavidb@xxxxxxxxx] 
> Sent: 17 July 2006 16:57
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Matching elements based on element type:
> 
> Hello,
> 
> I have an xml file that looks like this:
> 
> <top>
>     <a>123</a>
>     <b>456</b>
>     <c>789</c>
> </top>
> 
> 
> And has a schema as follows:
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>     <xs:element name="top">
>         <xs:complexType>
>             <xs:sequence>
>                 <xs:element name="a" type="my_type"/>
>                 <xs:element name="b" type="my_type"/>
>                 <xs:element name="c" type="my_type"/>
>             </xs:sequence>
>         </xs:complexType>
>     </xs:element>
>     <xs:simpleType name="my_type">
>         <xs:restriction base="xs:string"/>
>     </xs:simpleType>
> </xs:schema>
> 
> That is, the elements a,b,c all have the type my_type but 
> have different element names.
> 
> I want an xslt stylesheet that has a single template for all 
> elements of type my_type. Something like:
> <xsl:template match="top">
>     <xsl:apply-templates/>
> </xsl:template>
> 
> <xsl:template match="*[type()=my_type]">
>      <xsl:value-of select="."/>
> </xsl:template>
> 
> Only there is no type() function in XPath....
> 
> Is there any other way I could do this?
> 
> Best Regards,
> David Belius

Current Thread