Changeset 1904


Ignore:
Timestamp:
21/12/06 10:07:30 (13 years ago)
Author:
domlowe
Message:

Namespaces are now handled properly (I think!). Also added new file addnewElemTest.py to show how to add new elements to a pre-existing MOLES document

Location:
TI02-CSML/trunk/csml2MolesStuff
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/csml2MolesStuff/molesReadWrite.py

    r1891 r1904  
    8181            self.ns=namespace 
    8282        else: 
    83             self.ns = 'http://ndg.nerc.ac.uk/moles' 
     83            self.ns = '{http://ndg.nerc.ac.uk/moles}' 
    8484        self.__dict__.update(kwargs) 
    8585     
     
    9191            att.append(newChild) 
    9292            setattr(self, attname,att) 
    93      
    94     modef addChildElem(self, childname, childobj): 
     93             
     94    def _stripNS(self, tagtostrip): 
     95        try: 
     96            elemname=tagtostrip.split('}')[1] 
     97            ns=tagtostrip.split('}')[0]+'}' 
     98        except IndexError: 
     99            elemname=tagtostrip 
     100            ns='{https://ndg.nerc.ac.uk/moles}' 
     101        return elemname, ns 
     102             
     103        ns=tagtostrip.split('}')[1] 
     104       
     105     
     106    def addChildElem(self, childname, childobj): 
    95107        #sometimes you want to add a child element but don't know if there is one already. In which case you want to create a list of child objects. 
    96108        if hasattr(self, childname): 
     
    111123            self.schema=None 
    112124        orderedAttribs=schema.lookupOrder(self.__dict__,molesFrag.tag) 
     125        print self.__dict__ 
    113126        for item in orderedAttribs: 
    114             if hasattr(self, item): 
     127           if hasattr(self, item): 
    115128                if isinstance(self.__dict__[item], molesElement): 
    116129                    frag=ET.Element(item) 
     
    134147    def fromXML(self,molesFrag): 
    135148        children = molesFrag.getchildren() 
     149         
    136150        if children ==[]: 
    137             setattr(self,molesElement.tag, molesElement.text) 
     151            elementWithoutNS, ns=self._stripNS(molesElement.tag) 
     152            setattr(self,elementWithoutNS, molesElement.text) 
    138153        if children!=[]: 
    139154            for child in children: 
    140155                if child.getchildren()!=[]: 
    141                     newClass=type(child.tag, (molesElement,),{}) 
    142                     newChild=newClass(self.ns) 
     156                    childWithoutNS, ns=self._stripNS(child.tag) 
     157                    newClass=type(childWithoutNS, (molesElement,),{}) 
     158                    newChild=newClass(ns) 
    143159                    newChild.fromXML(child) 
    144160                    kw=child.tag 
    145                     if hasattr(self, child.tag): 
    146                         self.__combineattributes(child.tag, newChild) 
     161                    if hasattr(self, childWithoutNS): 
     162                        self.__combineattributes(childWithoutNS, newChild) 
    147163                    else: 
    148                         setattr(self,child.tag, newChild) 
     164                        setattr(self,childWithoutNS, newChild) 
    149165                else: 
    150                     setattr(self,child.tag, child.text) 
     166                    childWithoutNS, ns=self._stripNS(child.tag) 
     167                    setattr(self,childWithoutNS, child.text) 
    151168         
    152169                     
     
    158175        self.schema = xmlSchema('ndgmetadata1.3.xsd') 
    159176        molesFrag=ET.Element('dgMetadata') 
     177        molesFrag.attrib['xmlns']='http://ndg.nerc.ac.uk/moles' 
    160178        molesElement.toXML(self,molesFrag,schema=self.schema) 
    161179        return molesFrag 
Note: See TracChangeset for help on using the changeset viewer.