我试图解析一个xml文件。 我的问题也是这样的:
parsing an xml file for unknown elements using python ElementTree
我试着解决乌托布。在
效果很好。但仅适用于具有单个标记的行
例如:
<some_root_name>
<tag_x>bubbles</tag_x>
</some_root_name>
这个很好用 但如果它是这样的:
^{pr2}$它失败了。。 我有很多这样的例子。 我不想超出本机库的使用范围,因为在此之后,我将在不同的计算机(prod env)上运行代码,并且必须在那里设置库。。事情变得一团糟。。在
有没有办法,我可以修改原来的解决方案来解决这个问题。 谢谢。在
上面的代码链接:
import xml.sax as sax
import xml.sax.handler as saxhandler
import pprint
class TagParser(saxhandler.ContentHandler):
# http://docs.python.org/library/xml.sax.handler.html#contenthandler-objects
def __init__(self):
self.tags = {}
def startElement(self, name, attrs):
self.tag = name
def endElement(self, name):
if self.tag:
self.tags[self.tag] = self.data
self.tag = None
self.data = None
def characters(self, content):
self.data = content
parser = TagParser()
src = '''\
<some_root_name>
<tag_x>bubbles</tag_x>
<tag_y>car</tag_y>
<tag...>42</tag...>
</some_root_name>'''
sax.parseString(src, parser)
pprint.pprint(parser.tags)
异常跟踪:
File "extract_xml.py", line 59, in unittest
sax.parseString(src, parser)
File "C:\Python27\lib\xml\sax\__init__.py", line 49, in parseString
parser.parse(inpsrc)
File "C:\Python27\lib\xml\sax\expatreader.py", line 107, in parse
xmlreader.IncrementalParser.parse(self, source)
File "C:\Python27\lib\xml\sax\xmlreader.py", line 125, in parse
self.close()
File "C:\Python27\lib\xml\sax\expatreader.py", line 217, in close
self.feed("", isFinal = 1)
File "C:\Python27\lib\xml\sax\expatreader.py", line 211, in feed
self._err_handler.fatalError(exc)
File "C:\Python27\lib\xml\sax\handler.py", line 38, in fatalError
raise exception
xml.sax._exceptions.SAXParseException: <unknown>:2:4: no element found
TagParser
使用endElement
向self.tags
添加数据。在其中
src
等于<review>
没有结束标记,</review>
,因此endElement
永远不会被调用。在如果将结束标记
</review>
添加到src
:然后程序就产生了
尽管你的问题是这样说的:
^{pr2}$parser.tags
结果是:您的另一个示例失败了,但这仅仅是因为它不是有效的XML:
在源代码中,
review
标记从未关闭,因此这不是一个有效的XML片段,因此当您尝试解析它时,它会引发异常。在如果您的问题是从有效文档中取出不完整的片段,请不要这样做;将整个
review
标记全部取出并解析,而不是试图从中解析出一行。在如果您的问题是源数据实际上不是有效的XML,那么您需要使用一个解析器来处理损坏的XML,比如BeautifulSoup;}都不能工作。在
ElementTree
和{相关问题 更多 >
编程相关推荐