<p>我设法从发布的XML文件中提取出数据。但我觉得这比我提供的答案更简单。为了得到每一个数据要做很多循环。在</p>
<pre><code>import sys
import socket
import os
from xml.dom.minidom import Document, parse, parseString
class mapDataClass:
def __init__(self):
self.XMLdoc = Document()
self.MakeRootNode()
def MakeRootNode(self):
self.RootNode = self.XMLdoc.createElement('Map')
self.XMLdoc.appendChild(self.RootNode)
def GetXML_Doc(self):
return self.XMLdoc
def LoadXMLFile(self, AbsFileName):
try:
self.XMLdoc.unlink()
self.XMLdoc = parse(AbsFileName)
if (self.XMLdoc.hasChildNodes()): #if not empty
#Determine if root node <CalibrationData> exist
if (cmp(self.XMLdoc.firstChild.nodeName,
'Map') == 0):
self.RootNode = self.XMLdoc.firstChild
return True
except IOError:
print 'File ' + AbsFileName + ' not found'
return False
def GetMapData(self):
result = ""
haha = self.XMLdoc.firstChild #root node
for child in haha.childNodes:
if cmp(child.nodeName, 'LandmarkPointListXml')==0:
result1 = self.loopLandmark(child)
elif cmp(child.nodeName, 'RegionPointListXml')==0:
print 'Empty'
elif cmp(child.nodeName, 'URL')==0:
result = result + child.firstChild.nodeValue
else:
result = result + child.firstChild.nodeValue + ','
result = result + "|" + result1 + "EMPTY"
return result
def loopLandmark(self,landmarks):
result2=""
tempResult=""
haha=landmarks.getElementsByTagName('anyType')
for i in range(0, len(haha)):
result2=self.loopAnyType(haha[i])
if ((i+1)!=len(haha)):
tempResult = tempResult + result2 + ';'
else:
tempResult = tempResult + result2 + '|'
return tempResult
def loopAnyType(self,anyType):
result3=""
haha1=anyType.getElementsByTagName('LandmarkPointX')[0]
haha2=anyType.getElementsByTagName('LandmarkPointY')[0]
haha3=anyType.getElementsByTagName('LandmarkDesc')[0]
result3 = haha1.firstChild.nodeValue + "," + haha2.firstChild.nodeValue + "," + haha3.firstChild.nodeValue
return result3
profile = mapDataClass()
boolean = profile.LoadXMLFile('upload\er.m')
print boolean
result = profile.GetMapData()
print result
</code></pre>