我正在使用 SAX 決議器 ( xml.sax),它可以按照我的意愿作業。但是,我正在決議一個相當大的檔案(這就是我使用 SAX 的原因)并且我想在某個時候停止決議(例如,當我達到某個限制時,或者當我找到某個資料時)。
class ProductHandler(xml.sax.ContentHandler):
def startElement(self, tag, attrs):
[.. process start ..]
def endElement(self, tag):
[.. process end ..]
def characters(self, content):
[.. process characters ..]
product_handler = ProductHandler()
parser = xml.sax.make_parser()
parser.setContentHandler(product_handler)
parser.parse(xmlfile)
我怎么做?我可以在其中一種處理程式方法中回傳某個回傳值嗎?我檢查了檔案,但在這個方向上找不到任何東西。
uj5u.com熱心網友回復:
我想我會充實一下這個評論。
使用這個示例 data,如果我們想找到一個<description>包含單詞“sourdough”的,也許我們會這樣寫:
import xml.sax
class IAmAllDone(Exception):
pass
class ProductHandler(xml.sax.handler.ContentHandler):
def __init__(self):
super().__init__()
self.description = None
self.name = None
self.tree = []
def startElement(self, name, attrs):
self.tree.append(name)
def endElement(self, name):
self.tree.pop(0)
def characters(self, content):
if self.tree[-1] == "name" and content.strip():
self.name == content
print("name:", content)
elif self.tree[-1] == "description" and "sourdough" in content:
self.description = content
raise IAmAllDone()
product_handler = ProductHandler()
parser = xml.sax.make_parser()
parser.setContentHandler(product_handler)
try:
parser.parse("data.xml")
except IAmAllDone:
pass
if product_handler.description is not None:
print("found description:", product_handler.description)
以上將輸出:
name: Belgian Waffles
name: Strawberry Belgian Waffles
name: Berry-Berry Belgian Waffles
name: French Toast
found description: Thick slices made from our homemade sourdough bread
如您所見,我們在閱讀最后的“家庭式早餐”專案之前停止了 SAX 決議。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504895.html
上一篇:Git不在wsl上作業,但它在沒有pat令牌的情況下在powershell上作業
下一篇:按多個首字母對國家/地區進行排序
