如何替换树中的元素?(ElementTree的/降价)

 潇洒树春不_970 发布于 2023-02-06 14:52

如何在元素树中迭代期间替换元素?我正在为markdown编写一个树处理器,并希望包装一个元素.

...

应该成为

...

getiterator('pre')用来查找元素,但我不知道如何包装它.问题点是用新的包装器替换找到的元素,但保留现有元素作为子包装.

1 个回答
  • 这有点棘手.首先,您需要获取上一个问题中描述的父元素.

    parent_map = dict((c, p) for p in tree.getiterator() for c in p)
    

    如果你可以降价使用lxml,这有点容易 - 我相信lxml元素已经知道了他们的父母.

    现在,当您从迭代中获取元素时,您还可以获取父元素:

    for elem in list(tree.getiterator('pre')):
        parent = parent_map[elem]
        wrap_elem(parent, elem)
    

    请注意,我已经将树中的迭代器转换为列表 - 我们不希望在迭代它时修改树.那可能很麻烦.

    最后,您可以移动元素:

    def wrap_elem(parent, elem)
        parent_index = list(parent).index(elem)
        parent.remove(elem)
        new_elem = ET.Element('div', attrib={'class': 'wrapper'})
        parent.insert(parent_index, new_elem)
        new_elem.append(elem)
    

    *请注意,我没有完全测试此代码...如果您发现任何错误,请告诉我.

    2023-02-06 14:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有