[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: QName as attribute value: save and clean up namesp
At 2012-06-18 13:39 +0200, Heiko Niemann wrote:
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. The only "improvement" I can think of is to simply copy the namespace node rather than reconstitute it. <!--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> But, really, I don't see why you would need to change what you have. . . . . . . . . . . Ken ~/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> </c:order>~/t/ftemp $ xslt2 heiko.xml heiko.xsl <?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 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 $
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|