我需要定期從我們的管理軟件導出XML文件。用Python解析XML xml.sax:如何「跟蹤」樹中的哪個位置?
這是我第一次在Python中使用XML解析。與xml.sax
的XML不是非常困難,但是「跟蹤」您在XML樹中的哪個位置的最佳方法是什麼?
例如,我有我們的客戶名單。我想提取的電話,但有多個地方出現:
eExact -> Accounts -> Account -> Contacts -> Contact -> Addresses -> Address -> Phone
eExact -> Accounts -> Account -> Contacts -> Contact -> Phone
eExact -> Accounts -> Account -> Phone
所以我需要保持跟蹤我才能在XML樹到底在哪得到權電話號碼
據我可以從Python網站上的xml.sax文檔中找到,沒有設置「easy」方法或變量。
所以,這就是我所做的:
import xml.sax
class Exact(xml.sax.handler.ContentHandler):
def __init__(self):
self.curpath = []
def startElement(self, name, attrs):
self.curpath.append(name)
if name == 'Phone':
print self.curpath, name
def endElement(self, name):
self.curpath.pop()
if __name__ == '__main__':
parser = xml.sax.make_parser()
handler = Exact()
parser.setContentHandler(handler)
parser.parse(open('/home/cronuser/xml/mount/daily/debtors.xml'))
這不是很困難的,但因爲我沒有很多與XML的經驗,我不知道這個「普遍接受」或「最好的可能「的方式?
謝謝:)
XML文件超過100MB,每年增長約100MB,所以這不是一個選項。 – Carpetsmoker 2011-03-24 14:07:03
在這種情況下,我的下一個建議將是ElementTree的iterparse,但dw0rm擊敗了我...雖然我可憐你必須做你正在做的事情。這聽起來像是一個應該使用XML以外的工作完成的工作。 (可能是一個數據庫) – ssokolow 2011-03-25 00:56:28
是的,不要讓我開始* *這不幸的是......這是唯一可用的解決方案... – Carpetsmoker 2011-03-25 01:15:40