I am writing a application to calculate pressure drop for a piping network. Namely a building sprinkler system. This will be a command line program at first with the system described in xml (at least that is how I think I want to do it).
An important part of this calculation is finding the 'hydraulically most remote' sprinkler. This is something that I could specify with an attribute for now and later think about how to automate it. I need to walk through the dom tree until I find a node of type "sprinkler" that has an attribute of hydraulically_most_remote with a value of True. After I find this I need to break the itterator/for loop and then start walking backwards keeping a running total of the pressure drop until I reach a node that has multiple pipesections and then walk to the end of each branch and calculate the pressure drop, and then add them to the branch that contained the hydraulically most remote sprinkler, and then move on, repeating this until I walk all the way back to the inflow node. I am having trouble finding a decent python/xml resource on the web. I have ordered Python & XML by Jones and Drake, but I am anxious to get something started. The only decent online resource that I can seem to find is http://pyxml.sourceforge.net/topics/howto/xml-howto.html which doesn't seem to be a very comprehensive how-to. Do demonstrate just about everything I know about xml and python I attached t.py and ex.xml. Another thing that is confusing is dir(walker) does not show walker having an attribute currentNode and dir(walker.currentNode) does not show walker.currentNode having an attribute tagName. Bill
<?xml version="1.0"?> <project name="test"> <inflow static="60" residual="20"> <pipesection diameter="1.05" length="10"> <node id="H1" k="5.6" type="sprinkler"> <pipesection diameter="1.05" length="4"> <node id="1" type="T"> <pipesection diameter="1.05" length="6"> <node id="H2" hydraulically_most_remote="True"> </node> </pipesection> <pipesection diameter="1.05" length="5"> <node id="H3"> </node> </pipesection> </node> </pipesection> </node> </pipesection> </inflow> </project>
from xml.dom.ext.reader import Sax2 from xml.dom.NodeFilter import NodeFilter reader = Sax2.Reader() doc = reader.fromUri('ex.xml') walker = doc.createTreeWalker(doc.documentElement,NodeFilter.SHOW_ELEMENT,None,0) while 1: print walker.currentNode.tagName next = walker.nextNode() if next is None: break
-- http://mail.python.org/mailman/listinfo/python-list