def _clear_context(elem: etree._Element) -> None: elem.clear() while elem.getprevious() is not None: del elem.getparent()[0] return None
def remove_preserving_whitespace(element: Element) -> None: parent = element.getparent() if element.tail: prev = element.getprevious() if prev is not None: prev.tail = (prev.tail or "") + element.tail else: parent.text = (parent.text or "") + element.tail parent.remove(element)
def _copy_root_siblings(source: etree._Element, target: etree._Element): stack = [] current_element = source.getprevious() while current_element is not None: stack.append(current_element) current_element = current_element.getprevious() while stack: target.addprevious(copy(stack.pop())) stack = [] current_element = source.getnext() while current_element is not None: stack.append(current_element) current_element = current_element.getnext() while stack: target.addnext(copy(stack.pop()))
def load_app( app: et._Element, direction: str ) -> Tuple[Union[int, Tuple[int, int], None], List[Dict[str, str]], List[Dict[ str, str]], List[str], et._Element]: if direction == 'next': while True: app = app.getnext() if app.tag == 'app': break elif direction == 'prev': while True: app = app.getprevious() if app.tag == 'app': break selected_app = get_focus_app(app) rdgs = get_all_rdgs(app) arcs, nodes = get_arcs(app) return selected_app, rdgs, arcs, nodes, app
def remove_node(self, node: ET._Element, hold_tail=False): """ 删除指定节点 @param {ET._Element} node - 要删除的节点 @param {bool} hold_tail=False - 是否保留上一节点的tail信息 """ _parent = node.getparent() if _parent is not None: if hold_tail and node.tail is not None: # 保存上一节点tail信息 _tail = node.tail _previous = node.getprevious() if _previous is not None: _previous.tail = (_previous.tail or '') + _tail else: _parent.text = (_parent.text or '') + _tail _parent.remove(node) else: # 直接删除 _parent.remove(node)
def cleanup(elem: etree._Element): elem.clear() while elem.getprevious() is not None: del elem.getparent()[0] # clean up preceding siblings