<p>这个代码相当脆弱。它对XML输入做了很强的假设,如果以有效的方式修改XML(例如,如果不是紧随其后),则会失败。在</p>
<p>我建议在解析XML时使用标准库,比如elementtree(<a href="http://docs.python.org/library/xml.etree.elementtree.html" rel="nofollow">http://docs.python.org/library/xml.etree.elementtree.html</a>)或lxml(<a href="http://lxml.de" rel="nofollow">http://lxml.de</a>),它也可以验证XML输入。在</p>
<p>下面我编写的代码使用元素树并处理您的XML输入(我删除了父类的“self”参数)。它还允许(忽略)XML元素中的空值。在</p>
<pre><code>import xml.etree.ElementTree as ET
def GetMapData( xmlfile ):
result = ""
try:
tree = ET.parse( xmlfile )
except IOError, e:
print "Failure Parsing %s: %s" % (xmlfile, e)
root = tree.getroot() # root node
for child in root:
if ( child.tag == 'LandmarkPointListXml' ):
result += '|' + loopLandmark(child) + '|'
elif child.text is not None:
result += child.text + ','
return result
def loopLandmark( landmarks ):
result=""
for landmark in landmarks:
if ( landmark.tag == 'anyType' ): # check also xsi:type="LandmarkPointProperty"?
for child in landmark:
if ( child.text and child.tag in [ 'LandmarkPointX', 'LandmarkPointY' ] ):
result += child.text + ','
return result
GetMapData( 'xml.in' )
</code></pre>