Python对象包装器用于lxml etree?

0 投票
1 回答
723 浏览
提问于 2025-04-16 17:27

给定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')

撰写回答