From 0a0f281d805651a07b81f24c7400bf5509f0925a Mon Sep 17 00:00:00 2001 From: Constantin Hong Date: Wed, 11 Sep 2024 02:41:55 +0900 Subject: [PATCH] Revert "tests/test_xpath_selector_unit/feat: Do forest_transplanting by default" This reverts commit 4d266cac9f33d62ae1c662a3128d043d9a0579fd. --- changedetectionio/html_tools.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/changedetectionio/html_tools.py b/changedetectionio/html_tools.py index 1ca26e2f..990e0af1 100644 --- a/changedetectionio/html_tools.py +++ b/changedetectionio/html_tools.py @@ -125,12 +125,24 @@ def forest_transplanting(root): root_siblings_preceding = [ s for s in root.itersiblings(preceding=True)] root_siblings = [s for s in root.itersiblings()] - new_root = etree.Element("new_root") + Is_fragment=False + # If element node exsits in root element node's sibilings, it is fragment. + for node in chain(root_siblings_preceding, root_siblings): + if not hasattr(node.tag, '__name__'): + Is_fragment=True + # early exit. because the root is already root element. + # So, two root element nodes are detected. DOM violation. + break + + if Is_fragment: + new_root = etree.Element("new_root") + root_siblings_preceding.reverse() + for node in chain(root_siblings_preceding, [root], root_siblings): + new_root.append(node) + return new_root, True + + return root, False - root_siblings_preceding.reverse() - for node in chain(root_siblings_preceding, [root], root_siblings): - new_root.append(node) - return new_root, True # Return str Utf-8 of matched rules def xpath_filter(xpath_filter, html_content, append_pretty_line_formatting=False, is_rss=False):