我需要驗證 xml,但代碼來自變數 (str),而不是來自檔案。
所以我認為使用 xml.sax 很容易做到這一點。但我無法讓它為我作業。決議檔案時它作業正常,但決議字串時出現奇怪的錯誤。
這是我的測驗代碼:
from xml.sax import make_parser, parseString
import os
filename = os.path.join('.', 'data', 'data.xml')
xmlstr = "<note>\n<to>Mary</to>\n<from>Jane</from>\n<heading>Reminder</heading>\n<body>Go to the zoo</body>\n</note>"
def parsefile(file):
parser = make_parser()
parser.parse(file)
def parsestr(xmlstr):
parser = make_parser()
parseString(xmlstr.encode('utf-8'), parser)
try:
parsefile(filename)
print("%s is well-formed" % filename)
except Exception as e:
print("%s is NOT well-formed! %s" % (filename, e))
try:
parsestr(xmlstr)
print("%s is well-formed" % ('xml string'))
except Exception as e:
print("%s is NOT well-formed! %s" % ('xml string', e))
執行腳本時,我得到這個:
./data/data.xml is well-formed
xml string is NOT well-formed! 'ExpatParser' object has no attribute 'processingInstruction'
我錯過了什么?
uj5u.com熱心網友回復:
to 的第二個引數parseString應該是 a ContentHandler,而不是決議器。因為您傳入了錯誤型別的物件,所以它沒有預期的方法。
您需要子類ContentHandler化,然后根據需要處理 SAX 事件。在這種情況下,您實際上并沒有嘗試從檔案中提取任何資訊,因此您可以使用基ContentHandler類:
from xml.sax import parseString, SAXParseException
from xml.sax.handler import ContentHandler
xmlstr = "<note>\n<to>Mary</to>\n<from>Jane</from>\n<heading>Reminder</heading>\n<body>Go to the zoo</body>\n</note>"
try:
parseString(xmlstr, ContentHandler())
print("document is well formed")
except SAXParseException as err:
print("document is not well-formed:", err)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493457.html
