Tôi hiện đang mã sau đây dựa trên Chương 12.5 của Python Cookbook:Cách nhanh nhất để phân tích cú pháp tài liệu XML lớn bằng Python là gì?
from xml.parsers import expat
class Element(object):
def __init__(self, name, attributes):
self.name = name
self.attributes = attributes
self.cdata = ''
self.children = []
def addChild(self, element):
self.children.append(element)
def getAttribute(self,key):
return self.attributes.get(key)
def getData(self):
return self.cdata
def getElements(self, name=''):
if name:
return [c for c in self.children if c.name == name]
else:
return list(self.children)
class Xml2Obj(object):
def __init__(self):
self.root = None
self.nodeStack = []
def StartElement(self, name, attributes):
element = Element(name.encode(), attributes)
if self.nodeStack:
parent = self.nodeStack[-1]
parent.addChild(element)
else:
self.root = element
self.nodeStack.append(element)
def EndElement(self, name):
self.nodeStack.pop()
def CharacterData(self,data):
if data.strip():
data = data.encode()
element = self.nodeStack[-1]
element.cdata += data
def Parse(self, filename):
Parser = expat.ParserCreate()
Parser.StartElementHandler = self.StartElement
Parser.EndElementHandler = self.EndElement
Parser.CharacterDataHandler = self.CharacterData
ParserStatus = Parser.Parse(open(filename).read(),1)
return self.root
tôi đang làm việc với tài liệu XML khoảng 1 GB. Có ai biết cách phân tích cú pháp này nhanh hơn không?
Câu hỏi của bạn quá mơ hồ để thu thập bất kỳ câu trả lời hữu ích nào. Cân nhắc trả lời các câu hỏi sau: - Bạn đang cố gắng làm gì với tài liệu XML 1 GB này? - Bạn cần trình phân tích cú pháp này nhanh đến mức nào? - Bạn có thể lười biếng lặp lại thông qua tài liệu, thay vì tải mọi thứ vào bộ nhớ từ khi di chuyển? – Matt
Tôi cần tải tất cả vào bộ nhớ, lập chỉ mục dữ liệu và sau đó 'duyệt qua' và xử lý nó. –