我需要验证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'我遗漏了什么?
发布于 2022-06-17 12:41:50
parseString的第二个参数应该是一个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://stackoverflow.com/questions/72659332
复制相似问题