[XML-SIG] [Simon.Dean@Sun.COM: Replacing Element Nodes]
Simon Dean
simon.dean at sun.com
Tue Sep 9 20:35:59 EDT 2003
I have solved the problems I was having.
I learnt:
1. parent below, should really have been named child for clarity/logic sake :)
2. parent.parentNode is actually the root node!
3. importNode returns an object which is a different instance, not a copy. (thankyou 'print')
4. Also, no need to clone and then import a node, just do an importNode.
regards,
Simon.
> Hi,
>
> I'm trying to replace Element Node's in a DOM called 'dom' with Element Node's from
> several DOM's assigned 'domFromRef'. 'domFromRef' get's generated dynamically from list
> contents in 'refs'.
>
> print replacementElementNode
> PrettyPrint(replacementElementNode)
>
> prints the Element Nodes which I want to replace in 'dom' e.g.
>
> <Element Node at 853a04c: Name='LC_COLLATION' with 0 attributes and 5 childern>
>
> <LC_COLLATION>
> <Collator>
> <CollationOptions>
> <...etc>
> <CollationOptions>
> </LC_COLLATION>
>
>
> What should I call now in 'def replaceNode' to do the replacement, Element Nodes in the domFromRef with the
> Element Nodes from dom, replaceChild() ? If so, I can't seem to get it to work.
>
> My program is below, any help much appreciated.
>
> cheers,
> Simon.
>
>
> from xml.dom.ext.reader import PyExpat
> from xml.dom.ext import PrettyPrint
> from xml.xpath import Evaluate
> import sys
>
> sys.getdefaultencoding()
> reader = PyExpat.Reader()
> dom = reader.fromStream(sys.stdin)
>
> def reconstructDom(dom):
>
> refs = Evaluate('/Locale//*[@ref]', dom.documentElement)
> for i in range(len(refs)):
> elementName = refs[i].nodeName
>
> for parent in dom.getElementsByTagName(elementName):
> if parent.nodeName == 'LC_FORMAT':
> attFileValue = parent.getAttribute('ref')
> attCurrValue = parent.getAttribute('replaceTo')
> getFormatElementBlockFromFile(elementName, attFileValue, attCurrValue)
> else:
> attFileValue = parent.getAttribute('ref')
> domFromRef = reader.fromUri('/home/sd/data_3/' +attFileValue +'.xml')
> clone, elementName, domFromRef = getParentElementBlockFromFile(elementName, attFileValue, domFromRef
> )
> newDom = replaceNode(clone, elementName, domFromRef)
>
>
>
> def getParentElementBlockFromFile(elementName, attFileValue, domFromRef):
>
> for parent in domFromRef.getElementsByTagName(elementName):
> clone = parent.cloneNode(1)
> return clone, elementName, domFromRef
>
>
> def getFormatElementBlockFromFile(elementName, attFileValue, attCurrValue):
> pass
>
>
> def replaceNode(clone, elementName, domFromRef):
>
> # replace Element Node from domFromRef with Element Node from dom and return dom to higher object
> replacementElementNode = dom.importNode(clone, 1)
>
> print replacementElementNode
> PrettyPrint(replacementElementNode)
>
> #return newDom
>
>
> # main()
> reconstructDom(dom)
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
> ----- End forwarded message -----
>
> --
> -------------------------------------------------------------------
> simon.dean at Sun.com
> Globalization Engineering
> http://www.sun.com
> These opinions are my own unless otherwise stated.
> -------------------------------------------------------------------
>
>
>
>
>
> _______________________________________________
> XML-SIG maillist - XML-SIG at python.org
> http://mail.python.org/mailman/listinfo/xml-sig
--
-------------------------------------------------------------------
simon.dean at Sun.com
Globalization Engineering
http://www.sun.com
These opinions are my own unless otherwise stated.
-------------------------------------------------------------------
More information about the XML-SIG
mailing list