0
我想用使用SAX的Python解析XML文件。使用帶有sax的Python解析具有多個元素的XML
該文檔具有多個具有相同名稱的元素。我想打印元素的一些屬性,但是程序只是打印文檔中遇到的最後一個元素的屬性。
這是代碼:
# art.py
import sys
from xml.sax import make_parser
from handlers import ArticleHandler
ch = ArticleHandler()
saxparser = make_parser()
saxparser.setContentHandler(ch)
saxparser.parse(sys.stdin)
print "TYPE:", ch.TYPE
print "SUBTYPE:" , ch.SUBTYPE
# handlers.py
from xml.sax.handler import ContentHandler
class ArticleHandler(ContentHandler):
TYPE = ""
SUBTYPE = ""
def startElement(self, name, attrs):
if name == "relation":
self.TYPE = attrs.get("TYPE", "")
self.SUBTYPE = attrs.get("SUBTYPE")
這是XML:
<relation ID="CNN_CF_20030303.1900.00-R3" TYPE="ORG-AFF" SUBTYPE="Employment">
...
</relation>
<relation ID="CNN_CF_20030303.1900.00-R4" TYPE="ORG-AFF" SUBTYPE="Membership">
...
</relation>
對於該輸入輸出是
TYPE:ORG-AFF
SUBTYPE:Membership
而期望輸出是
TYPE:ORG-AFF
SUBTYPE:Employment
TYPE:ORG-AFF
SUBTYPE:Membership
我該如何解決這個錯誤?
我不是在蟒蛇很不錯,但它似乎對他們的屬性分配給ArticleHandler對象的字段的XML文件,每個標籤的程序調用ArticleHandler.startElement。所以,如果你有很多標籤,它會重新分配字段。在解析結束時,您只需打印最後一個標記的屬性即可解析。 – Nolan
你爲什麼要使用SAX?即使你有內存限制阻止任何DOM方法,也有更好的API。例如,請參閱lxml中的'iterparse'函數。 –