Python对象包装器用于lxml etree?
给定lxml.etree,是否可以以某种方式构建一个树的对象表示,这样就可以像使用对象一样访问子元素(用'.'操作符)?
我知道lxml有一个叫做objectify的库,但看起来它只能在给定原始XML的情况下构建,并且向树中添加新元素仍然需要通过类似etree的节点创建。
理想情况下,我想实现的是:
tree = objectify( etree_root )
print tree.somenode.get( 'attrib_name' )
tree.somenode.set( 'attrib_name', 'some_val' )
Node( tree.somenode, "somechild" )
tree.somenode.somechild.set( 'attrib', 'foo' )
1 个回答
1
我想你需要重写一下 __setattribute__
和 __getattribute__
这两个操作符。你可能需要创建一个新的类,继承自 etree.Element 类,才能做到这一点。
不过,从另一个角度来看,这种方法可能不太实用,因为可能会有多个子节点使用相同的标签名。
要查找元素,你还可以使用 XPath 表达式,这和你的想法是相关的。API 的使用方法如下:
subchild = root.find('child/subchild')