首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >parseString不在xml.sax中为我工作(Python)

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

Stack Overflow用户
提问于 2022-06-17 12:22:56
回答 1查看 56关注 0票数 0

我需要验证xml,但是代码包含一个变量(str),而不是文件。

所以我想用xml.sax很容易做到这一点。但我不能让它为我工作。当解析一个文件时,它工作得很好,但是在解析一个字符串时,我得到了一个奇怪的错误。

这是我的测试代码:

代码语言:javascript
复制
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))

在执行脚本时,我得到以下内容:

代码语言:javascript
复制
./data/data.xml is well-formed
xml string is NOT well-formed! 'ExpatParser' object has no attribute 'processingInstruction'

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-17 12:41:50

parseString的第二个参数应该是一个ContentHandler,而不是解析器。因为您传入了错误的对象类型,所以它没有预期的方法。

您需要对ContentHandler进行子类化,然后根据需要处理SAX事件。在本例中,您实际上并不试图从文档中提取任何信息,因此可以使用基类ContentHandler

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72659332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档