lxmlのは、Pythonのオブジェクトにアクセスするオブジェクトにドット表記の文字列を変換します

ビナイ:

私は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>'

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=279934&siteId=1