xsl-list
[Top] [All Lists]

[xsl] Changing namespaces

2011-08-15 16:09:43
Hi folks,

I am trying to achieve some XSLT transformation and having hard time
in getting the exact output. Any help will nbe highly appreciated.

My input xml has elements from 2 namespaces. One is my default
namespace and another with namespace prefix as 'OC:'. Target is to
strip out all the elements and attributes with this prefix 'OC:'
except the selected once. I try to achieve this by using identity
template modified for my requirements in following steps:
1. Use copy template and specify not to copy any elements/attribute
from the namespace corresponding to prefix 'OC:'
2. In a separate templates copy selectively the elements and
attributes I want to retain in the output.

After struggling a lot for the issue of namespances uri getting
displayed in the individual elements I copy selectively in last step,
I finally got it correct. Now the only difficulty I am having is
getting the root element with right namespace URIs in it. I wish to
have default namespace changed to some thing else, say
"new-default-namespace" and namepsace corresponding to prefix 'OC:'
changed to some thing else, say "new-oc-namespace-uri". I went through
lot on similar postings online but could not get the perfect solution.

My xsl stylesheet is as follows:

<xsl:stylesheet version="2.0"
        xmlns:odm="old-default-namespace"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance";
xmlns:def="http://www.cdisc.org/ns/def/v1.0";
        xmlns:xlink="http://www.w3c.org/1999/xlink"; 
xmlns:OC="old-oc-namespace-uri"
        xmlns:fn="http://www.w3.org/2005/02/xpath-functions";
        exclude-result-prefixes="xlink" xmlns:exsl="http://exslt.org/common";>

        <!-- standard copy template -->
        <xsl:template name="copyTemplate" match="node()|@*">
                <xsl:copy>
                        <xsl:apply-templates select="@*|node()" />
                </xsl:copy>
        </xsl:template>


<xsl:template name="removeOCExtnElmnt" priority="3" match="//*[
namespace-uri()='old-oc-namespace-uri' ]" ></xsl:template>

<xsl:template name="removeOCExtnAttrib" priority="2" match="//@*[
namespace-uri()='old-oc-namespace-uri' ]" ></xsl:template>

<xsl:template priority="4" match="@ODMVersion">
        <xsl:attribute name="ODMVersion">1.2</xsl:attribute>
</xsl:template>
                
<xsl:template priority="5" match="OC:MultiSelectList |
OC:MultiSelectListRef | OC:MultiSelectListItem">
        <xsl:element name="{name()}" namespace="{namespace-uri()}" >            
                <xsl:copy-of select="@*"/>
                        <xsl:apply-templates/>
                </xsl:element>
</xsl:template>
        
<xsl:template priority="6" match="//*[@OC:StudySubjectID |
@OC:UniqueIdentifier | @OC:Status
        | @OC:DateOfBirth | @OC:Sex | @OC:StudyEventLocation | @OC:StartDate
        | @OC:SubjectAgeAtEvent | @OC:Version | @OC:InterviewerName
        | @OC:InterviewDate | @OC:Status]">
        <xsl:element name="{name()}" namespace="{namespace-uri()}">
                <xsl:copy-of select="@*" copy-namespaces="no"/>
                        <xsl:apply-templates/>
                </xsl:element>
</xsl:template>

</xsl:stylesheet>

Root element in my present output and input xml is:
<ODM xmlns="old-default-namespace" xmlns:OC="old-oc-namespace-uri"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
FileOID="oc_extn_testD20110809115446-0400" Description="oc_extn_test"
CreationDateTime="2011-08-09T11:54:46-04:00" FileType="Snapshot"
ODMVersion="1.2"
xsi:schemaLocation="http://www.cdisc.org/ns/odm/v1.3OC-ODM1-3-0-OC2-0.xsd";>

I expect it to be changed to:

<ODM xmlns="new-default-namespace" xmlns:OC="new-oc-namespace-uri"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
FileOID="oc_extn_testD20110809115446-0400" Description="oc_extn_test"
CreationDateTime="2011-08-09T11:54:46-04:00" FileType="Snapshot"
ODMVersion="1.2"
xsi:schemaLocation="http://www.cdisc.org/ns/odm/v1.3OC-ODM1-3-0-OC2-0.xsd";>


Thanks in advance.

- Pradnya

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>