Как получить родительский путь к объекту lxml.etree._ElementTree - PullRequest
0 голосов
/ 06 ноября 2018

Используя библиотеку lxml, я объективировал некоторые элементы (пример кода ниже)

config = objectify.Element("config")
gui = objectify.Element("gui")
color = objectify.Element("color")
gui.append(color)
config.append(gui)
config.gui.color.active = "red"
config.gui.color.readonly = "black"
config.gui.color.match = "grey"

В результате получается следующая структура

config
config.gui
config.gui.color
config.gui.color.active
config.gui.color.readonly
config.gui.color.match

Я могу получить полный путь для каждого из объектов

for element in config.iter():
print(element.getroottree().getpath(element))

Элементы пути разделяются косой чертой, но это не проблема. Я не знаю, как я могу получить только родительскую часть пути, чтобы я мог использовать setattr, чтобы изменить значение данного элемента

Например, для элемента

config.gui.color.active

Я хотел бы ввести команду

setattr(config.gui.color, 'active', 'something')

Но понятия не имею, как получить «родительскую» часть полного пути.

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете получить родительский элемент, используя функцию getparent.

for element in config.iter():
    print("path:", element.getroottree().getpath(element))
    if element.getparent() is not None:
        print("parent-path:", element.getroottree().getpath(element.getparent()))

Вы также можете просто удалить последнюю часть пути к элементу.

for element in config.iter():
    path = element.getroottree().getpath(element)
    print("path:", path)
    parts = path.split("/")
    parent_path = "/".join(parts[:-1])
    print("parent-path:", parent_path)
...