ビナイ:
私はlxmlのを客観使用してオブジェクトの表記法を使用してXMLを更新しようとしています。
<xml>
<fruit>
<citrus>
<lemon />
</citrus>
</fruit>
</xml>
私のようなlxmlのを客観使っマンゴーと呼ばれる別の果物を追加しようとしています
root = lxml.objectify.fromstring(xml_string)
root.fruit.citrus = 'orange'
def update(path, value):
// code
update('fruit.citrus', 'orange')
私は、オブジェクトfruit.citrusを渡すことはできませんので、私は「fruit.citrus」のような文字列を渡したいと思います。
私は、更新関数の内部コード「root.fruit.citrus = 『オレンジ』を実行しますかすなわちPythonでこれを実現するにはどうすればよいです。オブジェクトに文字列を変換する方法?
チェタンAmeta:
ソリューションの下には試してみてください。
import lxml.objectify, lxml.etree
xml = '<xml> <fruit> <citrus> <lemon /> </citrus> </fruit> </xml>'
root = lxml.objectify.fromstring(xml)
print("Before:")
print(lxml.etree.tostring(root))
def update(path, value):
parent = None
lst = path.split('.')
while lst:
ele = lst.pop(0)
parent = getattr(root, ele) if parent is None else getattr(parent, ele)
lxml.etree.SubElement(parent, value)
update('fruit.citrus', 'orange')
print("After:")
print(lxml.etree.tostring(root))
出力:
Before:
b'<xml><fruit><citrus><lemon/></citrus></fruit></xml>'
After:
b'<xml><fruit><citrus><lemon/><orange/></citrus></fruit></xml>'