parseString不为我在xml工作.sax (Python)



我需要验证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'

我错过了什么?

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)

最新更新