Convertir una cadena notación de punto a objetos para acceder a los objetos de Python lxml

Vinay:

Estoy tratando de actualizar el código XML usando notación de objetos utilizando lxml Objectify.

<xml>
  <fruit>
    <citrus>
        <lemon />
    </citrus>
  </fruit>  
</xml>

Estoy tratando de agregar otra fruta llamada usando el mango lxml Objectify como

root = lxml.objectify.fromstring(xml_string)
root.fruit.citrus = 'orange'

def update(path, value):
    // code

update('fruit.citrus', 'orange')

Me gustaría pasar una cadena como 'fruit.citrus' porque no puedo pasar un fruit.citrus objeto.

¿Cómo puedo lograr esto en Python es decir, ¿cómo ejecutar el código 'root.fruit.citrus = 'naranja' dentro de la función de actualización. Cómo convertir cadena a objeto?

Chetan Ameta:

A continuación tratar solución:

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))

Salida:

Before:
b'<xml><fruit><citrus><lemon/></citrus></fruit></xml>'
After:
b'<xml><fruit><citrus><lemon/><orange/></citrus></fruit></xml>'

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=279937&siteId=1
Recomendado
Clasificación