在Java SAX处理中,我不能设法从org.xml.sax.ext.EntityResolver2 resolveEntity方法获得实体引用名称。即使文档中声明'name' is never null when invoked by a SAX2 parser,name参数也始终为null。
有什么想法吗?
为了演示这个问题,我创建了一个Jython2.5脚本。它打印(在我的盒子上):
Entity Resolver 2 enabled: True
Entity name: NoneJython 2.5脚本:
# 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)发布于 2008-12-25 19:40:04
使用较新版本的Xerces (例如2.9.1),而不是与Java捆绑在一起的“旧”版本。
https://stackoverflow.com/questions/392268
复制相似问题