[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] How to change namespace prefixes in a import file hierarchy? Or at least append som pattern?
Subject: RE: [xsl] How to change namespace prefixes in a import file hierarchy? Or at least append som pattern? From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Mon, 21 Dec 2009 12:50:31 -0000 |
You need to do two things: (a) change the namespace nodes to use a different prefix, and (b) change the QName-valued attributes to use a different prefix. For (a): <xsl:template match="*"> <xsl:element name="{local-name()}" namespace="{namespace-uri()}"> <xsl:for-each select="namespace::*"> <xsl:namespace name="{if (local-name() = 'oldprefix') then 'newprefix' else local-name()}" select="string(.)"/> </ </ <xsl:apply-templates select="@*, node()"/> </ </ For (b) <xsl:template match="attribute(*, xs:QName)"> <xsl:attribute name="{name()}" select="concat(if (get-prefix-from-QName(.) = 'oldprefix' then 'newprefix' else get-prefix-from-QName(.), ':', get-local-name-from-QName(.))"/> That's assuming a schema-aware transformation (using the schema-for-schemas) so you can detect the QName-valued attributes by type. The alternative is to match them all explicitly by name. Not tested (and probably has bugs) but I hope it suggests a way forward. Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > -----Original Message----- > From: Ben Stover [mailto:bxstover@xxxxxxxxxxx] > Sent: 21 December 2009 12:36 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] How to change namespace prefixes in a import > file hierarchy? Or at least append som pattern? > > How to append a pattern to a namespace prefix? How to change > a namespace prefix in a import file hierarchy? > > Assume there is a directory (tree) of XSD schema files which > start with ONE single "root" XSD schema file "root.xsd" and > which in turn imports other, related XSD schema files. > > Regarding the used, embedded namespaces and their prefix it > looks like similar to: > > root.xsd: > > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:mypref1="http://www.somedomain.com/foo/bar/" > ... > xmlns:other22="http://www.somedomain.com/blah/" > ....> > > <xsd:import namespace="http://www.somedomain.com/foo/bar/" > schemaLocation="myfoobar/subschema1.xsd"/> > .... > <xsd:import namespace="http://www.somedomain.com/blah/" > schemaLocation="myblah/subschema22.xsd"/> > > <xsd:element name="..." type="mypref1:myelement111Type"/> > <xsd:element name="..." type="other22:myelement222Type"/> > ... > > > Keep in mind that this is a simplified sample. In real life I > could have a system of dozends of imports, hundreds of > namespace prefixes and thousands of elements. > > Now I want to change all prefixes "mypref1" to "newpre7". I > could this manually but due to the amount of occurencies and > the necessary changes this is not feasible. > Furthermore I dont want to use an text editor replace > function because this could be ambigious and not much simpler. > > I would like to use a XLST script which would do the job for > me (after changing just a "from" and a "to" pattern inside > this XSLT script. > > Is this possible somehow? > > All the prefix occurencies should be changed in the prefix > definition and the usage places (e.g. <xsd:element>) in all > files of the import hierarchy. > > How can I do this? > > If a pure change is not possible: Can I at least append some > postfix to a prefix (e.g. add > > from: mypref1 > to: mypref1new > > Thank you > Ben
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] How to change namespace prefi, Ben Stover | Thread | Re: [xsl] How to change namespace p, David Carlisle |
[xsl] How to change namespace prefi, Ben Stover | Date | Re: [xsl] How to change namespace p, David Carlisle |
Month |