I'm parsing an xml file using the xml.dom.minidom module. Standalone in Python from a shell, and I get what I expect on output. When I put the script on a shelf in Houdini, I get the following failure popping up.
==========================================
File “Read_XML_Roads”, line 99, in <module>
File “Read_XML_Roads”, line 16, in handleGameData
File “Read_XML_Roads”, line 22, in handleRoadNetwork
File “Read_XML_Roads”, line 27, in handleElements
File “Read_XML_Roads”, line 63, in handleElement
File “C
PROGRA~1/SIDEEF~1/HOUDIN~1.303/houdini/scripts/python\hou.py”, line 16269, in writereturn _hou.ShellIO_write(*args)
TypeError: in method ‘ShellIO_write’, argument 2 of type ‘std::string const &’
==========================================
something is being changed within Houdini - the type of the data? Does this ring a bell?
Here's the code:
==========================================
import xml.dom.minidom
#dom = xml.dom.minidom.parseString(“./Python/DemoSlideShow.xml”)
#dom = xml.dom.minidom.parse(“/home/caleb/Work/Traffic/Python/L10R_NFS10_World_RoadNet.xml”)
dom = xml.dom.minidom.parse(“C
Documents and Settings/choward/My Documents/Work/Traffic/Python/test.xml”)def getText(nodelist):
print “getText(%s)” % nodelist
rc = “”
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
print rc
return rc
def handleGameData(gamedata):
print “<GameData>”
handleRoadNetwork(gamedata)
print “</GameData>”
def handleRoadNetwork(gamedata):
print “ <RoadNetwork>”
elements = gamedata.getElementsByTagName(“Element”)
handleElements(elements)
print “ </RoadNetwork>”
def handleElements(elements):
for element in elements:
handleElement(element)
def handleElement(element):
#elementName = “foo”
elementName = element.getAttribute('name')
#print elementName
roadname = element.getElementsByTagName(“RoadName”)
type = element.getElementsByTagName(“Type”)
if type:
typeText = getText(type.childNodes)
else:
typeText = “”
startx = element.getElementsByTagName(“StartX”)
starty = element.getElementsByTagName(“StartY”)
startz = element.getElementsByTagName(“StartZ”)
startcontrolx = element.getElementsByTagName(“StartControlX”)
startcontroly = element.getElementsByTagName(“StartControlY”)
startcontrolz = element.getElementsByTagName(“StartControlZ”)
StartProfile = element.getElementsByTagName(“StartProfile”)
if not StartProfile:
startprofile = “none”
else:
startprofile = StartProfile
endx = element.getElementsByTagName(“EndX”)
endy = element.getElementsByTagName(“EndY”)
endz = element.getElementsByTagName(“EndZ”)
endcontrolx = element.getElementsByTagName(“EndControlX”)
endcontroly = element.getElementsByTagName(“EndControlY”)
endcontrolz = element.getElementsByTagName(“EndControlZ”)
EndProfile = element.getElementsByTagName(“EndProfile”)
if not EndProfile:
endprofile = “none”
else:
endprofile = EndProfile
print “ <Element name=\”%s\“>” % elementName
print “ <RoadName>%s</RoadName>” % getText(roadname.childNodes)
print “ <Type>%s</Type>” % typeText
print “ <StartX>%s</StartX>” % getText(startx.childNodes)
print “ <StartY>%s</StartY>” % getText(starty.childNodes)
print “ <StartZ>%s</StartZ>” % getText(startz.childNodes)
print “ <StartControlX>%s</StartControlX>” % getText(startcontrolx.childNodes)
print “ <StartControlY>%s</StartControlY>” % getText(startcontroly.childNodes)
print “ <StartControlZ>%s</StartControlZ>” % getText(startcontrolz.childNodes)
# handleStartProfile(startprofile)
print “********* %s” % startprofile
print “ <EndX>%s</EndX>” % getText(endx.childNodes)
print “ <EndY>%s</EndY>” % getText(endy.childNodes)
print “ <EndZ>%s</EndZ>” % getText(endz.childNodes)
print “ <EndControlX>%s</EndControlX>” % getText(endcontrolx.childNodes)
print “ <EndControlY>%s</EndControlY>” % getText(endcontroly.childNodes)
print “ <EndControlZ>%s</EndControlZ>” % getText(endcontrolz.childNodes)
# handleEndProfile(endprofile)
print “********* %s” % endprofile
print “ <Element>”
def handleStartProfile(startprofile):
print “ <StartProfile>”
handleLanes(startprofile.getElementsByTagName(“Type”))
print “ </StartProfile>”
def handleEndProfile(endprofile):
print “ <EndProfile>”
handleLanes(endprofile.getElementsByTagName(“Type”))
print “ </EndProfile>”
def handleLanes(lanes):
for lane in lanes:
handleLane(lane)
def handleLane(lane):
print “ <LType>%s</Type>” % getText(lane.childNodes)
handleGameData(dom)
======================================
(I notice the post has screwed my formatting. Sorry)
Help help!
Thanks!
-caleb


