使用 python xml.sax 解析 XML 实体

2023-11-30

使用 xml.sax 使用 python 解析 XML,但我的代码无法捕获实体。为什么skippedEntity()或resolveEntity()不报告以下内容:

import os
import cStringIO
import xml.sax
from xml.sax.handler import ContentHandler,EntityResolver,DTDHandler

#Class to parse and run test XML files
class TestHandler(ContentHandler,EntityResolver,DTDHandler):

    #SAX handler - Entity resolver
    def resolveEntity(self,publicID,systemID):
        print "TestHandler.resolveEntity: %s  %s" % (publicID,systemID)

    def skippedEntity(self, name):
        print "TestHandler.skippedEntity: %s" % (name)

    def unparsedEntityDecl(self,publicID,systemID,ndata):
        print "TestHandler.unparsedEntityDecl: %s  %s" % (publicID,systemID)

    def startElement(self,name,attrs):
        # name = string.lower(name)
        summary = '' + attrs.get('summary','')
        arg = '' + attrs.get('arg','')
        print 'TestHandler.startElement(), %s : %s (%s)' % (name,summary,arg)


def run(xml_string):
    try:
        parser = xml.sax.make_parser()
        stream = cStringIO.StringIO(xml_string)

        curHandler = TestHandler()
        parser.setContentHandler(curHandler)
        parser.setDTDHandler( curHandler )
        parser.setEntityResolver( curHandler )

        parser.parse(stream)
        stream.close()
    except (xml.sax.SAXParseException), e:
        print "*** PARSER error: %s" % e;

def main():
    try:
        XML = "<!DOCTYPE page[ <!ENTITY num 'foo'> ]><test summary='step: &num;'>Entity: &not;</test>"
        run(XML)
    except Exception, e:
      print 'FATAL ERROR: %s' % (str(e))

if __name__== '__main__':
    main()

运行时,我看到的只是:

 TestHandler.startElement(), step: foo ()
 *** PARSER error: <unknown>:1:36: undefined entity

为什么我看不到#num; 的resolveEntity 打印内容?或跳过的条目打印 ¬?


我认为resolveEntity 和skippedEntity 仅为外部DTD 调用。我通过修改 XML 使其工作。

XML = """<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE test SYSTEM "external.dtd" >
<test summary='step: &foo; &bar;'>Entity: &not;</test>
"""

The 外部.dtd包含两个简单的实体声明。

<!ENTITY foo "bar">
<!ENTITY bar "foo">

另外,我摆脱了resolveEntity。

这输出 -

TestHandler.startElement(), test : step: bar foo ()
TestHandler.skippedEntity: not

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python xml.sax 解析 XML 实体 的相关文章

随机推荐

  • 在excel vba中使用数组或字典作为sql中的from子句

    是否可以使用数组或字典作为 SQL 语句中的表 例如 strSQL SELECT FROM myArray 提前致谢 扩展 Nathan Sav 提供的想法 以下代码应该 Dim a 3 As String a 0 1 as C1 a 1
  • 在 Git 中仅提交文件的部分更改

    当我在 Git 中更改文件时 如何才能仅提交部分更改 例如 如何仅提交文件中已更改的 30 行中的 15 行 您可以使用 git add patch
  • Scala:用最后一个非空值填充列表中的空白

    我有一个类似的列表 val arr Array a b c 我正在寻找一种方法来创建 Array a a a b c c 您可以尝试使用折叠 简单 易于理解 的方法是向左折叠 Array empty String arr case prev
  • 如何打开 Excel 工作簿而不显示消息 该工作簿包含指向其他数据源的链接。以编程方式?

    我想以编程方式打开 1 个或多个 Excel 工作簿 当我打开工作簿时 你会得到一个问题 该工作簿包含其他数据源的链接 我不想按 不更新 您如何离开此消息框 所以功能不会再中断 不需要更新 尝试放入工作簿打开事件处理程序 Applicati
  • InternalsVisibleTo 的替代方案

    我目前正在尝试在我的解决方案中编写单元测试 但我想将单元测试放在不同的单独项目中 问题是当我生成一些假测试数据时 我需要设置类的属性 但这是不可能的 因为属性具有私有 内部设置 我找到了一种使用属性仅向某些项目公开内部属性的方法Intern
  • 如何获取生成的 java 进程的 PID

    我正在编写几个 java 程序 在完成我想做的任何事情后 需要在单独的 JVM 中杀死 清理 为此 我需要获取我正在创建的 java 进程的 PID jps l可在 Windows 和 Unix 上运行 您可以使用 java 程序调用此命令
  • 带 url 重定向的 Rails 句柄 404

    我希望使用 Rails 将链接重定向到互联网上 我确信这些链接从我的旧域到新域 我想使用地址 example com about about 将不再存在 在我的 application controller 中获取 404 检查 url 然
  • NSDate 因连续操作而崩溃

    我下面有以下代码 旨在将名为 today 的类变量向前或向后更改一天 它会工作一次 但之后就会崩溃 无论我按左键还是右键 它都会做同样的事情 我究竟做错了什么 今天的 var 是一个类 var 发起为 today NSDate date 这
  • VBA Powerpoint - 如何突出显示选定的文本

    我想将所选文本突出显示为某种颜色 但这不起作用 你能帮我吗 Sub ShadingLtYellow ActiveWindow Selection TextRange HighlightColor RGB RGB 255 255 175 En
  • 为什么 Pinia/Vuex 比具有服务类的经典方法更受青睐? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 皮尼亚 Vuex Pinia Vuex 以及 Redux 被设计为 单一事实来源 您可以拥有一个或多个存储来保存应用程序数据 并且可以从任何地方获取这些数据 Pinia 商店如下所示 ex
  • 如何在nuxt中添加流(flowtype)支持?

    我想为 nuxt 项目添加流支持 我的项目使用 webpack 和 babel 我可以在某处找到工作示例吗 如果我跑flow check 没有错误 当我运行时yarn run dev 我收到语法错误 我知道有这些未答复的 问题在那里 我再次
  • 编码返回“未知”

    对于这个例子 http pastebin com QyebfD1pz3 和 cvc4 返回 未知 作为 check sat 的结果 两者对于原因都不是很详细 有没有办法让 z3 关于其执行更加详细 你的脚本使用了这个策略 s Then si
  • IE6 中的 event.currentTarget

    我有一个事件处理程序 我将其附加到一个元素以捕获冒泡的单击事件 我需要一个reliable获取元素的方法caught事件 而不是触发它的元素 该特定元素高于 srcElement target 的级别数量是任意的 因此使用 ParentNo
  • 使用 WebServiceTemplate 设置自定义标头

    我在 Spring Boot 中使用 WebServiceTemplate 并使用 marshalSendAndReceive 调用目标服务 如何在请求中设置自定义 HTTP 标头 您需要使用 WebServiceMessageCallba
  • 在 dropwizard 中运行异步作业并轮询其状态

    在 dropwizard 中 我需要实现异步作业并轮询它们的状态 我在资源中有两个端点 Path jobs Component public class MyController POST Produces MediaType APPLIC
  • 在 mac 中安装 PHP INTL 不正确

    我已经安装了php56 intl using Homebrew像这样 brew install php56 intl当我这样做时php m grep intl它给了我intl 但是当我检查我的phpinfo 文件 不显示intl 不知道我错
  • 导致 JavaFX 2.0 中 TableView 不响应鼠标单击

    我想要一个 JavaFX 2 0 TableView 但我不希望它响应鼠标单击 当然 我可以禁用控件 小部件 但它会显示为禁用 tableview setSelectionModel null 给出了我想要的行为 但 UI 转储了抱怨 nu
  • 在 Flex 中的组件之间共享数据的最佳方式是什么?

    我正在为新工作开发一个 Flex 应用程序 这有点像一个训练轮应用程序 我正在学习这门语言 这不是一个需要与服务对话才能完成工作的应用程序 整个应用程序中有一些组合框实例共享相同的一组可能值 例如 选择状态 进行中 拒绝 完成 我希望它们使
  • 使用 Indy 发布并且文件名包含希腊字符时文件上传失败

    我正在尝试实施一个POST到网络服务 我需要发送一个类型为可变的文件 docx pdf txt 以及 JSON 格式的字符串 我已成功使用类似于以下的代码成功发布文件 procedure DoRequest var Http TIdHTTP
  • 使用 python xml.sax 解析 XML 实体

    使用 xml sax 使用 python 解析 XML 但我的代码无法捕获实体 为什么skippedEntity 或resolveEntity 不报告以下内容 import os import cStringIO import xml sa