С тех пор 6.0, Java поддерживает подстановочные пути к классам.
http://docs.python.org/library/xml.sax.html
Обратите внимание, что вы можете передать объект 'stream' в xml.sax.parse
. Это означает, что вы, вероятно, можете передать любой объект, который имеет файловые методы (например, read
), в вызов parse
... Создайте свой собственный объект, который сначала запустит ваш виртуальный корневой каталог. -tag, затем содержимое файла, затем виртуальный корневой конечный тег. Я предполагаю, что вам нужно реализовать только метод read
... но это может зависеть от синтаксического анализатора sax, который вы будете использовать.
Пример, который работает для меня:
import xml.sax
import xml.sax.handler
class PseudoStream(object):
def read_iterator(self):
yield '<foo>'
yield '<bar>'
for line in open('test.xml'):
yield line
yield '</bar>'
yield '</foo>'
def __init__(self):
self.ri = self.read_iterator()
def read(self, *foo):
try:
return self.ri.next()
except StopIteration:
return ''
class SAXHandler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
print name, attrs
d = xml.sax.parse(PseudoStream(), SAXHandler())
xml.parsers.expat - Быстрый анализ XML с использованием Expat The xml.parsers.expat module is a Python interface to the Expat non-validating XML parser. The module provides a single extension type, xmlparser, that represents the current state of an XML parser. After an xmlparser object has been created, various attributes of the object can be set to handler functions. When an XML document is then fed to the parser, the handler functions are called for the character data and markup in the XML document.
More info : http://www.python.org/doc/2.5/lib/module-xml.parsers.expat.html
Добавьте корневой элемент и используйте SAX, STax или VTD-XML ..
Быстрый и грязный ответ - это добавление корневого элемента (как String), чтобы он был действительным XML.
С уважением.