首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用org.xml.sax.ext.EntityResolver2 resolveEntity方法获取非空名称参数?

如何使用org.xml.sax.ext.EntityResolver2 resolveEntity方法获取非空名称参数?
EN

Stack Overflow用户
提问于 2008-12-24 22:05:54
回答 1查看 194关注 0票数 1

在Java SAX处理中,我不能设法从org.xml.sax.ext.EntityResolver2 resolveEntity方法获得实体引用名称。即使文档中声明'name' is never null when invoked by a SAX2 parser,name参数也始终为null

有什么想法吗?

为了演示这个问题,我创建了一个Jython2.5脚本。它打印(在我的盒子上):

代码语言:javascript
复制
Entity Resolver 2 enabled: True
Entity name: None

Jython 2.5脚本:

代码语言:javascript
复制
# Jython
from org.python.core.util import StringUtil
from jarray import array

# Java Standard Edition
from org.xml.sax import *
from org.xml.sax.ext import *
from org.xml.sax.helpers import *
from java.io import ByteArrayInputStream

xml = """\
<!DOCTYPE doc
[<!ENTITY entity SYSTEM "entity-file">
]>
<doc>&entity;</doc>
"""

def empty_source():
    _source = InputSource()
    byte_stream = ByteArrayInputStream(array([], "b"))
    _source.setByteStream(byte_stream)
    return _source

class Handler(EntityResolver2):
    def getExternalSubset(self, name, baseURI):
        return None
    def resolveEntity(self, name, publicId, baseURI, systemId):
        print "Entity name:", name 
        return empty_source()

reader = XMLReaderFactory.createXMLReader()
enabled = reader.getFeature("http://xml.org/sax/features/use-entity-resolver2")
print "Entity Resolver 2 enabled:", enabled 

handler = Handler()
reader.setEntityResolver(handler) 
bytes = StringUtil.toBytes(xml)
byte_stream = ByteArrayInputStream(bytes)
source = InputSource(byte_stream)
reader.parse(source)
EN

回答 1

Stack Overflow用户

发布于 2008-12-25 19:40:04

使用较新版本的Xerces (例如2.9.1),而不是与Java捆绑在一起的“旧”版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/392268

复制
相关文章

相似问题

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