Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 lxml-手动创建自定义类的实例_Python 2.7_Lxml - Fatal编程技术网

Python 2.7 lxml-手动创建自定义类的实例

Python 2.7 lxml-手动创建自定义类的实例,python-2.7,lxml,Python 2.7,Lxml,我正在使用lxml来解析XML,我想知道是否有一种直接的方法来做相反的事情:创建这些类的实例,使用自定义类的方法,然后将它们序列化为XML 正常用例,通过解析XML创建对象: from lxml import etree class TextElement(etree.ElementBase): def get_text(self): return ', '.join([line.text for line in self.iter('line')]) # all

我正在使用lxml来解析XML,我想知道是否有一种直接的方法来做相反的事情:创建这些类的实例,使用自定义类的方法,然后将它们序列化为XML

正常用例,通过解析XML创建对象:

from lxml import etree

class TextElement(etree.ElementBase):
    def get_text(self):
        return ', '.join([line.text for line in self.iter('line')])


# all parsed 'text' elements will be TextElement instances
parser = etree.XMLParser()
lookup = etree.ElementNamespaceClassLookup()
parser.set_element_class_lookup(lookup)
server_ns_lookup = lookup.get_namespace(None)
server_ns_lookup['text'] = TextElement

xml = """
<text>
  <line>sometext</line>
  <line>someothertext</line>
</text>
"""

res = etree.fromstring(xml, parser)
print isinstance(res, TextElement)

# take advantage of the TextElement methods...
print res.get_text()
我想创建一个TextElement实例,以便访问其方法,然后对其进行序列化。 我可以这样做:

E = objectify.ElementMaker(annotate=False)

text_element = E.text(
                    E.line('sometext'),
                    E.line('someothertext')
                )

text_el = etree.fromstring(etree.tostring(text_element, pretty_print=True), parser)

# do some fancy stuff with the TextElement object
print text_el.get_text()

# and then serialize it for output
对我来说,这似乎是错误的(或者说是低效的)

E = objectify.ElementMaker(annotate=False)

text_element = E.text(
                    E.line('sometext'),
                    E.line('someothertext')
                )

text_el = etree.fromstring(etree.tostring(text_element, pretty_print=True), parser)

# do some fancy stuff with the TextElement object
print text_el.get_text()

# and then serialize it for output