Subject: Re: [xsl] QName as attribute value: save and clean up namespace declarations From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Mon, 18 Jun 2012 07:50:28 -0400 |
in this example I have an order with different typed items. The type is a QName in an attribute. There are namespaces declared, having the same prefix as the 'prefix' in the xsi:type attribute. As you can see there are more namespaces declared as needed (whatever the reason for that case might be). Now I would like to clean up and just keep the ones that are 'used' in the xsi:type content. The stylesheet actually already does what I want, but I would like to know whether there might be a better way to do it, since it looks a little hackish to me.
<!--identity tranformation; do not copy namespaces; create namespace of xsi:type--> <xsl:template match="*[@xsi:type]"> <xsl:variable name="var.prefix" select="substring-before(@xsi:type,':')"/> <xsl:copy copy-namespaces="no"> <xsl:copy-of select="@*"/> <xsl:copy-of select= "namespace::*[name(.)=substring-before(current()/@xsi:type,':')]"/> <xsl:apply-templates/> </xsl:copy> </xsl:template>
~/t/ftemp $ cat heiko.xml <?xml version="1.0" encoding="UTF-8"?> <c:order xmlns:c="http://prods.com/c" xmlns:v="http://prods.com/v" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v:item xsi:type="ns1:basicItem" xmlns:ns1="http://prods.com/ns1" xmlns:ns2="http://prods.com/ns2" xmlns:ns3="http://prods.com/ns3"> <v:name>Basic</v:name> <v:number>A200338</v:number> <v:color>blue</v:color> </v:item>
<v:item xsi:type="ns2:advancedItem" xmlns:ns1="http://prods.com/ns1" xmlns:ns2="http://prods.com/ns2" xmlns:ns3="http://prods.com/ns3"> <v:name>Advanced</v:name> <v:number>A200339</v:number> <v:color>white</v:color> <v:pattern>stripes</v:pattern> </v:item>
<v:item xsi:type="ns4:lostItem" xmlns:ns1="http://prods.com/ns1" xmlns:ns2="http://prods.com/ns2" xmlns:ns3="http://prods.com/ns3"> <v:name>Lost</v:name> <v:number>A200340</v:number> </v:item>
<v:item xmlns:ns1="http://prods.com/ns1" xsi:type="ns1:basicItem"> <v:name>Basic</v:name> <v:number>A200338</v:number> <v:color>blue</v:color> </v:item>
<v:item xmlns:ns2="http://prods.com/ns2" xsi:type="ns2:advancedItem"> <v:name>Advanced</v:name> <v:number>A200339</v:number> <v:color>white</v:color> <v:pattern>stripes</v:pattern> </v:item>
<v:item xsi:type="ns4:lostItem"> <v:name>Lost</v:name> <v:number>A200340</v:number> </v:item>
</c:order>~/t/ftemp $ cat heiko.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> <xsl:output method="xml" encoding="UTF-8"/>
<!--identity transformation; copy namespaces--> <xsl:template match="*"> <xsl:copy copy-namespaces="yes"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template>
<!--identity tranformation; do not copy namespaces; create namespace of xsi:type--> <xsl:template match="*[@xsi:type]"> <xsl:variable name="var.prefix" select="substring-before(@xsi:type,':')"/> <xsl:copy copy-namespaces="no"> <xsl:copy-of select="@*"/> <xsl:copy-of select= "namespace::*[name(.)=substring-before(current()/@xsi:type,':')]"/> <xsl:apply-templates/> </xsl:copy> </xsl:template>
<!--identity transformation; do not copy namespaces--> <xsl:template match="*[@xsi:type]//*"> <xsl:copy copy-namespaces="no"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet>~/t/ftemp $
-- Public XSLT, XSL-FO, UBL and code list classes in Europe -- Oct 2012 Contact us for world-wide XML consulting and instructor-led training Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] QName as attribute value: sav, Heiko Niemann | Thread | Re: [xsl] QName as attribute value:, Martin Honnen |
[xsl] QName as attribute value: sav, Heiko Niemann | Date | Re: [xsl] QName as attribute value:, Martin Honnen |
Month |