diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-10-06 05:44:19 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-10-06 05:44:19 -0600 |
commit | ad94ef5a96e954f1a660cdd3a2ff03e0787f690b (patch) | |
tree | bae59fd2c284d562e07836590b7774f7935523dc | |
parent | f5cd90805ec67fb52f73ec4cef9cef881a67522d (diff) | |
parent | cdf089566548613713cc48ef3dc4169c62b6b43b (diff) | |
download | servo-ad94ef5a96e954f1a660cdd3a2ff03e0787f690b.tar.gz servo-ad94ef5a96e954f1a660cdd3a2ff03e0787f690b.zip |
Auto merge of #7876 - jgraham:wpt-upgrade, r=Ms2ger
Update web-platform-tests to revision 7da6acfd668e66adae5ab4e2d389810d3b1460be
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7876)
<!-- Reviewable:end -->
382 files changed, 36277 insertions, 256 deletions
diff --git a/tests/wpt/harness/wptrunner/browsers/firefox.py b/tests/wpt/harness/wptrunner/browsers/firefox.py index 6bbe282d3e8..d3698c22ecf 100644 --- a/tests/wpt/harness/wptrunner/browsers/firefox.py +++ b/tests/wpt/harness/wptrunner/browsers/firefox.py @@ -53,8 +53,14 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, executor_kwargs = base_executor_kwargs(test_type, server_config, cache_manager, **kwargs) executor_kwargs["close_after_done"] = True - if run_info_data["debug"] and kwargs["timeout_multiplier"] is None: - executor_kwargs["timeout_multiplier"] = 3 + if kwargs["timeout_multiplier"] is None: + if kwargs["gecko_e10s"] and test_type == "reftest": + if run_info_data["debug"]: + executor_kwargs["timeout_multiplier"] = 4 + else: + executor_kwargs["timeout_multiplier"] = 2 + elif run_info_data["debug"]: + executor_kwargs["timeout_multiplier"] = 3 return executor_kwargs diff --git a/tests/wpt/harness/wptrunner/browsers/servo.py b/tests/wpt/harness/wptrunner/browsers/servo.py index 64249af8a59..1ae9b7ea77b 100644 --- a/tests/wpt/harness/wptrunner/browsers/servo.py +++ b/tests/wpt/harness/wptrunner/browsers/servo.py @@ -37,8 +37,10 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, rv["pause_after_test"] = kwargs["pause_after_test"] return rv + def env_options(): - return {"host": "localhost", + return {"host": "127.0.0.1", + "external_host": "web-platform.test", "bind_hostname": "true", "testharnessreport": "testharnessreport-servo.js", "supports_debugger": True} diff --git a/tests/wpt/harness/wptrunner/browsers/servodriver.py b/tests/wpt/harness/wptrunner/browsers/servodriver.py index 656a8b51f40..7df28797efb 100644 --- a/tests/wpt/harness/wptrunner/browsers/servodriver.py +++ b/tests/wpt/harness/wptrunner/browsers/servodriver.py @@ -49,7 +49,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, **kw def env_options(): - return {"host": "web-platform.test", + return {"host": "127.0.0.1", + "external_host": "web-platform.test", "bind_hostname": "true", "testharnessreport": "testharnessreport-servodriver.js", "supports_debugger": True} diff --git a/tests/wpt/harness/wptrunner/executors/executorservodriver.py b/tests/wpt/harness/wptrunner/executors/executorservodriver.py index 6b94c033bd1..8a914a876eb 100644 --- a/tests/wpt/harness/wptrunner/executors/executorservodriver.py +++ b/tests/wpt/harness/wptrunner/executors/executorservodriver.py @@ -36,7 +36,8 @@ class ServoWebDriverProtocol(Protocol): session_started = False try: - self.session = webdriver.Session(self.host, self.port) + self.session = webdriver.Session(self.host, self.port, + extension=webdriver.ServoExtensions) self.session.start() except: self.logger.warning( @@ -82,6 +83,11 @@ class ServoWebDriverProtocol(Protocol): self.logger.error(traceback.format_exc(e)) break + def on_environment_change(self, old_environment, new_environment): + #Unset all the old prefs + self.session.extension.reset_prefs(*old_environment.get("prefs", {}).keys()) + self.session.extension.set_prefs(new_environment.get("prefs", {})) + class ServoWebDriverRun(object): def __init__(self, func, session, url, timeout, current_timeout=None): diff --git a/tests/wpt/harness/wptrunner/executors/webdriver.py b/tests/wpt/harness/wptrunner/executors/webdriver.py index b3c9ab3a7f5..247f53f1d7a 100644 --- a/tests/wpt/harness/wptrunner/executors/webdriver.py +++ b/tests/wpt/harness/wptrunner/executors/webdriver.py @@ -346,7 +346,8 @@ class Find(object): class Session(object): - def __init__(self, host, port, url_prefix="", desired_capabilities=None, port_timeout=60): + def __init__(self, host, port, url_prefix="", desired_capabilities=None, port_timeout=60, + extension=None): self.transport = Transport(host, port, url_prefix, port_timeout) self.desired_capabilities = desired_capabilities self.session_id = None @@ -354,6 +355,8 @@ class Session(object): self.window = None self.find = None self._element_cache = {} + self.extension = None + self.extension_cls = extension def start(self): desired_capabilities = self.desired_capabilities if self.desired_capabilities else {} @@ -365,6 +368,8 @@ class Session(object): self.timeouts = Timeouts(self) self.window = Window(self) self.find = Find(self) + if self.extension_cls: + self.extension = self.extension_cls(self) return rv["value"] @@ -376,6 +381,7 @@ class Session(object): self.timeouts = None self.window = None self.find = None + self.extension = None self.transport.close_connection() def __enter__(self): @@ -579,9 +585,37 @@ class Element(object): @property @command def text(self): - return self.session.send_command("GET", self.url("text"), key="value") + return self.session.send_command("GET", self.url("text")) @property @command def name(self): - return self.session.send_command("GET", self.url("name"), key="value") + return self.session.send_command("GET", self.url("name")) + + @command + def css(self, property_name): + return self.session.send_command("GET", self.url("css/%s" % property_name)) + + @property + @command + def rect(self): + return self.session.send_command("GET", self.url("rect")) + +class ServoExtensions(object): + def __init__(self, session): + self.session = session + + @command + def get_prefs(self, *prefs): + body = {"prefs": list(prefs)} + return self.session.send_command("POST", "servo/prefs/get", body) + + @command + def set_prefs(self, prefs): + body = {"prefs": prefs} + return self.session.send_command("POST", "servo/prefs/set", body) + + @command + def reset_prefs(self, *prefs): + body = {"prefs": list(prefs)} + return self.session.send_command("POST", "servo/prefs/reset", body) diff --git a/tests/wpt/harness/wptrunner/testrunner.py b/tests/wpt/harness/wptrunner/testrunner.py index 4c876328771..b5617827a40 100644 --- a/tests/wpt/harness/wptrunner/testrunner.py +++ b/tests/wpt/harness/wptrunner/testrunner.py @@ -199,6 +199,7 @@ class TestRunnerManager(threading.Thread): self.browser = None self.browser_pid = None + self.browser_started = False # Flags used to shut down this thread if we get a sigint self.parent_stop_flag = stop_flag @@ -279,6 +280,10 @@ class TestRunnerManager(threading.Thread): if commands[command](*data) is Stop: break else: + if (self.debug_info and self.debug_info.interactive and + self.browser_started and not browser.is_alive()): + self.logger.debug("Debugger exited") + break if not self.test_runner_proc.is_alive(): if not self.command_queue.empty(): # We got a new message so process that @@ -355,6 +360,7 @@ class TestRunnerManager(threading.Thread): succeeded = False else: succeeded = True + self.browser_started = True # This has to happen after the lock is released if not succeeded: @@ -457,6 +463,7 @@ class TestRunnerManager(threading.Thread): return try: self.browser.stop() + self.browser_started = False if self.test_runner_proc.is_alive(): self.send_message("stop") self.ensure_runner_stopped() diff --git a/tests/wpt/harness/wptrunner/update/tree.py b/tests/wpt/harness/wptrunner/update/tree.py index 292a45a4fe2..05b35c24674 100644 --- a/tests/wpt/harness/wptrunner/update/tree.py +++ b/tests/wpt/harness/wptrunner/update/tree.py @@ -274,6 +274,8 @@ class GitTree(object): :param branch: Branch name to use :param force: Force-checkout """ + assert rev is not None + args = [] if branch: branches = [ref[len("refs/heads/"):] for sha1, ref in self.list_refs() diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 77e750da9ec..ef9377cddf5 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -270,6 +270,30 @@ "url": "/html-media-capture/capture_video_cancel-manual.html" }, { + "path": "html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html", + "url": "/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html" + }, + { + "path": "html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html", + "url": "/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html" + }, + { + "path": "html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html", + "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html" + }, + { + "path": "html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html", + "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html" + }, + { + "path": "html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html", + "url": "/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html" + }, + { + "path": "html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html", + "url": "/html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html" + }, + { "path": "html/browsers/offline/application-cache-api/api_status_checking-manual.html", "url": "/html/browsers/offline/application-cache-api/api_status_checking-manual.html" }, @@ -338,6 +362,14 @@ "url": "/html/browsers/offline/section_network_online-manual.html" }, { + "path": "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-manual.html", + "url": "/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-manual.html" + }, + { + "path": "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-manual.html", + "url": "/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-manual.html" + }, + { "path": "html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-locationbar-manual.html", "url": "/html/browsers/the-window-object/the-windowproxy-object/test-window-proxy-locationbar-manual.html" }, @@ -12252,6 +12284,10 @@ "url": "/content-security-policy/blink-contrib-2/plugintypes-nourl-blocked.sub.html" }, { + "path": "content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html", + "url": "/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html" + }, + { "path": "content-security-policy/blink-contrib-2/scripthash-allowed.sub.html", "url": "/content-security-policy/blink-contrib-2/scripthash-allowed.sub.html" }, @@ -12260,6 +12296,10 @@ "url": "/content-security-policy/blink-contrib-2/scripthash-basic-blocked.sub.html" }, { + "path": "content-security-policy/blink-contrib-2/scripthash-default-src.sub.html", + "url": "/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html" + }, + { "path": "content-security-policy/blink-contrib-2/scripthash-ignore-unsafeinline.sub.html", "url": "/content-security-policy/blink-contrib-2/scripthash-ignore-unsafeinline.sub.html" }, @@ -13988,6 +14028,10 @@ "url": "/domxpath/evaluator-constructor.html" }, { + "path": "domxpath/xml_xpath_runner.html", + "url": "/domxpath/xml_xpath_runner.html" + }, + { "path": "editing/event.html", "url": "/editing/event.html" }, @@ -14528,10 +14572,122 @@ "url": "/html-media-capture/idlharness.html" }, { + "path": "html/browsers/browsing-the-web/history-traversal/001.html", + "url": "/html/browsers/browsing-the-web/history-traversal/001.html" + }, + { "path": "html/browsers/browsing-the-web/history-traversal/PopStateEvent.html", "url": "/html/browsers/browsing-the-web/history-traversal/PopStateEvent.html" }, { + "path": "html/browsers/browsing-the-web/history-traversal/browsing_context_name.html", + "url": "/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html", + "url": "/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html", + "url": "/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html", + "url": "/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/events.html", + "url": "/html/browsers/browsing-the-web/history-traversal/events.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/hashchange_event.html", + "url": "/html/browsers/browsing-the-web/history-traversal/hashchange_event.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/popstate_event.html", + "url": "/html/browsers/browsing-the-web/history-traversal/popstate_event.html" + }, + { + "path": "html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html", + "url": "/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/001.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/001.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/002.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/002.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/003.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/003.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/004.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/004.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/005.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/005.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/006.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/006.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/007.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/007.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/008.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/008.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/009.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/009.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/010.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/010.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/011.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/011.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/012.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/012.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/013.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/013.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/014.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/014.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/015.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/015.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html" + }, + { + "path": "html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html", + "url": "/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html" + }, + { "path": "html/browsers/browsing-the-web/read-media/pageload-image.html", "url": "/html/browsers/browsing-the-web/read-media/pageload-image.html" }, @@ -14544,6 +14700,34 @@ "url": "/html/browsers/browsing-the-web/read-text/load-text-plain.html" }, { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/001.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/001.html" + }, + { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/002.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/002.html" + }, + { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/003.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/003.html" + }, + { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/004.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/004.html" + }, + { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/005.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/005.html" + }, + { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/006.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/006.html" + }, + { + "path": "html/browsers/browsing-the-web/scroll-to-fragid/007.html", + "url": "/html/browsers/browsing-the-web/scroll-to-fragid/007.html" + }, + { "path": "html/browsers/browsing-the-web/unloading-documents/001.html", "url": "/html/browsers/browsing-the-web/unloading-documents/001.html" }, @@ -14564,6 +14748,66 @@ "url": "/html/browsers/browsing-the-web/unloading-documents/005.html" }, { + "path": "html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/prompt/001.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/prompt/001.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/prompt/002.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/prompt/002.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/prompt/003.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/prompt/003.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/001.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/001.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/002.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/002.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/003.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/003.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/004.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/004.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/006.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/006.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/007.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/007.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/008.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/008.html" + }, + { + "path": "html/browsers/browsing-the-web/unloading-documents/unload/009.html", + "url": "/html/browsers/browsing-the-web/unloading-documents/unload/009.html" + }, + { "path": "html/browsers/history/the-history-interface/001.html", "url": "/html/browsers/history/the-history-interface/001.html" }, @@ -14636,18 +14880,38 @@ "url": "/html/browsers/history/the-history-interface/history_back.html" }, { + "path": "html/browsers/history/the-history-interface/history_back_1.html", + "url": "/html/browsers/history/the-history-interface/history_back_1.html" + }, + { "path": "html/browsers/history/the-history-interface/history_forward.html", "url": "/html/browsers/history/the-history-interface/history_forward.html" }, { + "path": "html/browsers/history/the-history-interface/history_forward_1.html", + "url": "/html/browsers/history/the-history-interface/history_forward_1.html" + }, + { "path": "html/browsers/history/the-history-interface/history_go_minus.html", "url": "/html/browsers/history/the-history-interface/history_go_minus.html" }, { + "path": "html/browsers/history/the-history-interface/history_go_no_argument.html", + "url": "/html/browsers/history/the-history-interface/history_go_no_argument.html" + }, + { "path": "html/browsers/history/the-history-interface/history_go_plus.html", "url": "/html/browsers/history/the-history-interface/history_go_plus.html" }, { + "path": "html/browsers/history/the-history-interface/history_go_undefined.html", + "url": "/html/browsers/history/the-history-interface/history_go_undefined.html" + }, + { + "path": "html/browsers/history/the-history-interface/history_go_zero.html", + "url": "/html/browsers/history/the-history-interface/history_go_zero.html" + }, + { "path": "html/browsers/history/the-history-interface/history_pushstate.html", "url": "/html/browsers/history/the-history-interface/history_pushstate.html" }, @@ -14676,6 +14940,70 @@ "url": "/html/browsers/history/the-history-interface/history_state.html" }, { + "path": "html/browsers/history/the-history-interface/joint_session_history/001.html", + "url": "/html/browsers/history/the-history-interface/joint_session_history/001.html" + }, + { + "path": "html/browsers/history/the-history-interface/joint_session_history/002.html", + "url": "/html/browsers/history/the-history-interface/joint_session_history/002.html" + }, + { + "path": "html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html", + "url": "/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_1.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_1.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_2.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_2.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_3.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_3.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_4.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_4.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_5.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_5.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_unload_1.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_unload_1.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html" + }, + { + "path": "html/browsers/history/the-history-interface/traverse_the_history_write_onload_2.html", + "url": "/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2.html" + }, + { + "path": "html/browsers/history/the-location-interface/assign_after_load.html", + "url": "/html/browsers/history/the-location-interface/assign_after_load.html" + }, + { + "path": "html/browsers/history/the-location-interface/assign_before_load.html", + "url": "/html/browsers/history/the-location-interface/assign_before_load.html" + }, + { + "path": "html/browsers/history/the-location-interface/document_location.html", + "url": "/html/browsers/history/the-location-interface/document_location.html" + }, + { "path": "html/browsers/history/the-location-interface/location-stringifier.html", "url": "/html/browsers/history/the-location-interface/location-stringifier.html" }, @@ -14684,6 +15012,10 @@ "url": "/html/browsers/history/the-location-interface/location_assign.html" }, { + "path": "html/browsers/history/the-location-interface/location_assign_about_blank.html", + "url": "/html/browsers/history/the-location-interface/location_assign_about_blank.html" + }, + { "path": "html/browsers/history/the-location-interface/location_hash.html", "url": "/html/browsers/history/the-location-interface/location_hash.html" }, @@ -14724,6 +15056,38 @@ "url": "/html/browsers/history/the-location-interface/location_search.html" }, { + "path": "html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html", + "url": "/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html" + }, + { + "path": "html/browsers/history/the-location-interface/reload_document_open_write.html", + "url": "/html/browsers/history/the-location-interface/reload_document_open_write.html" + }, + { + "path": "html/browsers/history/the-location-interface/reload_document_write.html", + "url": "/html/browsers/history/the-location-interface/reload_document_write.html" + }, + { + "path": "html/browsers/history/the-location-interface/reload_document_write_onload.html", + "url": "/html/browsers/history/the-location-interface/reload_document_write_onload.html" + }, + { + "path": "html/browsers/history/the-location-interface/reload_post_1.html", + "url": "/html/browsers/history/the-location-interface/reload_post_1.html" + }, + { + "path": "html/browsers/history/the-location-interface/scripted_click_assign_during_load.html", + "url": "/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html" + }, + { + "path": "html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html", + "url": "/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html" + }, + { + "path": "html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html", + "url": "/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html" + }, + { "path": "html/browsers/history/the-location-interface/security_location_0.sub.htm", "url": "/html/browsers/history/the-location-interface/security_location_0.sub.htm" }, @@ -14784,10 +15148,42 @@ "url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html" }, { + "path": "html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html", + "url": "/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html" + }, + { + "path": "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html", + "url": "/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html" + }, + { + "path": "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html", + "url": "/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html" + }, + { + "path": "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html", + "url": "/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html" + }, + { "path": "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html", "url": "/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html" }, { + "path": "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html", + "url": "/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html" + }, + { + "path": "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html", + "url": "/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html" + }, + { + "path": "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html", + "url": "/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html" + }, + { + "path": "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html", + "url": "/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html" + }, + { "path": "html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html", "url": "/html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html" }, @@ -14828,6 +15224,14 @@ "url": "/html/browsers/windows/browsing-context-first-created.xhtml" }, { + "path": "html/browsers/windows/browsing-context-names/001.html", + "url": "/html/browsers/windows/browsing-context-names/001.html" + }, + { + "path": "html/browsers/windows/browsing-context-names/002.html", + "url": "/html/browsers/windows/browsing-context-names/002.html" + }, + { "path": "html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html", "url": "/html/browsers/windows/browsing-context-names/browsing-context-choose-existing.html" }, @@ -14852,6 +15256,10 @@ "url": "/html/browsers/windows/nested-browsing-contexts/frameElement.sub.html" }, { + "path": "html/browsers/windows/nested-browsing-contexts/window-top-001.html", + "url": "/html/browsers/windows/nested-browsing-contexts/window-top-001.html" + }, + { "path": "html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html", "url": "/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html" }, @@ -18240,10 +18648,6 @@ "url": "/js/builtins/WeakMap.prototype-properties.html" }, { - "path": "media-source/SourceBuffer-abort-readyState.html", - "url": "/media-source/SourceBuffer-abort-readyState.html" - }, - { "path": "media-source/SourceBuffer-abort-removed.html", "url": "/media-source/SourceBuffer-abort-removed.html" }, @@ -20416,6 +20820,10 @@ "url": "/pointerevents/pointerevent_constructor.html" }, { + "path": "pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html", + "url": "/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html" + }, + { "path": "pointerevents/pointerevent_touch-action-illegal.html", "url": "/pointerevents/pointerevent_touch-action-illegal.html" }, @@ -25168,6 +25576,18 @@ "url": "/selectors/attribute-selectors/attribute-case/syntax.html" }, { + "path": "shadow-dom/Element-interface-attachShadow.html", + "url": "/shadow-dom/Element-interface-attachShadow.html" + }, + { + "path": "shadow-dom/Element-interface-shadowRoot-attribute.html", + "url": "/shadow-dom/Element-interface-shadowRoot-attribute.html" + }, + { + "path": "shadow-dom/ShadowRoot-interface.html", + "url": "/shadow-dom/ShadowRoot-interface.html" + }, + { "path": "shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001.html", "url": "/shadow-dom/untriaged/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001.html" }, @@ -28950,6 +29370,11 @@ "url": "/html/syntax/parsing/html5lib_webkit02.html?run_type=write_single" }, { + "path": "media-source/SourceBuffer-abort-readyState.html", + "timeout": "long", + "url": "/media-source/SourceBuffer-abort-readyState.html" + }, + { "path": "media-source/mediasource-redundant-seek.html", "timeout": "long", "url": "/media-source/mediasource-redundant-seek.html" @@ -34629,7 +35054,7 @@ } ] }, - "rev": "0159b3ec9ba5355a3340621226e02ae026effd7f", + "rev": "7da6acfd668e66adae5ab4e2d389810d3b1460be", "url_base": "/", "version": 2 -} +}
\ No newline at end of file diff --git a/tests/wpt/metadata/XMLHttpRequest/send-redirect-to-cors.htm.ini b/tests/wpt/metadata/XMLHttpRequest/send-redirect-to-cors.htm.ini deleted file mode 100644 index 8a2f5593ca5..00000000000 --- a/tests/wpt/metadata/XMLHttpRequest/send-redirect-to-cors.htm.ini +++ /dev/null @@ -1,14 +0,0 @@ -[send-redirect-to-cors.htm] - type: testharness - [XMLHttpRequest: send() - Redirect to CORS-enabled resource (301)] - expected: FAIL - - [XMLHttpRequest: send() - Redirect to CORS-enabled resource (302)] - expected: FAIL - - [XMLHttpRequest: send() - Redirect to CORS-enabled resource (303)] - expected: FAIL - - [XMLHttpRequest: send() - Redirect to CORS-enabled resource (307)] - expected: FAIL - diff --git a/tests/wpt/metadata/XMLHttpRequest/send-redirect-to-non-cors.htm.ini b/tests/wpt/metadata/XMLHttpRequest/send-redirect-to-non-cors.htm.ini new file mode 100644 index 00000000000..eabe809eb86 --- /dev/null +++ b/tests/wpt/metadata/XMLHttpRequest/send-redirect-to-non-cors.htm.ini @@ -0,0 +1,14 @@ +[send-redirect-to-non-cors.htm] + type: testharness + [XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (301)] + expected: FAIL + + [XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (302)] + expected: FAIL + + [XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (303)] + expected: FAIL + + [XMLHttpRequest: send() - Redirect to cross-origin resource, not CORS-enabled (307)] + expected: FAIL + diff --git a/tests/wpt/metadata/XMLHttpRequest/timeout-cors-async.htm.ini b/tests/wpt/metadata/XMLHttpRequest/timeout-cors-async.htm.ini deleted file mode 100644 index 39ed4516c79..00000000000 --- a/tests/wpt/metadata/XMLHttpRequest/timeout-cors-async.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[timeout-cors-async.htm] - type: testharness - [XMLHttpRequest: timeout event and cross-origin request] - expected: FAIL - diff --git a/tests/wpt/metadata/dom/nodes/Document-createAttribute.html.ini b/tests/wpt/metadata/dom/nodes/Document-createAttribute.html.ini new file mode 100644 index 00000000000..9a1dd15b5fb --- /dev/null +++ b/tests/wpt/metadata/dom/nodes/Document-createAttribute.html.ini @@ -0,0 +1,5 @@ +[Document-createAttribute.html] + type: testharness + [HTML document.createAttribute("TITLE")] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/001.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/001.html.ini new file mode 100644 index 00000000000..402d2e8d213 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/001.html.ini @@ -0,0 +1,6 @@ +[001.html] + type: testharness + expected: TIMEOUT + [pageshow event from traversal] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html.ini new file mode 100644 index 00000000000..75059e3111e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html.ini @@ -0,0 +1,5 @@ +[browsing_context_name.html] + type: testharness + [Retaining window.name on history traversal] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html.ini new file mode 100644 index 00000000000..ee105e85389 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html.ini @@ -0,0 +1,5 @@ +[browsing_context_name_cross_origin.html] + type: testharness + [Restoring window.name on cross-origin history traversal] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html.ini new file mode 100644 index 00000000000..70d9d1d7baf --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html.ini @@ -0,0 +1,5 @@ +[browsing_context_name_cross_origin_2.html] + type: testharness + [Restoring window.name on cross-origin history traversal] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html.ini new file mode 100644 index 00000000000..67ccf7d67ac --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html.ini @@ -0,0 +1,5 @@ +[browsing_context_name_cross_origin_3.html] + type: testharness + [Restoring window.name on cross-origin history traversal] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/events.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/events.html.ini new file mode 100644 index 00000000000..8bd47801777 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/events.html.ini @@ -0,0 +1,50 @@ +[events.html] + type: testharness + [Constructing pageshow event] + expected: FAIL + + [Constructing pagehide event] + expected: FAIL + + [Constructing pageshow event, persisted true] + expected: FAIL + + [Constructing pagehide event, persisted true] + expected: FAIL + + [Constructing pageshow event, empty options] + expected: FAIL + + [Constructing pagehide event, empty options] + expected: FAIL + + [Constructing pageshow event, missing options] + expected: FAIL + + [Constructing pagehide event, missing options] + expected: FAIL + + [Constructing pageshow event, persisted:null] + expected: FAIL + + [Constructing pagehide event, persisted:null] + expected: FAIL + + [Constructing pageshow event, persisted:undefined] + expected: FAIL + + [Constructing pagehide event, persisted:undefined] + expected: FAIL + + [Constructing pageshow event, bubbles:true] + expected: FAIL + + [Constructing pagehide event, bubbles:true] + expected: FAIL + + [Constructing pageshow event, cancelable:true] + expected: FAIL + + [Constructing pagehide event, cancelable:true] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/hashchange_event.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/hashchange_event.html.ini new file mode 100644 index 00000000000..013f79ec2c8 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/hashchange_event.html.ini @@ -0,0 +1,6 @@ +[hashchange_event.html] + type: testharness + expected: TIMEOUT + [Queue a task to fire hashchange event] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/popstate_event.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/popstate_event.html.ini new file mode 100644 index 00000000000..bbe5b73b922 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/popstate_event.html.ini @@ -0,0 +1,5 @@ +[popstate_event.html] + type: testharness + [Queue a task to fire popstate event] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html.ini new file mode 100644 index 00000000000..fef85273b99 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html.ini @@ -0,0 +1,5 @@ +[unset_context_name-1.html] + type: testharness + [window.name after navigating to a different origin] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/001.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/001.html.ini new file mode 100644 index 00000000000..f02a01ba835 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/001.html.ini @@ -0,0 +1,6 @@ +[001.html] + type: testharness + expected: TIMEOUT + [Cross-origin navigation started from unload handler] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/002.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/002.html.ini new file mode 100644 index 00000000000..aff071a1e63 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/002.html.ini @@ -0,0 +1,6 @@ +[002.html] + type: testharness + expected: TIMEOUT + [Multiple simultaneous navigations] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/003.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/003.html.ini new file mode 100644 index 00000000000..1afb64f0264 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/003.html.ini @@ -0,0 +1,6 @@ +[003.html] + type: testharness + expected: TIMEOUT + [Navigation from unload whilst traversing history] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/004.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/004.html.ini new file mode 100644 index 00000000000..9dc5bc55d56 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/004.html.ini @@ -0,0 +1,6 @@ +[004.html] + type: testharness + expected: TIMEOUT + [Navigation from unload whilst traversing cross-origin history] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini new file mode 100644 index 00000000000..6a14cc88a26 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini @@ -0,0 +1,3 @@ +[005.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/006.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/006.html.ini new file mode 100644 index 00000000000..9701e26d8e9 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/006.html.ini @@ -0,0 +1,3 @@ +[006.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/007.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/007.html.ini new file mode 100644 index 00000000000..d2689f1a8a9 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/007.html.ini @@ -0,0 +1,3 @@ +[007.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini new file mode 100644 index 00000000000..9fbd1fc405a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/008.html.ini @@ -0,0 +1,3 @@ +[008.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/009.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/009.html.ini new file mode 100644 index 00000000000..2633411d86e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/009.html.ini @@ -0,0 +1,3 @@ +[009.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/010.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/010.html.ini new file mode 100644 index 00000000000..4dc31aa432a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/010.html.ini @@ -0,0 +1,3 @@ +[010.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/011.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/011.html.ini new file mode 100644 index 00000000000..7962549aeed --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/011.html.ini @@ -0,0 +1,3 @@ +[011.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/012.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/012.html.ini new file mode 100644 index 00000000000..778e50e98ce --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/012.html.ini @@ -0,0 +1,3 @@ +[012.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/013.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/013.html.ini new file mode 100644 index 00000000000..c23dbc7f626 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/013.html.ini @@ -0,0 +1,5 @@ +[013.html] + type: testharness + [Link with onclick navigation to javascript url with delayed document.write and href navigation ] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/014.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/014.html.ini new file mode 100644 index 00000000000..40237a5a6ac --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/014.html.ini @@ -0,0 +1,5 @@ +[014.html] + type: testharness + [ Link with javascript onclick form submission script order ] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/015.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/015.html.ini new file mode 100644 index 00000000000..b43f666f76a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/015.html.ini @@ -0,0 +1,5 @@ +[015.html] + type: testharness + [ Link with javascript onclick and href script order ] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html.ini new file mode 100644 index 00000000000..fca00e5fc48 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html.ini @@ -0,0 +1,6 @@ +[child_navigates_parent_location.html] + type: testharness + expected: TIMEOUT + [Child document navigating parent via location ] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html.ini new file mode 100644 index 00000000000..ce0a327ae47 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html.ini @@ -0,0 +1,6 @@ +[child_navigates_parent_submit.html] + type: testharness + expected: TIMEOUT + [Child document navigating parent via submit ] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html.ini new file mode 100644 index 00000000000..147039e5d3e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html.ini @@ -0,0 +1,6 @@ +[navigation_unload_data_url.html] + type: testharness + expected: TIMEOUT + [Same-origin navigation started from unload handler] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html.ini new file mode 100644 index 00000000000..e2beb67cb56 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html.ini @@ -0,0 +1,6 @@ +[navigation_unload_same_origin.html] + type: testharness + expected: TIMEOUT + [Same-origin navigation started from unload handler] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/001.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/001.html.ini new file mode 100644 index 00000000000..1f5d9f6e261 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/001.html.ini @@ -0,0 +1,5 @@ +[001.html] + type: testharness + [Fragment Navigation: Updating document address] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/002.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/002.html.ini new file mode 100644 index 00000000000..2e690611068 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/002.html.ini @@ -0,0 +1,5 @@ +[002.html] + type: testharness + [Fragment Navigation: Updating document address twice] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/003.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/003.html.ini new file mode 100644 index 00000000000..23e4a811c3d --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/003.html.ini @@ -0,0 +1,5 @@ +[003.html] + type: testharness + [Fragment Navigation: Updating scroll position] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/004.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/004.html.ini new file mode 100644 index 00000000000..4b321adce13 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/004.html.ini @@ -0,0 +1,6 @@ +[004.html] + type: testharness + expected: TIMEOUT + [Fragment Navigation: hashchange event] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/005.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/005.html.ini new file mode 100644 index 00000000000..1d923794e93 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/005.html.ini @@ -0,0 +1,6 @@ +[005.html] + type: testharness + expected: TIMEOUT + [Fragment Navigation: hashchange event] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/006.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/006.html.ini new file mode 100644 index 00000000000..9f43b5e089c --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/006.html.ini @@ -0,0 +1,6 @@ +[006.html] + type: testharness + expected: TIMEOUT + [Fragment Navigation: hashchange event multiple changes old/newURL] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/007.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/007.html.ini new file mode 100644 index 00000000000..212e307f65e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/scroll-to-fragid/007.html.ini @@ -0,0 +1,6 @@ +[007.html] + type: testharness + expected: TIMEOUT + [Fragment Navigation: hashchange event multiple changes old/newURL] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/assign_after_load.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/assign_after_load.html.ini new file mode 100644 index 00000000000..4d70a77e3a2 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/assign_after_load.html.ini @@ -0,0 +1,6 @@ +[assign_after_load.html] + type: testharness + expected: TIMEOUT + [Assignment to location after document is completely loaded] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/assign_before_load.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/assign_before_load.html.ini new file mode 100644 index 00000000000..0d70e780326 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/assign_before_load.html.ini @@ -0,0 +1,6 @@ +[assign_before_load.html] + type: testharness + expected: TIMEOUT + [Assignment to location before document is completely loaded] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/document_location.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/document_location.html.ini new file mode 100644 index 00000000000..4882ce9565e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/document_location.html.ini @@ -0,0 +1,5 @@ +[document_location.html] + type: testharness + [document not in a browsing context] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location_assign_about_blank.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location_assign_about_blank.html.ini new file mode 100644 index 00000000000..c144ee2f49f --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location_assign_about_blank.html.ini @@ -0,0 +1,5 @@ +[location_assign_about_blank.html] + type: testharness + [location.assign with initial about:blank browsing context] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html.ini new file mode 100644 index 00000000000..8082fc1c15f --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html.ini @@ -0,0 +1,6 @@ +[manual_click_replace_during_load.html] + type: testharness + expected: TIMEOUT + [Assignment to location with click during load] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_open_write.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_open_write.html.ini new file mode 100644 index 00000000000..3581149133b --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_open_write.html.ini @@ -0,0 +1,3 @@ +[reload_document_open_write.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_write.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_write.html.ini new file mode 100644 index 00000000000..ac1b8e161f1 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_write.html.ini @@ -0,0 +1,3 @@ +[reload_document_write.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_write_onload.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_write_onload.html.ini new file mode 100644 index 00000000000..6fcc25bc6fd --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_document_write_onload.html.ini @@ -0,0 +1,3 @@ +[reload_document_write_onload.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_post_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_post_1.html.ini new file mode 100644 index 00000000000..2fe874f0d4e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/reload_post_1.html.ini @@ -0,0 +1,3 @@ +[reload_post_1.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html.ini new file mode 100644 index 00000000000..91e07a6e800 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html.ini @@ -0,0 +1,6 @@ +[scripted_click_assign_during_load.html] + type: testharness + expected: TIMEOUT + [Assignment to location with click during load] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html.ini new file mode 100644 index 00000000000..8f36b5dcbcf --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html.ini @@ -0,0 +1,6 @@ +[scripted_click_location_assign_during_load.html] + type: testharness + expected: TIMEOUT + [location.assign with click during load] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html.ini new file mode 100644 index 00000000000..ff39780cf08 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html.ini @@ -0,0 +1,6 @@ +[scripted_form_submit_assign_during_load.html] + type: testharness + expected: TIMEOUT + [Assignment to location with form submit during load] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html.ini new file mode 100644 index 00000000000..cb2181467b2 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html.ini @@ -0,0 +1,23 @@ +[window_length.html] + type: testharness + [No child browsing contexts] + expected: FAIL + + [iframe not inserted into the document] + expected: FAIL + + [One iframe inserted into the document] + expected: FAIL + + [Child browsing context has a child browsing context] + expected: FAIL + + [window.length in child frame] + expected: FAIL + + [Opened window] + expected: FAIL + + [Iframe in opened window] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html.ini new file mode 100644 index 00000000000..ce4d9304e98 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html.ini @@ -0,0 +1,6 @@ +[close_beforeunload.html] + type: testharness + expected: TIMEOUT + [Running beforeunload handler in window.close()] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html.ini new file mode 100644 index 00000000000..2d59f415319 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html.ini @@ -0,0 +1,5 @@ +[close_script_defer.html] + type: testharness + [Running defer script in window.close()] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html.ini new file mode 100644 index 00000000000..930d7151043 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html.ini @@ -0,0 +1,6 @@ +[close_unload.html] + type: testharness + expected: TIMEOUT + [Running unload handler in window.close()] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html.ini new file mode 100644 index 00000000000..b6c81e5196b --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html.ini @@ -0,0 +1,6 @@ +[discard_iframe_history_1.html] + type: testharness + expected: TIMEOUT + [Removing iframe from document removes it from history] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html.ini new file mode 100644 index 00000000000..74e7c2f251a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html.ini @@ -0,0 +1,6 @@ +[discard_iframe_history_2.html] + type: testharness + expected: TIMEOUT + [Removing iframe from document via innerHTML removes it from history] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html.ini new file mode 100644 index 00000000000..1f29c8de881 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html.ini @@ -0,0 +1,6 @@ +[discard_iframe_history_3.html] + type: testharness + expected: TIMEOUT + [Removing iframe from document removes it from history] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html.ini new file mode 100644 index 00000000000..f46ff721163 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html.ini @@ -0,0 +1,6 @@ +[discard_iframe_history_4.html] + type: testharness + expected: TIMEOUT + [Removing iframe from document removes it from history] + expected: NOTRUN + diff --git a/tests/wpt/metadata/html/browsers/windows/browsing-context-names/001.html.ini b/tests/wpt/metadata/html/browsers/windows/browsing-context-names/001.html.ini new file mode 100644 index 00000000000..b3538369e2e --- /dev/null +++ b/tests/wpt/metadata/html/browsers/windows/browsing-context-names/001.html.ini @@ -0,0 +1,3 @@ +[001.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/windows/browsing-context-names/002.html.ini b/tests/wpt/metadata/html/browsers/windows/browsing-context-names/002.html.ini new file mode 100644 index 00000000000..29a2058d988 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/windows/browsing-context-names/002.html.ini @@ -0,0 +1,3 @@ +[002.html] + type: testharness + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/window-top-001.html.ini b/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/window-top-001.html.ini new file mode 100644 index 00000000000..48afd6931ed --- /dev/null +++ b/tests/wpt/metadata/html/browsers/windows/nested-browsing-contexts/window-top-001.html.ini @@ -0,0 +1,9 @@ +[window-top-001.html] + type: testharness + expected: TIMEOUT + [One nested iframe] + expected: TIMEOUT + + [Two nested iframes] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini index aa73a1bc576..fd1e429124c 100644 --- a/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini +++ b/tests/wpt/metadata/html/dom/documents/dom-tree-accessors/Document.currentScript.sub.html.ini @@ -10,9 +10,6 @@ [Script iframe-src] expected: NOTRUN - [Script cross-origin] - expected: NOTRUN - [Script document-write] expected: NOTRUN diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval.html.ini index 1ef507bb990..bf3a6c1905b 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval.html.ini @@ -1,9 +1,8 @@ [compile-error-cross-origin-setInterval.html] type: testharness - expected: TIMEOUT [window.onerror - compile error in cross-origin setInterval] - expected: NOTRUN + expected: FAIL [window.onerror - compile error in cross-origin setInterval (column)] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout.html.ini index f89461fd6d9..f81f381d0ca 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout.html.ini @@ -1,9 +1,8 @@ [compile-error-cross-origin-setTimeout.html] type: testharness - expected: TIMEOUT [window.onerror - compile error in cross-origin setTimeout] - expected: NOTRUN + expected: FAIL [window.onerror - compile error in cross-origin setTimeout (column)] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html.ini index a828423b265..0bf31cb9ef1 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html.ini @@ -1,9 +1,8 @@ [runtime-error-cross-origin-setInterval.html] type: testharness - expected: TIMEOUT [window.onerror - runtime error in cross-origin setInterval] - expected: NOTRUN + expected: FAIL [window.onerror - runtime error in cross-origin setInterval (column)] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout.html.ini b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout.html.ini index 249096d7932..8b575d9b0d4 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout.html.ini @@ -1,9 +1,8 @@ [runtime-error-cross-origin-setTimeout.html] type: testharness - expected: TIMEOUT [window.onerror - runtime error in cross-origin setTimeout] - expected: NOTRUN + expected: FAIL [window.onerror - runtime error in cross-origin setTimeout (column)] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/mozilla-sync b/tests/wpt/metadata/mozilla-sync index 12d7e965200..30ccc1e6f50 100644 --- a/tests/wpt/metadata/mozilla-sync +++ b/tests/wpt/metadata/mozilla-sync @@ -1 +1 @@ -d588ce8d8503bf0b340abfb13e2bd6a228cab900
\ No newline at end of file +a350b215cc3e943985a66f1485c7eac7f4b9832e
\ No newline at end of file diff --git a/tests/wpt/mozilla/meta/mozilla/navigator.html.ini b/tests/wpt/mozilla/meta/mozilla/navigator.html.ini index ade9b581949..d5874aeb97c 100644 --- a/tests/wpt/mozilla/meta/mozilla/navigator.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/navigator.html.ini @@ -1,12 +1,10 @@ [navigator.html] type: testharness - [navigator.platform linux] expected: if os != "linux": FAIL - PASS [navigator.platform mac] expected: if os != "mac": FAIL - PASS + diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex_openCursor2.htm b/tests/wpt/web-platform-tests/IndexedDB/idbindex_openCursor2.htm index c056abded3e..d39254055f1 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex_openCursor2.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex_openCursor2.htm @@ -20,7 +20,7 @@ e.target.transaction.abort(); - assert_throws("InvalidStateError", function(){ + assert_throws("TransactionInactiveError", function(){ index.openCursor(); }); t.done(); diff --git a/tests/wpt/web-platform-tests/IndexedDB/idbindex_openKeyCursor3.htm b/tests/wpt/web-platform-tests/IndexedDB/idbindex_openKeyCursor3.htm index 1f5fd015590..b4af3172417 100644 --- a/tests/wpt/web-platform-tests/IndexedDB/idbindex_openKeyCursor3.htm +++ b/tests/wpt/web-platform-tests/IndexedDB/idbindex_openKeyCursor3.htm @@ -20,7 +20,7 @@ e.target.transaction.abort(); - assert_throws("InvalidStateError", function(){ + assert_throws("TransactionInactiveError", function(){ index.openKeyCursor(); }); t.done(); diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html new file mode 100644 index 00000000000..2a94692ee15 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<html> + <head> + <title>script-src disallowed wildcard use</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <!-- enforcing policy: +script-src 'nonce-nonce' *; connect-src 'self'; +--> + <script nonce="nonce"> + var t1 = async_test('data: URIs should not match *'); + t1.step(function() { + var script = document.createElement("script"); + script.src = 'data:application/javascript,'; + script.addEventListener('load', t1.step_func(function() { + assert_unreached('Should not successfully load data URI.'); + })); + script.addEventListener('error', t1.step_func(function() { + t1.done(); + })); + document.head.appendChild(script); + }); + + var t2 = async_test('blob: URIs should not match *'); + t2.step(function() { + var b = new Blob([''], { type: 'application/javascript' }); + var script = document.createElement('script'); + script.addEventListener('load', t2.step_func(function() { + assert_unreached('Should not successfully load blob URI.'); + })); + script.addEventListener('error', t2.step_func(function() { + t2.done(); + })); + + script.src = URL.createObjectURL(b); + document.head.appendChild(script); + }); + + var t3 = async_test('filesystem URIs should not match *'); + if (window.webkitRequestFileSystem) { + window.webkitRequestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, function(fs) { + fs.root.getFile('fail.js', {create: true}, function(fileEntry) { + fileEntry.createWriter(function(fileWriter) { + var script = document.createElement('script'); + + script.addEventListener('load', t3.step_func(function() { + assert_unreached('Should not successfully load filesystem URI.'); + })); + script.addEventListener('error', t3.step_func(function() { + t3.done(); + })); + + script.src = fileEntry.toURL('application/javascript'); + document.body.appendChild(script); + }); + }); + }); + } else { + t3.done(); + } + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html.sub.headers new file mode 100644 index 00000000000..cd95439130b --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/script-src-wildcards-disallowed.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: script-src-wildcards-disallowed={{$id:uuid()}}; Path=/content-security-policy/blink-contrib-2 +Content-Security-Policy: script-src 'nonce-nonce' *; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html new file mode 100644 index 00000000000..a11a224ae11 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html> + <head> + <title>script-hash allowed from default-src</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + + <script>done();</script> + </head> + + <body> + <div id="log"></div> + <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html.sub.headers new file mode 100644 index 00000000000..d8893af4129 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/scripthash-default-src.sub.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: scripthash-default-src={{$id:uuid()}}; Path=/content-security-policy/blink-contrib-2 +Content-Security-Policy: default-src 'self' 'sha256-sc3CeiHrlck5tH2tTC4MnBYFnI9D5zp8f9odqnmGQjE='; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html new file mode 100644 index 00000000000..683558e2958 --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> + <head> + <title>stylehash allowed from default-src</title> + <script src="../../../resources/testharness.js"></script> + <script src="../../../resources/testharnessreport.js"></script> + </head> + + <body> + <p id="p">Test</p> + <style>p#p { color: green; }</style> + <script> + var color = window.getComputedStyle(document.querySelector('#p')).color; + assert_equals(color, "rgb(0, 128, 0)"); + done(); + </script> + + <div id="log"></div> + <script async defer src="../support/checkReport.sub.js?reportExists=false"></script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html.sub.headers new file mode 100644 index 00000000000..8efe9d965ef --- /dev/null +++ b/tests/wpt/web-platform-tests/content-security-policy/blink-contrib-2/stylehash-default-src.sub.html.sub.headers @@ -0,0 +1,6 @@ +Expires: Mon, 26 Jul 1997 05:00:00 GMT +Cache-Control: no-store, no-cache, must-revalidate +Cache-Control: post-check=0, pre-check=0, false +Pragma: no-cache +Set-Cookie: stylehash-default-src={{$id:uuid()}}; Path=/content-security-policy/blink-contrib-2 +Content-Security-Policy: default-src 'self' 'sha256-SXMrww9+PS7ymkxYbv91id+HfXeO7p1uCY0xhNb4MIw='; script-src 'self' 'unsafe-inline'; connect-src 'self'; report-uri /content-security-policy/support/report.py?op=put&reportID={{$id}} diff --git a/tests/wpt/web-platform-tests/dom/historical.html b/tests/wpt/web-platform-tests/dom/historical.html index 6c02ecbd5cc..727a9e73e5c 100644 --- a/tests/wpt/web-platform-tests/dom/historical.html +++ b/tests/wpt/web-platform-tests/dom/historical.html @@ -47,7 +47,6 @@ var documentNuked = [ "domConfig", "normalizeDocument", "renameNode", - "charset", "defaultCharset", "height", "width" diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-createAttribute.html b/tests/wpt/web-platform-tests/dom/nodes/Document-createAttribute.html index a95737387c1..b5afa6ed788 100644 --- a/tests/wpt/web-platform-tests/dom/nodes/Document-createAttribute.html +++ b/tests/wpt/web-platform-tests/dom/nodes/Document-createAttribute.html @@ -7,20 +7,37 @@ <script src=productions.js></script> <div id=log> <script> +var xml_document; +setup(function() { + xml_document = document.implementation.createDocument(null, null, null); +}); + invalid_names.forEach(function(name) { test(function() { assert_throws("INVALID_CHARACTER_ERR", function() { document.createAttribute(name, "test"); }); - }, "createAttribute(" + format_value(name) + ")"); + }, "HTML document.createAttribute(" + format_value(name) + ")"); + + test(function() { + assert_throws("INVALID_CHARACTER_ERR", function() { + xml_document.createAttribute(name, "test"); + }); + }, "XML document.createAttribute(" + format_value(name) + ")"); }); var tests = ["title", "TITLE", null, undefined]; tests.forEach(function(name) { test(function() { var attribute = document.createAttribute(name); + attr_is(attribute, "", String(name).toLowerCase(), null, null, String(name).toLowerCase()); + assert_equals(attribute.ownerElement, null); + }, "HTML document.createAttribute(" + format_value(name) + ")"); + + test(function() { + var attribute = xml_document.createAttribute(name); attr_is(attribute, "", String(name), null, null, String(name)); assert_equals(attribute.ownerElement, null); - }, "createAttribute(" + format_value(name) + ")"); + }, "XML document.createAttribute(" + format_value(name) + ")"); }); </script> diff --git a/tests/wpt/web-platform-tests/domxpath/xml_xpath_runner.html b/tests/wpt/web-platform-tests/domxpath/xml_xpath_runner.html new file mode 100644 index 00000000000..a9bbb158807 --- /dev/null +++ b/tests/wpt/web-platform-tests/domxpath/xml_xpath_runner.html @@ -0,0 +1,51 @@ +<!doctype html> +<title>XPath tests</title> +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> +<script> +setup({ explicit_done: true }); + +function find_child_element(context, element) { + for (var i = 0; i < context.childNodes.length; i++) { + var child = context.childNodes[i]; + if (child.nodeType === Node.ELEMENT_NODE && child.tagName === element) + return child; + } +} + +function xpath_test(test_el) { + /* note this func adopts the tree! */ + var new_doc = document.implementation.createDocument("", ""); + var xpath = find_child_element(test_el, "xpath"); + var tree = find_child_element(test_el, "tree"); + var actual_tree = new_doc.adoptNode(tree.firstElementChild); + new_doc.appendChild(actual_tree); + test(function() { + var result = new_doc.evaluate(xpath.textContent, // expression + actual_tree, // context node + new_doc.createNSResolver(actual_tree), // resolver + XPathResult.ANY_TYPE, // type + null); // result + var matched = []; + var cur; + while ((cur = result.iterateNext()) !== null) { + matched.push(cur); + } + assert_equals(matched.length, 1, "Should match one node"); + }); +} + +var xhr = new XMLHttpRequest(); +xhr.open("GET", "xml_xpath_tests.xml"); +xhr.onload = function(e) { + var tests = xhr.responseXML.documentElement; + for (var i = 0; i < tests.childNodes.length; i++) { + var child = tests.childNodes[i]; + if (child.nodeType === Node.ELEMENT_NODE) { + xpath_test(child); + } + } + done(); +}; +xhr.send(); +</script> diff --git a/tests/wpt/web-platform-tests/domxpath/xml_xpath_tests.xml b/tests/wpt/web-platform-tests/domxpath/xml_xpath_tests.xml new file mode 100644 index 00000000000..e40bb5b6d35 --- /dev/null +++ b/tests/wpt/web-platform-tests/domxpath/xml_xpath_tests.xml @@ -0,0 +1,29799 @@ +<!-- These tests check whether <xpath> matches the <tree>; they make + no statement as to *what* gets matched. New tests should be added + to the end of this document; there is no other form of ID for the + tests except for their order. --> + +<tests> + <test> + <xpath>//mu[@xml:id="id1"]//rho[@title][@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::rho[@object="this.nodeValue"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@object][@xml:lang="no-nb"][not(child::node())][following-sibling::alpha[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[starts-with(concat(@content,"-"),"_blank-")][not(following-sibling::*)]/iota[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::zeta[@insert][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/lambda[@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::delta[contains(concat(@object,"$"),"se$")][preceding-sibling::*[position() = 1]]//mu[@attrib][@xml:lang="en-GB"]/omicron[contains(concat(@false,"$"),"lse$")][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:id="id9"][not(following-sibling::*)]/rho[contains(concat(@attr,"$"),"100%$")][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::*[@xml:lang="en-US"][@xml:id="id10"][not(child::node())][following-sibling::alpha[contains(concat(@att,"$"),"rue$")][following-sibling::omicron[@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//omicron[contains(concat(@abort,"$"),"tt-value$")][@xml:lang="en"]/upsilon[starts-with(concat(@string,"-"),"100%-")][@xml:lang="no-nb"][@xml:id="id12"]]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <mu xml:id="id1"> + <rho title="123456789" xml:lang="en-GB"/> + <rho object="this.nodeValue" xml:id="id2"> + <epsilon object="solid 1px green" xml:lang="no-nb"/> + <alpha xml:lang="no" xml:id="id3"/> + <phi content="_blank"> + <iota xml:lang="no" xml:id="id4"/> + <psi xml:lang="en" xml:id="id5"/> + <zeta insert="true" xml:lang="en-GB" xml:id="id6"> + <lambda xml:lang="en" xml:id="id7"/> + <delta object="false"> + <mu attrib="another attribute value" xml:lang="en-GB"> + <omicron false="false" xml:id="id8"/> + <beta xml:id="id9"> + <rho attr="100%"/> + <tau xml:lang="no"/> + <any xml:lang="en-US" xml:id="id10"/> + <alpha att="true"/> + <omicron xml:lang="no" xml:id="id11"> + <omicron abort="this-is-att-value" xml:lang="en"> + <upsilon string="100%" xml:lang="no-nb" xml:id="id12"> + <green>This text must be green</green> + </upsilon> + </omicron> + </omicron> + </beta> + </mu> + </delta> + </zeta> + </phi> + </rho> + </mu> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="no"][@xml:id="id1"]//iota[@attribute][@xml:id="id2"][not(following-sibling::*)]/phi[@object][@xml:id="id3"][not(following-sibling::*)]//pi[starts-with(concat(@number,"-"),"another attribute value-")][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:id="id4"][not(preceding-sibling::*)]/xi[@xml:id="id5"]/eta[@insert][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::nu[following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@desciption][@xml:id="id8"]/kappa[not(preceding-sibling::*)]/beta[starts-with(concat(@insert,"-"),"100%-")][not(child::node())][following-sibling::eta[starts-with(concat(@token,"-"),"content-")][not(following-sibling::*)]//pi[@and="_blank"][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:id="id10"]/psi[starts-with(@and,"another attribut")][@xml:lang="en"][@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@title="attribute"][following-sibling::eta[@or="solid 1px green"][@xml:id="id12"][following-sibling::lambda[@xml:lang="no"][@xml:id="id13"][following-sibling::theta[@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/epsilon[@object][@xml:id="id14"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <pi xml:lang="no" xml:id="id1"> + <iota attribute="this-is-att-value" xml:id="id2"> + <phi object="attribute-value" xml:id="id3"> + <pi number="another attribute value"> + <xi xml:id="id4"> + <xi xml:id="id5"> + <eta insert="another attribute value" xml:lang="en" xml:id="id6"/> + <omega xml:lang="no-nb" xml:id="id7"/> + <nu/> + <phi desciption="_blank" xml:id="id8"> + <kappa> + <beta insert="100%"/> + <eta token="content"> + <pi and="_blank" xml:lang="no" xml:id="id9"/> + <eta xml:id="id10"> + <psi and="another attribute value" xml:lang="en" xml:id="id11"/> + <omega title="attribute"/> + <eta or="solid 1px green" xml:id="id12"/> + <lambda xml:lang="no" xml:id="id13"/> + <theta xml:lang="nb"> + <epsilon object="123456789" xml:id="id14"> + <green>This text must be green</green> + </epsilon> + </theta> + </eta> + </eta> + </kappa> + </phi> + </xi> + </xi> + </pi> + </phi> + </iota> + </pi> + </tree> + </test> + <test> + <xpath>//pi[starts-with(@attribute,"attribute val")][@xml:lang="en-US"][@xml:id="id1"]/upsilon[starts-with(concat(@attribute,"-"),"this.nodeValue-")][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]/epsilon[following-sibling::epsilon[contains(@attrib,"10")][preceding-sibling::*[position() = 1]][following-sibling::xi[preceding-sibling::*[position() = 2]]//lambda[@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::eta[@insert][preceding-sibling::*[position() = 1]][following-sibling::omega[@token][@xml:lang="nb"][not(child::node())][following-sibling::kappa[starts-with(concat(@object,"-"),"this.nodeValue-")][@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::xi[contains(@true,"e")][@xml:id="id5"][not(child::node())][following-sibling::phi[@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::nu[following-sibling::*[position()=1]][following-sibling::zeta[starts-with(concat(@object,"-"),"attribute-")]//kappa[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::chi[@xml:lang="nb"][following-sibling::theta[@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::xi[contains(concat(@name,"$"),"789$")][@xml:lang="no"]/tau[@xml:lang="en"][not(preceding-sibling::*)]/beta[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <pi attribute="attribute value" xml:lang="en-US" xml:id="id1"> + <upsilon attribute="this.nodeValue"> + <xi xml:lang="no-nb" xml:id="id2"> + <epsilon/> + <epsilon attrib="100%"/> + <xi> + <lambda xml:lang="en" xml:id="id3"/> + <eta insert="false"/> + <omega token="content" xml:lang="nb"/> + <kappa object="this.nodeValue" xml:lang="no-nb" xml:id="id4"/> + <xi true="true" xml:id="id5"/> + <phi xml:lang="nb" xml:id="id6"/> + <nu/> + <zeta object="attribute"> + <kappa xml:lang="nb"/> + <chi xml:lang="nb"/> + <theta xml:lang="no"/> + <xi name="123456789" xml:lang="no"> + <tau xml:lang="en"> + <beta xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </beta> + </tau> + </xi> + </zeta> + </xi> + </xi> + </upsilon> + </pi> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]/xi[@src][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]//eta[not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:id="id3"][not(child::node())][following-sibling::omega[starts-with(@name,"this.nodeVal")]//rho[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[contains(@attrib," gree")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[starts-with(concat(@insert,"-"),"100%-")][@xml:lang="no"][not(following-sibling::*)]/gamma[starts-with(@attrib,"attribu")][@xml:lang="en-GB"][not(child::node())][following-sibling::delta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::sigma[starts-with(concat(@number,"-"),"_blank-")][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::omega[starts-with(concat(@false,"-"),"this-")][not(following-sibling::*)]/epsilon[starts-with(concat(@true,"-"),"attribute-")]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <rho xml:id="id1"> + <xi src="_blank" xml:lang="nb" xml:id="id2"> + <eta> + <mu xml:id="id3"/> + <omega name="this.nodeValue"> + <rho/> + <nu attrib="solid 1px green"> + <lambda insert="100%" xml:lang="no"> + <gamma attrib="attribute" xml:lang="en-GB"/> + <delta xml:lang="en-US"/> + <sigma number="_blank"/> + <omega false="this-is-att-value"> + <epsilon true="attribute-value"> + <green>This text must be green</green> + </epsilon> + </omega> + </lambda> + </nu> + </omega> + </eta> + </xi> + </rho> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="no-nb"]//tau[@attr][not(preceding-sibling::*)]/alpha[@xml:lang="en-GB"][following-sibling::*[position()=6]][not(child::node())][following-sibling::phi[starts-with(@number,"attribute val")][preceding-sibling::*[position() = 1]][following-sibling::psi[preceding-sibling::*[position() = 2]][following-sibling::phi[not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id1"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::zeta[@number][@xml:id="id2"][preceding-sibling::*[position() = 5]][following-sibling::psi[@attrib][@xml:id="id3"][preceding-sibling::*[position() = 6]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <rho xml:lang="no-nb"> + <tau attr="attribute value"> + <alpha xml:lang="en-GB"/> + <phi number="attribute value"/> + <psi/> + <phi/> + <psi xml:lang="no" xml:id="id1"/> + <zeta number="this-is-att-value" xml:id="id2"/> + <psi attrib="attribute value" xml:id="id3"> + <green>This text must be green</green> + </psi> + </tau> + </rho> + </tree> + </test> + <test> + <xpath>//sigma[@and][@xml:id="id1"]/beta[@name][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@xml:id="id3"][not(following-sibling::*)]//beta[following-sibling::*[position()=3]][not(child::node())][following-sibling::theta[not(child::node())][following-sibling::eta[contains(concat(@object,"$"),"rue$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[contains(concat(@data,"$"),"ttribute-value$")][@xml:id="id4"][not(following-sibling::omicron)]/alpha[@xml:lang="no"][@xml:id="id5"][following-sibling::kappa[@token="content"][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]</xpath> + <tree> + <sigma and="_blank" xml:id="id1"> + <beta name="content" xml:lang="en" xml:id="id2"> + <tau xml:id="id3"> + <beta/> + <theta/> + <eta object="true"/> + <omicron data="attribute-value" xml:id="id4"> + <alpha xml:lang="no" xml:id="id5"/> + <kappa token="content" xml:lang="no" xml:id="id6"> + <green>This text must be green</green> + </kappa> + </omicron> + </tau> + </beta> + </sigma> + </tree> + </test> + <test> + <xpath>//lambda/kappa[contains(@false,"attribut")][@xml:id="id1"]/rho[starts-with(concat(@object,"-"),"false-")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::chi[@content][not(following-sibling::*)]/beta[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)]/psi[contains(concat(@and,"$"),"bute value$")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::alpha[starts-with(concat(@insert,"-"),"attribute-")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//kappa[@title][@xml:id="id6"][not(following-sibling::*)]//epsilon[contains(concat(@attrib,"$"),"e$")][@xml:id="id7"][not(child::node())][following-sibling::xi[@number][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omicron[@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//theta[@xml:lang="no-nb"][@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:id="id11"][not(following-sibling::*)]/rho[starts-with(@delete,"c")][@xml:id="id12"][following-sibling::alpha[@name][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::phi[@abort][@xml:lang="nb"][@xml:id="id13"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <lambda> + <kappa false="attribute" xml:id="id1"> + <rho object="false" xml:id="id2"/> + <chi content="content"> + <beta xml:lang="no" xml:id="id3"> + <psi and="attribute value" xml:id="id4"/> + <alpha insert="attribute" xml:lang="no-nb" xml:id="id5"> + <kappa title="another attribute value" xml:id="id6"> + <epsilon attrib="true" xml:id="id7"/> + <xi number="true" xml:id="id8"/> + <omicron xml:id="id9"> + <theta xml:lang="no-nb" xml:id="id10"/> + <tau xml:lang="en"/> + <omega xml:id="id11"> + <rho delete="content" xml:id="id12"/> + <alpha name="true" xml:lang="no-nb"/> + <phi abort="100%" xml:lang="nb" xml:id="id13"> + <green>This text must be green</green> + </phi> + </omega> + </omicron> + </kappa> + </alpha> + </beta> + </chi> + </kappa> + </lambda> + </tree> + </test> + <test> + <xpath>//phi[@attr="100%"]//beta[contains(concat(@delete,"$"),"k$")][@xml:lang="en"][not(preceding-sibling::*)]/phi[not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:lang="en-GB"][not(following-sibling::*)]//kappa[following-sibling::nu[@name][following-sibling::*[position()=3]][following-sibling::*[@name][not(child::node())][following-sibling::sigma[starts-with(concat(@token,"-"),"another attribute value-")][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::lambda[@xml:id="id1"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/rho[contains(concat(@class,"$"),"123456789$")][not(preceding-sibling::*)][following-sibling::epsilon[@xml:lang="nb"][@xml:id="id2"]/xi//beta[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[starts-with(@abort,"fa")][@xml:id="id4"][following-sibling::phi[@true][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::nu[@string="another attribute value"][@xml:lang="no"][@xml:id="id6"][not(following-sibling::*)]/phi[contains(concat(@token,"$"),"1px green$")][not(preceding-sibling::*)]/theta[@xml:lang="no-nb"][not(following-sibling::*)]//lambda[@attr][not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::lambda)]/*[following-sibling::*[position()=1]][following-sibling::psi[contains(concat(@desciption,"$"),"n$")][@xml:id="id7"][preceding-sibling::*[position() = 1]]//theta[contains(@src,"ue")][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <phi attr="100%"> + <beta delete="_blank" xml:lang="en"> + <phi> + <iota xml:lang="en-GB"> + <kappa/> + <nu name="this-is-att-value"/> + <any name="this.nodeValue"/> + <sigma token="another attribute value"/> + <lambda xml:id="id1"> + <rho class="123456789"/> + <epsilon xml:lang="nb" xml:id="id2"> + <xi> + <beta xml:lang="en-US" xml:id="id3"/> + <epsilon abort="false" xml:id="id4"/> + <phi true="attribute-value" xml:id="id5"/> + <nu string="another attribute value" xml:lang="no" xml:id="id6"> + <phi token="solid 1px green"> + <theta xml:lang="no-nb"> + <lambda attr="100%"> + <any/> + <psi desciption="solid 1px green" xml:id="id7"> + <theta src="attribute value" xml:id="id8"> + <green>This text must be green</green> + </theta> + </psi> + </lambda> + </theta> + </phi> + </nu> + </xi> + </epsilon> + </lambda> + </iota> + </phi> + </beta> + </phi> + </tree> + </test> + <test> + <xpath>//gamma[starts-with(@data,"tr")][@xml:lang="no"][@xml:id="id1"]//omicron[starts-with(concat(@class,"-"),"attribute value-")]/rho[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@xml:lang="no"][@xml:id="id2"]//omega[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[starts-with(@object,"conten")][preceding-sibling::*[position() = 2]][following-sibling::zeta[preceding-sibling::*[position() = 3]][following-sibling::omicron[@object][@xml:lang="en-GB"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::mu[contains(@delete,"_b")][@xml:lang="no"][@xml:id="id4"][following-sibling::pi[@xml:lang="no"][not(following-sibling::*)]/alpha[@desciption][@xml:lang="en-US"][not(child::node())][following-sibling::upsilon[contains(concat(@attribute,"$"),"eValue$")][@xml:lang="en-GB"][not(following-sibling::*)]/phi[starts-with(@title,"solid 1p")][@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)][not(preceding-sibling::phi)]/epsilon[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::alpha[@token][@xml:lang="en-US"][@xml:id="id6"][following-sibling::rho[@xml:id="id7"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <gamma data="true" xml:lang="no" xml:id="id1"> + <omicron class="attribute value"> + <rho xml:lang="no-nb"> + <rho xml:lang="no" xml:id="id2"> + <omega xml:lang="no-nb" xml:id="id3"/> + <theta xml:lang="no-nb"/> + <delta object="content"/> + <zeta/> + <omicron object="100%" xml:lang="en-GB"/> + <mu delete="_blank" xml:lang="no" xml:id="id4"/> + <pi xml:lang="no"> + <alpha desciption="100%" xml:lang="en-US"/> + <upsilon attribute="this.nodeValue" xml:lang="en-GB"> + <phi title="solid 1px green" xml:lang="en-US" xml:id="id5"> + <epsilon xml:lang="no-nb"/> + <alpha token="content" xml:lang="en-US" xml:id="id6"/> + <rho xml:id="id7"> + <green>This text must be green</green> + </rho> + </phi> + </upsilon> + </pi> + </rho> + </rho> + </omicron> + </gamma> + </tree> + </test> + <test> + <xpath>//mu/iota[starts-with(concat(@desciption,"-"),"attribute-")][not(child::node())][following-sibling::lambda[contains(concat(@or,"$"),"tribute-value$")][@xml:id="id1"][preceding-sibling::*[position() = 1]]//pi[starts-with(concat(@name,"-"),"false-")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::sigma[@name][not(child::node())][following-sibling::mu[following-sibling::zeta[@true][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][following-sibling::tau[starts-with(@abort,"_bl")][@xml:id="id4"][not(child::node())][following-sibling::delta[contains(@token,"soli")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 5]]//mu[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::nu[@att="attribute value"][@xml:id="id6"][preceding-sibling::*[position() = 1]]][position() = 1]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <mu> + <iota desciption="attribute-value"/> + <lambda or="attribute-value" xml:id="id1"> + <pi name="false" xml:id="id2"/> + <sigma name="another attribute value"/> + <mu/> + <zeta true="attribute-value" xml:lang="en-US" xml:id="id3"/> + <tau abort="_blank" xml:id="id4"/> + <delta token="solid 1px green" xml:lang="no-nb" xml:id="id5"> + <mu xml:lang="nb"/> + <nu att="attribute value" xml:id="id6"> + <green>This text must be green</green> + </nu> + </delta> + </lambda> + </mu> + </tree> + </test> + <test> + <xpath>//*[starts-with(concat(@attribute,"-"),"attribute-")][@xml:lang="nb"]/theta[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[not(following-sibling::*)]/phi[@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]//pi[contains(concat(@attribute,"$"),"another attribute value$")][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]//eta[starts-with(@desciption,"another attribu")][@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]</xpath> + <tree> + <any attribute="attribute" xml:lang="nb"> + <theta xml:lang="no" xml:id="id1"> + <zeta> + <phi xml:lang="no" xml:id="id2"> + <pi attribute="another attribute value" xml:lang="en-US" xml:id="id3"> + <eta desciption="another attribute value" xml:lang="no" xml:id="id4"> + <green>This text must be green</green> + </eta> + </pi> + </phi> + </zeta> + </theta> + </any> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(concat(@object,"-"),"100%-")][@xml:lang="en-GB"]//alpha[following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@content][@xml:id="id1"][preceding-sibling::*[position() = 1]]//upsilon[following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[@class][not(child::node())][following-sibling::epsilon[@desciption][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//iota[@name="attribute-value"][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[contains(concat(@object,"$"),"nodeValue$")][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]]</xpath> + <tree> + <omicron object="100%" xml:lang="en-GB"> + <alpha/> + <omega content="this.nodeValue" xml:id="id1"> + <upsilon/> + <epsilon class="false"/> + <epsilon desciption="attribute value" xml:lang="no-nb"> + <iota name="attribute-value" xml:lang="en-US"/> + <delta xml:lang="no-nb" xml:id="id2"> + <upsilon object="this.nodeValue"> + <alpha xml:lang="no"> + <green>This text must be green</green> + </alpha> + </upsilon> + </delta> + </epsilon> + </omega> + </omicron> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]//kappa[@xml:id="id2"][following-sibling::alpha[@xml:id="id3"]/nu[contains(@content,"%")][@xml:lang="en-GB"][following-sibling::*[position()=3]][not(child::node())][following-sibling::alpha[@object][@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:id="id5"][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 3]]//omicron[starts-with(concat(@desciption,"-"),"solid 1px green-")][@xml:lang="en-GB"][@xml:id="id6"]/epsilon[contains(@class,"ank")][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="nb"][following-sibling::kappa[@xml:lang="en-GB"][following-sibling::chi[starts-with(@att,"a")][@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::tau[starts-with(concat(@data,"-"),"content-")][preceding-sibling::*[position() = 4]]/delta[contains(concat(@attr,"$"),"89$")][not(child::node())][following-sibling::rho[@xml:id="id9"][following-sibling::alpha[not(following-sibling::*)]//iota[not(following-sibling::*)]//eta/lambda[@xml:lang="en"][not(child::node())][following-sibling::epsilon[starts-with(@object,"t")][@xml:lang="no"][@xml:id="id10"][following-sibling::gamma[@or][@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 2]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <zeta xml:id="id1"> + <kappa xml:id="id2"/> + <alpha xml:id="id3"> + <nu content="100%" xml:lang="en-GB"/> + <alpha object="this-is-att-value" xml:lang="en-US" xml:id="id4"/> + <theta xml:id="id5"/> + <eta> + <omicron desciption="solid 1px green" xml:lang="en-GB" xml:id="id6"> + <epsilon class="_blank" xml:id="id7"/> + <rho xml:lang="nb"/> + <kappa xml:lang="en-GB"/> + <chi att="another attribute value" xml:id="id8"/> + <tau data="content"> + <delta attr="123456789"/> + <rho xml:id="id9"/> + <alpha> + <iota> + <eta> + <lambda xml:lang="en"/> + <epsilon object="true" xml:lang="no" xml:id="id10"/> + <gamma or="attribute-value" xml:lang="nb" xml:id="id11"> + <green>This text must be green</green> + </gamma> + </eta> + </iota> + </alpha> + </tau> + </omicron> + </eta> + </alpha> + </zeta> + </tree> + </test> + <test> + <xpath>//omega[starts-with(concat(@desciption,"-"),"attribute-")][@xml:lang="en"][@xml:id="id1"]/upsilon[@xml:id="id2"][not(preceding-sibling::*)]//kappa[@abort="this.nodeValue"][@xml:id="id3"][not(preceding-sibling::*)]//chi[@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]//phi[@xml:id="id5"][not(following-sibling::*)]/omega[contains(concat(@false,"$"),"te$")][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]</xpath> + <tree> + <omega desciption="attribute-value" xml:lang="en" xml:id="id1"> + <upsilon xml:id="id2"> + <kappa abort="this.nodeValue" xml:id="id3"> + <chi xml:lang="no" xml:id="id4"> + <phi xml:id="id5"> + <omega false="attribute"> + <sigma xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </sigma> + </omega> + </phi> + </chi> + </kappa> + </upsilon> + </omega> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]//chi[starts-with(concat(@true,"-"),"content-")][following-sibling::upsilon[contains(@abort,"6789")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]//pi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:id="id3"][preceding-sibling::*[position() = 1]]/gamma[not(preceding-sibling::*)][not(following-sibling::*)]]]</xpath> + <tree> + <mu xml:id="id1"> + <chi true="content"/> + <upsilon abort="123456789"> + <delta xml:lang="en" xml:id="id2"> + <pi xml:lang="no-nb"/> + <eta xml:id="id3"> + <gamma> + <green>This text must be green</green> + </gamma> + </eta> + </delta> + </upsilon> + </mu> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]//theta[contains(concat(@number,"$"),"bute value$")][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[@xml:id="id2"][not(preceding-sibling::*)]/theta[starts-with(concat(@abort,"-"),"solid 1px green-")][@xml:lang="en-US"][following-sibling::upsilon[starts-with(@number,"c")][@xml:lang="no-nb"][@xml:id="id3"]//zeta[starts-with(@attrib,"100")][@xml:lang="en-US"][not(child::node())][following-sibling::chi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::eta[@xml:id="id4"]//theta[starts-with(concat(@name,"-"),"123456789-")][not(following-sibling::*)]/zeta[@xml:id="id5"]//rho[@xml:lang="no-nb"][@xml:id="id6"][not(child::node())][following-sibling::mu[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi//iota[@xml:lang="no"][@xml:id="id8"]/zeta[@xml:id="id9"][following-sibling::delta[@desciption][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::theta[starts-with(concat(@insert,"-"),"_blank-")][@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 2]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi xml:id="id1"> + <theta number="attribute value"> + <gamma xml:id="id2"> + <theta abort="solid 1px green" xml:lang="en-US"/> + <upsilon number="content" xml:lang="no-nb" xml:id="id3"> + <zeta attrib="100%" xml:lang="en-US"/> + <chi xml:lang="no-nb"/> + <eta xml:id="id4"> + <theta name="123456789"> + <zeta xml:id="id5"> + <rho xml:lang="no-nb" xml:id="id6"/> + <mu xml:lang="no" xml:id="id7"/> + <phi> + <iota xml:lang="no" xml:id="id8"> + <zeta xml:id="id9"/> + <delta desciption="123456789" xml:lang="nb"/> + <theta insert="_blank" xml:lang="no" xml:id="id10"> + <green>This text must be green</green> + </theta> + </iota> + </phi> + </zeta> + </theta> + </eta> + </upsilon> + </gamma> + </theta> + </psi> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(concat(@att,"-"),"solid 1px green-")][@xml:id="id1"]//lambda[@attribute][@xml:id="id2"][not(following-sibling::*)]//omicron[contains(concat(@abort,"$"),"e$")][not(child::node())][following-sibling::zeta[@xml:lang="nb"][preceding-sibling::*[position() = 1]]//sigma[starts-with(concat(@token,"-"),"this.nodeValue-")][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]/phi[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@false="attribute value"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::eta[starts-with(@token,"123456789")][@xml:lang="no"][@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha]]]</xpath> + <tree> + <zeta att="solid 1px green" xml:id="id1"> + <lambda attribute="another attribute value" xml:id="id2"> + <omicron abort="attribute value"/> + <zeta xml:lang="nb"> + <sigma token="this.nodeValue" xml:lang="en-US" xml:id="id3"> + <phi xml:lang="no" xml:id="id4"> + <nu false="attribute value" xml:id="id5"/> + <eta token="123456789" xml:lang="no" xml:id="id6"/> + <alpha> + <green>This text must be green</green> + </alpha> + </phi> + </sigma> + </zeta> + </lambda> + </zeta> + </tree> + </test> + <test> + <xpath>//delta//alpha[@xml:lang="no-nb"][not(preceding-sibling::*)]//tau[@object][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[contains(concat(@and,"$"),"00%$")][@xml:lang="nb"]//rho[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::eta[@xml:id="id2"]/rho[starts-with(@abort,"this-is-")][@xml:id="id3"][not(preceding-sibling::*)]/rho[not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:lang="no"][not(following-sibling::*)]//gamma[not(child::node())][following-sibling::omega[@attribute][@xml:lang="no-nb"][@xml:id="id4"]/kappa[@attrib][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en"][@xml:id="id5"][not(child::node())][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::pi[@xml:lang="en"][@xml:id="id7"]//sigma[starts-with(@att,"123")][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=5]][following-sibling::kappa[contains(@attr,"bute value")][@xml:lang="no-nb"][@xml:id="id9"][not(child::node())][following-sibling::alpha[@and="attribute value"][@xml:id="id10"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::lambda[preceding-sibling::*[position() = 3]][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id11"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::omicron[@xml:lang="no-nb"][@xml:id="id12"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <delta> + <alpha xml:lang="no-nb"> + <tau object="another attribute value"/> + <beta and="100%" xml:lang="nb"> + <rho xml:lang="en" xml:id="id1"/> + <eta xml:id="id2"> + <rho abort="this-is-att-value" xml:id="id3"> + <rho> + <iota xml:lang="no"> + <gamma/> + <omega attribute="attribute" xml:lang="no-nb" xml:id="id4"> + <kappa attrib="content" xml:lang="en-US"/> + <omicron xml:lang="en" xml:id="id5"/> + <lambda xml:lang="en-US" xml:id="id6"/> + <pi xml:lang="en" xml:id="id7"> + <sigma att="123456789" xml:id="id8"/> + <kappa attr="another attribute value" xml:lang="no-nb" xml:id="id9"/> + <alpha and="attribute value" xml:id="id10"/> + <lambda/> + <rho xml:lang="en-GB" xml:id="id11"/> + <omicron xml:lang="no-nb" xml:id="id12"> + <green>This text must be green</green> + </omicron> + </pi> + </omega> + </iota> + </rho> + </rho> + </eta> + </beta> + </alpha> + </delta> + </tree> + </test> + <test> + <xpath>//mu[@xml:lang="no"]/tau[contains(@data,"value")][@xml:lang="no"][not(child::node())][following-sibling::kappa[@att][not(following-sibling::*)]//delta[starts-with(@attrib,"100")][@xml:lang="en"][@xml:id="id1"]//omega[@xml:lang="en-GB"][@xml:id="id2"]/epsilon[@delete][following-sibling::sigma[@xml:id="id3"]/nu[starts-with(@token,"a")][not(preceding-sibling::*)]/rho[contains(concat(@delete,"$"),"00%$")][@xml:lang="no"][@xml:id="id4"]][position() = 1]]</xpath> + <tree> + <mu xml:lang="no"> + <tau data="attribute-value" xml:lang="no"/> + <kappa att="attribute"> + <delta attrib="100%" xml:lang="en" xml:id="id1"> + <omega xml:lang="en-GB" xml:id="id2"> + <epsilon delete="content"/> + <sigma xml:id="id3"> + <nu token="attribute value"> + <rho delete="100%" xml:lang="no" xml:id="id4"> + <green>This text must be green</green> + </rho> + </nu> + </sigma> + </omega> + </delta> + </kappa> + </mu> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(concat(@object,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id1"]//pi[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)]/eta[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::eta)]/rho[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::pi[@desciption]/epsilon[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@att="true"][following-sibling::psi[starts-with(@abort,"attribute")][@xml:id="id6"][position() = 1]]][position() = 1]]</xpath> + <tree> + <zeta object="this.nodeValue" xml:lang="nb" xml:id="id1"> + <pi xml:lang="en-US" xml:id="id2"> + <eta xml:lang="nb"> + <rho xml:id="id3"/> + <pi desciption="attribute value"> + <epsilon xml:id="id4"> + <delta xml:lang="no-nb" xml:id="id5"/> + <epsilon att="true"/> + <psi abort="attribute-value" xml:id="id6"> + <green>This text must be green</green> + </psi> + </epsilon> + </pi> + </eta> + </pi> + </zeta> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(concat(@src,"-"),"this-")][@xml:id="id1"]/chi[@attrib][@xml:lang="nb"][following-sibling::eta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@xml:lang="no-nb"][not(following-sibling::*)]//kappa[@and][not(preceding-sibling::*)]//mu[@string][@xml:id="id3"][not(following-sibling::*)]//tau[@name][@xml:lang="en"][@xml:id="id4"][following-sibling::upsilon[not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <upsilon src="this-is-att-value" xml:id="id1"> + <chi attrib="attribute-value" xml:lang="nb"/> + <eta xml:id="id2"> + <phi xml:lang="no-nb"> + <kappa and="true"> + <mu string="100%" xml:id="id3"> + <tau name="attribute" xml:lang="en" xml:id="id4"/> + <upsilon> + <green>This text must be green</green> + </upsilon> + </mu> + </kappa> + </phi> + </eta> + </upsilon> + </tree> + </test> + <test> + <xpath>//*[starts-with(concat(@insert,"-"),"_blank-")]/alpha[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(concat(@token,"$"),"e-value$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[contains(@insert,"1")][not(child::node())][following-sibling::sigma[contains(@and,"_")][following-sibling::beta[@xml:lang="en"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::mu[not(child::node())][following-sibling::psi[following-sibling::kappa[not(following-sibling::*)]//beta//xi[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::kappa[@content][@xml:id="id3"][not(following-sibling::*)]/xi[@xml:lang="nb"][not(preceding-sibling::*)]//upsilon[contains(@content,"ri")][@xml:lang="nb"][not(following-sibling::*)]//psi[contains(@and,"te")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::iota[@attribute][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::lambda[starts-with(concat(@and,"-"),"123456789-")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::theta//beta[not(preceding-sibling::*)]//epsilon[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)]//zeta[starts-with(@insert,"content")][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any insert="_blank"> + <alpha xml:lang="no-nb" xml:id="id1"/> + <sigma token="attribute-value"/> + <iota insert="100%"/> + <sigma and="_blank"/> + <beta xml:lang="en"/> + <mu/> + <psi/> + <kappa> + <beta> + <xi xml:lang="en-GB" xml:id="id2"/> + <kappa content="false" xml:id="id3"> + <xi xml:lang="nb"> + <upsilon content="attribute" xml:lang="nb"> + <psi and="attribute" xml:id="id4"/> + <iota attribute="solid 1px green"/> + <lambda and="123456789"/> + <theta> + <beta> + <epsilon xml:lang="en" xml:id="id5"> + <zeta insert="content"> + <green>This text must be green</green> + </zeta> + </epsilon> + </beta> + </theta> + </upsilon> + </xi> + </kappa> + </beta> + </kappa> + </any> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en-GB"][@xml:id="id1"]/tau//phi[@title][@xml:id="id2"]/sigma[@xml:lang="no-nb"]//theta[@xml:id="id3"][not(preceding-sibling::*)]/tau[contains(concat(@title,"$"),"nother attribute value$")][@xml:lang="en"][not(following-sibling::*)]/phi[@attribute][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::mu[@xml:lang="no"][@xml:id="id4"]/chi[@xml:lang="en-GB"][@xml:id="id5"][not(child::node())][following-sibling::tau[starts-with(@att,"false")][@xml:id="id6"][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 2]]/gamma[@attr][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="en"][preceding-sibling::*[position() = 1]]/tau[contains(@and,"r")][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@token="false"][@xml:lang="no"][not(following-sibling::*)]]]][position() = 1]]]</xpath> + <tree> + <chi xml:lang="en-GB" xml:id="id1"> + <tau> + <phi title="another attribute value" xml:id="id2"> + <sigma xml:lang="no-nb"> + <theta xml:id="id3"> + <tau title="another attribute value" xml:lang="en"> + <phi attribute="this.nodeValue"/> + <eta xml:lang="no"/> + <mu xml:lang="no" xml:id="id4"> + <chi xml:lang="en-GB" xml:id="id5"/> + <tau att="false" xml:id="id6"/> + <eta> + <gamma attr="true" xml:lang="no" xml:id="id7"/> + <upsilon xml:lang="en"> + <tau and="true"> + <chi token="false" xml:lang="no"> + <green>This text must be green</green> + </chi> + </tau> + </upsilon> + </eta> + </mu> + </tau> + </theta> + </sigma> + </phi> + </tau> + </chi> + </tree> + </test> + <test> + <xpath>//sigma[@title][@xml:id="id1"]/zeta[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@xml:id="id2"][following-sibling::psi[@att][@xml:lang="nb"][@xml:id="id3"]//alpha[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[starts-with(@title,"123456")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[@xml:id="id5"][following-sibling::*[position()=1]][not(preceding-sibling::any)][following-sibling::theta[preceding-sibling::*[position() = 3]][not(following-sibling::*)]//nu[contains(@desciption,"a")][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@object][preceding-sibling::*[position() = 1]]//iota[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:id="id8"]//omega[@delete][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[following-sibling::*[position()=1]][following-sibling::omega[@number="solid 1px green"][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//rho[@string][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <sigma title="another attribute value" xml:id="id1"> + <zeta xml:lang="en"> + <nu xml:id="id2"/> + <psi att="this.nodeValue" xml:lang="nb" xml:id="id3"> + <alpha xml:lang="en-US" xml:id="id4"/> + <lambda title="123456789" xml:lang="en-US"/> + <any xml:id="id5"/> + <theta> + <nu desciption="false" xml:lang="en-US" xml:id="id6"/> + <omega object="100%"> + <iota xml:id="id7"/> + <eta xml:id="id8"> + <omega delete="true"/> + <xi/> + <omega number="solid 1px green" xml:lang="nb"> + <rho string="attribute-value" xml:lang="nb" xml:id="id9"> + <green>This text must be green</green> + </rho> + </omega> + </eta> + </omega> + </theta> + </psi> + </zeta> + </sigma> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="no-nb"][@xml:id="id1"]//theta[starts-with(@content,"fal")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[starts-with(@insert,"100")][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//theta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::epsilon[@desciption="100%"][@xml:lang="en"][@xml:id="id5"]/upsilon//xi[contains(@abort,"nt")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)]//beta[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::gamma[preceding-sibling::*[position() = 1]]//kappa[@xml:lang="en-US"][following-sibling::gamma[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(@abort,"solid 1px g")]//gamma[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@object="solid 1px green"][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@name="_blank"][@xml:lang="no-nb"]//nu[@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)]//sigma[@desciption][@xml:lang="nb"][following-sibling::beta[@xml:lang="en"][@xml:id="id10"][not(following-sibling::*)]/pi[contains(concat(@delete,"$"),"ue$")][not(preceding-sibling::*)][following-sibling::rho[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@xml:lang="en"][preceding-sibling::*[position() = 2]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <any xml:lang="no-nb" xml:id="id1"> + <theta content="false" xml:id="id2"/> + <beta insert="100%" xml:lang="nb" xml:id="id3"> + <theta xml:lang="no-nb"/> + <theta xml:lang="en-US" xml:id="id4"/> + <epsilon desciption="100%" xml:lang="en" xml:id="id5"> + <upsilon> + <xi abort="content" xml:lang="no-nb" xml:id="id6"> + <beta xml:lang="en-GB" xml:id="id7"/> + <gamma> + <kappa xml:lang="en-US"/> + <gamma xml:lang="no"/> + <delta abort="solid 1px green"> + <gamma xml:lang="no"> + <delta object="solid 1px green" xml:id="id8"/> + <pi name="_blank" xml:lang="no-nb"> + <nu xml:lang="en-GB" xml:id="id9"> + <sigma desciption="_blank" xml:lang="nb"/> + <beta xml:lang="en" xml:id="id10"> + <pi delete="true"/> + <rho/> + <mu xml:lang="en"> + <green>This text must be green</green> + </mu> + </beta> + </nu> + </pi> + </gamma> + </delta> + </gamma> + </xi> + </upsilon> + </epsilon> + </beta> + </any> + </tree> + </test> + <test> + <xpath>//rho[@content][@xml:lang="no-nb"][@xml:id="id1"]//alpha[@title="content"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][following-sibling::theta[@abort][@xml:lang="no"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][not(following-sibling::theta)][not(child::node())][following-sibling::pi[@attr="true"][@xml:lang="nb"]//eta[contains(concat(@attr,"$"),"false$")][@xml:lang="en-US"]//omega[@insert="solid 1px green"][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:lang="en"]]][position() = 1]]]]</xpath> + <tree> + <rho content="false" xml:lang="no-nb" xml:id="id1"> + <alpha title="content" xml:id="id2"/> + <zeta xml:lang="en-GB"/> + <omega xml:lang="en"/> + <psi xml:lang="no-nb"/> + <theta abort="attribute" xml:lang="no"/> + <pi attr="true" xml:lang="nb"> + <eta attr="false" xml:lang="en-US"> + <omega insert="solid 1px green" xml:lang="en-US" xml:id="id3"> + <gamma xml:lang="en"> + <green>This text must be green</green> + </gamma> + </omega> + </eta> + </pi> + </rho> + </tree> + </test> + <test> + <xpath>//zeta[@xml:lang="nb"]/psi[contains(@object,"te")][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[contains(@number,"d 1p")][@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=1]][not(preceding-sibling::chi)][not(preceding-sibling::chi or following-sibling::chi)][following-sibling::tau[@delete][@xml:lang="en-US"][not(following-sibling::*)]//phi[@token][@xml:id="id3"][not(preceding-sibling::*)]//xi[starts-with(concat(@att,"-"),"123456789-")][@xml:id="id4"][not(preceding-sibling::*)]//iota[@class="attribute-value"][not(preceding-sibling::*)]//rho[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[contains(@insert,"px green")][@xml:id="id5"][following-sibling::*[position()=3]][following-sibling::lambda[@token][@xml:lang="en-US"][not(child::node())][following-sibling::gamma[not(child::node())][following-sibling::mu[@xml:id="id6"]//omicron[contains(concat(@desciption,"$"),"his.nodeValue$")][@xml:id="id7"][not(preceding-sibling::*)]/sigma[starts-with(@attr,"at")][@xml:lang="en-US"][@xml:id="id8"][following-sibling::tau[contains(@true,"ute value")][@xml:lang="no-nb"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <zeta xml:lang="nb"> + <psi object="attribute"/> + <kappa xml:id="id1"/> + <chi number="solid 1px green" xml:lang="en" xml:id="id2"/> + <tau delete="attribute-value" xml:lang="en-US"> + <phi token="attribute" xml:id="id3"> + <xi att="123456789" xml:id="id4"> + <iota class="attribute-value"> + <rho xml:lang="en-GB"/> + <chi insert="solid 1px green" xml:id="id5"/> + <lambda token="100%" xml:lang="en-US"/> + <gamma/> + <mu xml:id="id6"> + <omicron desciption="this.nodeValue" xml:id="id7"> + <sigma attr="attribute" xml:lang="en-US" xml:id="id8"/> + <tau true="attribute value" xml:lang="no-nb"> + <green>This text must be green</green> + </tau> + </omicron> + </mu> + </iota> + </xi> + </phi> + </tau> + </zeta> + </tree> + </test> + <test> + <xpath>//theta[@false][@xml:lang="no"][@xml:id="id1"]//zeta[@name][@xml:id="id2"][following-sibling::*[position()=2]][following-sibling::sigma[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@src][@xml:lang="en"][@xml:id="id4"]//theta[contains(concat(@src,"$"),"%$")][@xml:id="id5"][following-sibling::omicron[contains(@or,"ribute")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::xi[@true="another attribute value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//*[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@or][@xml:id="id8"][not(preceding-sibling::*)]//kappa[not(preceding-sibling::*)][following-sibling::phi[@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[starts-with(@delete,"this.")][@xml:id="id10"][following-sibling::omega[contains(@string,"on")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <theta false="attribute-value" xml:lang="no" xml:id="id1"> + <zeta name="solid 1px green" xml:id="id2"/> + <sigma xml:lang="en" xml:id="id3"/> + <pi src="false" xml:lang="en" xml:id="id4"> + <theta src="100%" xml:id="id5"/> + <omicron or="another attribute value" xml:lang="en-US" xml:id="id6"/> + <xi true="another attribute value"> + <any xml:id="id7"> + <sigma or="_blank" xml:id="id8"> + <kappa/> + <phi xml:id="id9"> + <lambda delete="this.nodeValue" xml:id="id10"/> + <omega string="content" xml:lang="en"> + <green>This text must be green</green> + </omega> + </phi> + </sigma> + </any> + </xi> + </pi> + </theta> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]//mu[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::alpha[@true][@xml:id="id3"][preceding-sibling::*[position() = 1]]//epsilon[contains(concat(@content,"$"),"e$")][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[starts-with(@data,"100")][not(preceding-sibling::*)]//pi[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[starts-with(concat(@attrib,"-"),"content-")][@xml:lang="no"][@xml:id="id5"][not(following-sibling::*)]/upsilon[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id6"][not(following-sibling::*)]//iota[not(preceding-sibling::*)][not(following-sibling::*)]/zeta[not(preceding-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta xml:id="id1"> + <mu xml:lang="no-nb" xml:id="id2"/> + <alpha true="false" xml:id="id3"> + <epsilon content="false"> + <kappa data="100%"> + <pi xml:id="id4"/> + <alpha> + <lambda attrib="content" xml:lang="no" xml:id="id5"> + <upsilon xml:lang="en-US"/> + <gamma xml:lang="no-nb" xml:id="id6"> + <iota> + <zeta> + <green>This text must be green</green> + </zeta> + </iota> + </gamma> + </lambda> + </alpha> + </kappa> + </epsilon> + </alpha> + </zeta> + </tree> + </test> + <test> + <xpath>//tau[@abort][@xml:id="id1"]/rho[contains(concat(@true,"$"),"e$")][not(following-sibling::*)]//eta[not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:lang="no"]//tau[@xml:id="id2"]//iota[@xml:lang="no"][@xml:id="id3"][following-sibling::omega[@string][@xml:lang="no-nb"][following-sibling::theta[starts-with(@attr,"cont")][@xml:id="id4"][preceding-sibling::*[position() = 2]]/sigma[starts-with(@name,"this.nodeValue")][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]//rho[starts-with(@attrib,"cont")][@xml:lang="nb"][@xml:id="id6"][not(child::node())][following-sibling::pi[contains(concat(@token,"$"),"rue$")][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="en"][preceding-sibling::*[position() = 2]][following-sibling::omega[@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/*[@content][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::chi[@class][@xml:lang="no"][@xml:id="id10"]/alpha[@xml:lang="nb"][@xml:id="id11"][following-sibling::*[position()=4]][not(child::node())][following-sibling::upsilon[starts-with(concat(@name,"-"),"this-")][@xml:id="id12"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@delete][@xml:id="id13"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::xi[contains(concat(@true,"$"),"ank$")][not(child::node())][following-sibling::alpha[@xml:lang="en"][@xml:id="id14"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <tau abort="solid 1px green" xml:id="id1"> + <rho true="this-is-att-value"> + <eta/> + <alpha xml:lang="no"> + <tau xml:id="id2"> + <iota xml:lang="no" xml:id="id3"/> + <omega string="another attribute value" xml:lang="no-nb"/> + <theta attr="content" xml:id="id4"> + <sigma name="this.nodeValue" xml:lang="nb" xml:id="id5"> + <rho attrib="content" xml:lang="nb" xml:id="id6"/> + <pi token="true" xml:lang="en" xml:id="id7"/> + <xi xml:lang="en"/> + <omega xml:id="id8"> + <any content="solid 1px green" xml:lang="no" xml:id="id9"/> + <chi class="attribute value" xml:lang="no" xml:id="id10"> + <alpha xml:lang="nb" xml:id="id11"/> + <upsilon name="this-is-att-value" xml:id="id12"/> + <rho delete="100%" xml:id="id13"/> + <xi true="_blank"/> + <alpha xml:lang="en" xml:id="id14"> + <green>This text must be green</green> + </alpha> + </chi> + </omega> + </sigma> + </theta> + </tau> + </alpha> + </rho> + </tau> + </tree> + </test> + <test> + <xpath>//kappa[@string="another attribute value"]/alpha[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]/eta[@xml:lang="en-US"][following-sibling::*[@content][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 2]]/gamma[starts-with(@insert,"attr")][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa string="another attribute value"> + <alpha xml:lang="en"/> + <theta xml:lang="en-US" xml:id="id1"> + <eta xml:lang="en-US"/> + <any content="true" xml:lang="no-nb" xml:id="id2"/> + <beta xml:lang="en-GB" xml:id="id3"> + <gamma insert="attribute" xml:id="id4"> + <green>This text must be green</green> + </gamma> + </beta> + </theta> + </kappa> + </tree> + </test> + <test> + <xpath>//*//alpha//beta[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::mu[contains(@false,"value")][@xml:lang="no-nb"][@xml:id="id1"][following-sibling::*[position()=3]][following-sibling::beta[@xml:lang="no-nb"][not(child::node())][following-sibling::iota[contains(@or,"e")][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 3]][following-sibling::xi[preceding-sibling::*[position() = 4]][not(following-sibling::*)]//delta[@xml:lang="no"]//upsilon[contains(concat(@token,"$"),"alue$")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::omega[@false][@xml:id="id4"][preceding-sibling::*[position() = 1]]/omega[starts-with(concat(@desciption,"-"),"_blank-")][@xml:id="id5"][not(following-sibling::*)]/sigma[@xml:id="id6"][not(preceding-sibling::*)]//lambda[following-sibling::theta[starts-with(@token,"_")][preceding-sibling::*[position() = 1]]//eta/tau[@false]//epsilon[contains(concat(@true,"$"),"ue$")][@xml:lang="nb"]]]][position() = 1]]]]</xpath> + <tree> + <any> + <alpha> + <beta xml:lang="en"/> + <mu false="attribute value" xml:lang="no-nb" xml:id="id1"/> + <beta xml:lang="no-nb"/> + <iota or="false" xml:lang="no" xml:id="id2"/> + <xi> + <delta xml:lang="no"> + <upsilon token="attribute-value" xml:id="id3"/> + <omega false="_blank" xml:id="id4"> + <omega desciption="_blank" xml:id="id5"> + <sigma xml:id="id6"> + <lambda/> + <theta token="_blank"> + <eta> + <tau false="attribute"> + <epsilon true="true" xml:lang="nb"> + <green>This text must be green</green> + </epsilon> + </tau> + </eta> + </theta> + </sigma> + </omega> + </omega> + </delta> + </xi> + </alpha> + </any> + </tree> + </test> + <test> + <xpath>//phi[@abort]//mu[@xml:lang="no-nb"][@xml:id="id1"]/xi[starts-with(@name,"att")][@xml:lang="no"][@xml:id="id2"]//beta[contains(@number,"l")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@string][@xml:id="id3"][not(following-sibling::*)]/pi[contains(concat(@false,"$"),"100%$")][@xml:lang="en-GB"]/omicron[@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[contains(concat(@attribute,"$"),"e$")][@xml:id="id5"][not(following-sibling::*)]//chi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::rho[@false="another attribute value"][not(following-sibling::*)]/beta[@xml:lang="no"][following-sibling::lambda[contains(concat(@name,"$"),"deValue$")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@title="this-is-att-value"][@xml:id="id6"][not(preceding-sibling::*)]/kappa[@false="false"][@xml:id="id7"][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <phi abort="this-is-att-value"> + <mu xml:lang="no-nb" xml:id="id1"> + <xi name="attribute-value" xml:lang="no" xml:id="id2"> + <beta number="false" xml:lang="en"> + <phi string="100%" xml:id="id3"> + <pi false="100%" xml:lang="en-GB"> + <omicron xml:lang="en" xml:id="id4"/> + <zeta attribute="false" xml:id="id5"> + <chi xml:lang="en"/> + <rho false="another attribute value"> + <beta xml:lang="no"/> + <lambda name="this.nodeValue" xml:lang="en"> + <pi title="this-is-att-value" xml:id="id6"> + <kappa false="false" xml:id="id7"> + <green>This text must be green</green> + </kappa> + </pi> + </lambda> + </rho> + </zeta> + </pi> + </phi> + </beta> + </xi> + </mu> + </phi> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:id="id1"]//lambda[contains(@data,"alu")][@xml:lang="no-nb"][not(preceding-sibling::*)]//lambda[@xml:lang="nb"][not(child::node())][following-sibling::upsilon[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[contains(concat(@abort,"$"),"t-value$")][not(following-sibling::*)]//alpha[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]//kappa[contains(concat(@string,"$"),"alue$")][@xml:lang="en-GB"][@xml:id="id4"]//lambda[contains(concat(@insert,"$")," value$")][not(preceding-sibling::*)][following-sibling::zeta[not(child::node())][following-sibling::psi[@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::tau[@title="another attribute value"][@xml:lang="en-US"][preceding-sibling::*[position() = 3]][following-sibling::epsilon[not(following-sibling::*)]//gamma[contains(concat(@data,"$"),"23456789$")][@xml:id="id6"][not(following-sibling::*)]/mu[starts-with(@data,"solid 1px g")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@attr][@xml:lang="en-GB"][@xml:id="id7"][not(child::node())][following-sibling::lambda[@number][@xml:lang="nb"]//mu[contains(concat(@number,"$"),"t-value$")][@xml:lang="no"][not(child::node())][following-sibling::mu[@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[@data="attribute"][@xml:lang="no"][not(preceding-sibling::*)]/pi[not(following-sibling::*)]//lambda[starts-with(concat(@false,"-"),"this-")][@xml:lang="en"][@xml:id="id9"]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <epsilon xml:id="id1"> + <lambda data="attribute-value" xml:lang="no-nb"> + <lambda xml:lang="nb"/> + <upsilon xml:lang="en-US" xml:id="id2"> + <nu abort="this-is-att-value"> + <alpha xml:lang="en-US" xml:id="id3"> + <kappa string="attribute-value" xml:lang="en-GB" xml:id="id4"> + <lambda insert="attribute value"/> + <zeta/> + <psi xml:lang="nb" xml:id="id5"/> + <tau title="another attribute value" xml:lang="en-US"/> + <epsilon> + <gamma data="123456789" xml:id="id6"> + <mu data="solid 1px green"/> + <omicron attr="_blank" xml:lang="en-GB" xml:id="id7"/> + <lambda number="attribute" xml:lang="nb"> + <mu number="this-is-att-value" xml:lang="no"/> + <mu xml:id="id8"> + <xi data="attribute" xml:lang="no"> + <pi> + <lambda false="this-is-att-value" xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </lambda> + </pi> + </xi> + </mu> + </lambda> + </gamma> + </epsilon> + </kappa> + </alpha> + </nu> + </upsilon> + </lambda> + </epsilon> + </tree> + </test> + <test> + <xpath>//theta[@src]//*[contains(@desciption,"alue")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:lang="en-US"][following-sibling::gamma[@string][@xml:lang="en-GB"][@xml:id="id2"][following-sibling::psi[starts-with(concat(@delete,"-"),"attribute-")][following-sibling::nu[@or][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::iota[@number="false"][@xml:lang="no"][@xml:id="id4"]//eta[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::rho[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::rho)][following-sibling::omega[@xml:id="id7"][not(preceding-sibling::omega)][following-sibling::*[not(following-sibling::*)]//rho[@xml:lang="en-US"][@xml:id="id8"][following-sibling::xi[@xml:lang="no"][preceding-sibling::*[position() = 1]]/omicron[not(preceding-sibling::*)][not(following-sibling::*)]//tau[@xml:id="id9"]//omega[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <theta src="attribute"> + <any desciption="this.nodeValue" xml:id="id1"> + <phi xml:lang="en-US"/> + <gamma string="attribute value" xml:lang="en-GB" xml:id="id2"/> + <psi delete="attribute-value"/> + <nu or="100%" xml:lang="no-nb" xml:id="id3"/> + <iota number="false" xml:lang="no" xml:id="id4"> + <eta xml:id="id5"/> + <rho xml:lang="no" xml:id="id6"/> + <omega xml:id="id7"/> + <any> + <rho xml:lang="en-US" xml:id="id8"/> + <xi xml:lang="no"> + <omicron> + <tau xml:id="id9"> + <omega xml:lang="no-nb"> + <green>This text must be green</green> + </omega> + </tau> + </omicron> + </xi> + </any> + </iota> + </any> + </theta> + </tree> + </test> + <test> + <xpath>//chi[@number]/lambda[not(following-sibling::*)]/rho[@xml:lang="no"][not(following-sibling::*)]/mu[@xml:id="id1"][not(following-sibling::*)]/lambda[@xml:id="id2"][not(preceding-sibling::*)]//epsilon[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[@xml:id="id4"][preceding-sibling::*[position() = 1]]/lambda[starts-with(@abort,"th")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[contains(@false,"e v")][@xml:id="id6"][following-sibling::alpha[following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[contains(@delete,"te value")][@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]/xi[@xml:lang="no"][not(preceding-sibling::*)]/epsilon[contains(concat(@string,"$"),"ontent$")][@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::delta[@token][@xml:lang="nb"][not(following-sibling::*)]//zeta[contains(@string,"alue")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <chi number="another attribute value"> + <lambda> + <rho xml:lang="no"> + <mu xml:id="id1"> + <lambda xml:id="id2"> + <epsilon xml:id="id3"/> + <any xml:id="id4"> + <lambda abort="this.nodeValue" xml:lang="en-GB" xml:id="id5"> + <epsilon false="attribute value" xml:id="id6"/> + <alpha/> + <beta delete="another attribute value" xml:lang="no-nb" xml:id="id7"> + <xi xml:lang="no"> + <epsilon string="content" xml:lang="en" xml:id="id8"/> + <delta token="solid 1px green" xml:lang="nb"> + <zeta string="attribute value" xml:lang="en"> + <green>This text must be green</green> + </zeta> + </delta> + </xi> + </beta> + </lambda> + </any> + </lambda> + </mu> + </rho> + </lambda> + </chi> + </tree> + </test> + <test> + <xpath>//nu[contains(@abort,"234567")]/delta[contains(concat(@token,"$"),"0%$")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[not(following-sibling::*)]//mu[@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::mu[@abort][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]/omega[starts-with(@att,"12")][@xml:lang="en"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[starts-with(concat(@attribute,"-"),"this.nodeValue-")][@xml:id="id4"][not(following-sibling::*)]/rho[contains(@src,"100")][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[not(preceding-sibling::*)]//chi[@string="attribute"][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <nu abort="123456789"> + <delta token="100%" xml:id="id1"> + <zeta> + <mu xml:lang="no"/> + <mu abort="true" xml:lang="nb" xml:id="id2"> + <omega att="123456789" xml:lang="en" xml:id="id3"/> + <sigma attribute="this.nodeValue" xml:id="id4"> + <rho src="100%" xml:lang="no"> + <tau> + <chi string="attribute" xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </chi> + </tau> + </rho> + </sigma> + </mu> + </zeta> + </delta> + </nu> + </tree> + </test> + <test> + <xpath>//alpha//zeta[@abort][not(preceding-sibling::*)][following-sibling::tau[@token][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]//tau[@true="another attribute value"]/theta[contains(concat(@delete,"$"),"attribute$")][@xml:lang="nb"][not(preceding-sibling::*)]/xi[contains(concat(@and,"$"),"Value$")][@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::omicron[@title][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::epsilon[@xml:lang="en-US"][@xml:id="id4"][not(child::node())][following-sibling::gamma[starts-with(@object,"_")][@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::theta[not(child::node())][following-sibling::kappa[@xml:id="id6"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::omicron[@title][@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 6]]/phi[starts-with(concat(@src,"-"),"attribute-")][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@title="_blank"][@xml:lang="nb"][preceding-sibling::*[position() = 1]]//sigma[@xml:lang="en-GB"][@xml:id="id9"]/theta[starts-with(@insert,"this.node")][@xml:lang="en-US"][@xml:id="id10"]//chi//*[contains(@abort,"e")][@xml:id="id11"][not(child::node())][following-sibling::*[@xml:id="id12"][not(following-sibling::*)]/kappa[contains(concat(@data,"$"),"alue$")][not(following-sibling::*)]]]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha> + <zeta abort="attribute value"/> + <tau token="this-is-att-value" xml:id="id1"> + <chi xml:lang="en-GB" xml:id="id2"> + <tau true="another attribute value"> + <theta delete="attribute" xml:lang="nb"> + <xi and="this.nodeValue" xml:lang="en-GB" xml:id="id3"/> + <omicron title="content"/> + <epsilon xml:lang="en-US" xml:id="id4"/> + <gamma object="_blank" xml:lang="no" xml:id="id5"/> + <theta/> + <kappa xml:id="id6"/> + <omicron title="_blank" xml:lang="nb" xml:id="id7"> + <phi src="attribute-value" xml:id="id8"/> + <chi title="_blank" xml:lang="nb"> + <sigma xml:lang="en-GB" xml:id="id9"> + <theta insert="this.nodeValue" xml:lang="en-US" xml:id="id10"> + <chi> + <any abort="attribute value" xml:id="id11"/> + <any xml:id="id12"> + <kappa data="this.nodeValue"> + <green>This text must be green</green> + </kappa> + </any> + </chi> + </theta> + </sigma> + </chi> + </omicron> + </theta> + </tau> + </chi> + </tau> + </alpha> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en-GB"]/tau[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::epsilon[contains(@att,"ttribute-")][following-sibling::*[position()=3]][not(child::node())][following-sibling::pi[contains(concat(@desciption,"$"),"nt$")][not(child::node())][following-sibling::omicron[@object][@xml:id="id1"][preceding-sibling::*[position() = 3]][following-sibling::epsilon[@false][not(following-sibling::*)]/alpha[@xml:lang="en-US"][not(following-sibling::*)]/phi[contains(@number,"lue")][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/delta[not(preceding-sibling::*)]/psi[starts-with(@desciption,"tru")][@xml:id="id4"][not(preceding-sibling::*)][not(preceding-sibling::psi or following-sibling::psi)]]]]][position() = 1]]</xpath> + <tree> + <omega xml:lang="en-GB"> + <tau xml:lang="en-US"/> + <epsilon att="attribute-value"/> + <pi desciption="content"/> + <omicron object="this-is-att-value" xml:id="id1"/> + <epsilon false="attribute-value"> + <alpha xml:lang="en-US"> + <phi number="attribute-value" xml:id="id2"/> + <delta xml:lang="no-nb" xml:id="id3"> + <delta> + <psi desciption="true" xml:id="id4"> + <green>This text must be green</green> + </psi> + </delta> + </delta> + </alpha> + </epsilon> + </omega> + </tree> + </test> + <test> + <xpath>//theta[contains(concat(@attrib,"$"),"lue$")][@xml:id="id1"]/phi[contains(@desciption,"on")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:lang="nb"]/tau[@string][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@token][@xml:id="id2"][not(following-sibling::*)][not(following-sibling::psi)]/tau[@xml:lang="en-US"][@xml:id="id3"]</xpath> + <tree> + <theta attrib="attribute value" xml:id="id1"> + <phi desciption="content" xml:lang="nb"> + <lambda xml:lang="nb"> + <tau string="false" xml:lang="en"> + <psi token="123456789" xml:id="id2"> + <tau xml:lang="en-US" xml:id="id3"> + <green>This text must be green</green> + </tau> + </psi> + </tau> + </lambda> + </phi> + </theta> + </tree> + </test> + <test> + <xpath>//epsilon[@src="123456789"]//alpha[not(preceding-sibling::*)]/delta[@xml:id="id1"][following-sibling::tau[@desciption][@xml:id="id2"][not(following-sibling::*)]/pi[contains(concat(@attribute,"$"),"ute value$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:lang="no-nb"][@xml:id="id3"]/*[starts-with(concat(@object,"-"),"attribute value-")][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[@xml:id="id5"][not(following-sibling::*)]//upsilon[@xml:id="id6"][following-sibling::gamma[starts-with(@true,"at")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]//delta[starts-with(@string,"t")][following-sibling::kappa[@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(concat(@desciption,"-"),"100%-")][preceding-sibling::*[position() = 2]]/mu[starts-with(@data,"another attribu")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::xi[contains(concat(@or,"$"),".nodeValue$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/kappa[contains(concat(@attrib,"$")," value$")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[contains(concat(@desciption,"$"),"se$")]//theta[@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]]]][position() = 1]]]]</xpath> + <tree> + <epsilon src="123456789"> + <alpha> + <delta xml:id="id1"/> + <tau desciption="_blank" xml:id="id2"> + <pi attribute="attribute value"/> + <iota xml:lang="no-nb" xml:id="id3"> + <any object="attribute value" xml:id="id4"/> + <delta xml:id="id5"> + <upsilon xml:id="id6"/> + <gamma true="attribute-value" xml:lang="no"/> + <xi xml:lang="no-nb"> + <delta string="true"/> + <kappa xml:id="id7"/> + <delta desciption="100%"> + <mu data="another attribute value" xml:lang="en-US"/> + <xi or="this.nodeValue"> + <kappa attrib="another attribute value"/> + <phi desciption="false"> + <theta xml:lang="no-nb" xml:id="id8"> + <green>This text must be green</green> + </theta> + </phi> + </xi> + </delta> + </xi> + </delta> + </iota> + </tau> + </alpha> + </epsilon> + </tree> + </test> + <test> + <xpath>//xi[starts-with(concat(@attribute,"-"),"attribute-")][@xml:lang="en"][@xml:id="id1"]/*[@xml:lang="no-nb"]/zeta[starts-with(@or,"attribute-va")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[starts-with(@data,"attribute")][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@string][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[not(following-sibling::*)]//epsilon[starts-with(concat(@true,"-"),"this-")][@xml:id="id3"][not(following-sibling::*)]/gamma[@desciption][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[@xml:lang="no"][not(child::node())][following-sibling::theta[@xml:id="id5"][following-sibling::*[position()=3]][not(child::node())][following-sibling::xi[@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::pi[not(child::node())][following-sibling::lambda[@class][preceding-sibling::*[position() = 4]]/lambda[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::sigma[contains(@object,"alse")][@xml:id="id8"]/delta[@xml:lang="nb"][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <xi attribute="attribute-value" xml:lang="en" xml:id="id1"> + <any xml:lang="no-nb"> + <zeta or="attribute-value" xml:lang="en" xml:id="id2"> + <theta data="attribute"> + <rho string="attribute" xml:lang="no-nb"> + <chi> + <epsilon true="this-is-att-value" xml:id="id3"> + <gamma desciption="100%"/> + <gamma xml:lang="no" xml:id="id4"> + <mu xml:lang="no"/> + <theta xml:id="id5"/> + <xi xml:id="id6"/> + <pi/> + <lambda class="attribute value"> + <lambda xml:id="id7"/> + <sigma object="false" xml:id="id8"> + <delta xml:lang="nb"> + <green>This text must be green</green> + </delta> + </sigma> + </lambda> + </gamma> + </epsilon> + </chi> + </rho> + </theta> + </zeta> + </any> + </xi> + </tree> + </test> + <test> + <xpath>//omicron[@insert]/gamma[@xml:id="id1"][not(child::node())][following-sibling::alpha[@abort="content"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//epsilon[contains(concat(@title,"$"),"his-is-att-value$")][not(child::node())][following-sibling::delta[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@src][@xml:lang="en-GB"][not(child::node())][following-sibling::*[@abort][@xml:lang="en"]/kappa[contains(@insert,"ont")][@xml:lang="no-nb"]/xi[starts-with(@data,"at")][@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[not(following-sibling::*)][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <omicron insert="false"> + <gamma xml:id="id1"/> + <alpha abort="content" xml:id="id2"> + <epsilon title="this-is-att-value"/> + <delta xml:id="id3"/> + <beta src="content" xml:lang="en-GB"/> + <any abort="content" xml:lang="en"> + <kappa insert="content" xml:lang="no-nb"> + <xi data="attribute value" xml:lang="nb"/> + <nu xml:lang="en-GB"> + <pi> + <green>This text must be green</green> + </pi> + </nu> + </kappa> + </any> + </alpha> + </omicron> + </tree> + </test> + <test> + <xpath>//eta/xi[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@content][not(preceding-sibling::*)]/phi[not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:id="id2"]//epsilon[contains(concat(@attr,"$")," 1px green$")][not(following-sibling::*)]//zeta[contains(concat(@true,"$"),"23456789$")][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::zeta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@xml:lang="no"][@xml:id="id4"][following-sibling::zeta[@xml:id="id5"][following-sibling::*[position()=4]][following-sibling::iota[@delete][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::chi[starts-with(concat(@title,"-"),"123456789-")][@xml:id="id7"][following-sibling::omicron[starts-with(@or,"attribute v")][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::rho[contains(@name,"e")][@xml:lang="no"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]/phi[@xml:lang="no-nb"][not(preceding-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <eta> + <xi xml:id="id1"> + <beta content="123456789"> + <phi> + <phi xml:id="id2"> + <epsilon attr="solid 1px green"> + <zeta true="123456789" xml:lang="no" xml:id="id3"/> + <zeta xml:lang="no-nb"> + <epsilon xml:lang="no" xml:id="id4"/> + <zeta xml:id="id5"/> + <iota delete="_blank" xml:id="id6"/> + <chi title="123456789" xml:id="id7"/> + <omicron or="attribute value"/> + <rho name="attribute value" xml:lang="no"> + <phi xml:lang="no-nb"> + <green>This text must be green</green> + </phi> + </rho> + </zeta> + </epsilon> + </phi> + </phi> + </beta> + </xi> + </eta> + </tree> + </test> + <test> + <xpath>//sigma[starts-with(@att,"th")][@xml:lang="no"][@xml:id="id1"]//sigma[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::rho[starts-with(concat(@true,"-"),"content-")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::rho[starts-with(concat(@insert,"-"),"solid 1px green-")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/zeta[@title][@xml:lang="nb"]/rho[@xml:lang="no-nb"][not(preceding-sibling::*)]][position() = 1]]</xpath> + <tree> + <sigma att="this.nodeValue" xml:lang="no" xml:id="id1"> + <sigma xml:lang="no"/> + <rho true="content" xml:id="id2"/> + <rho insert="solid 1px green" xml:lang="no"> + <zeta title="true" xml:lang="nb"> + <rho xml:lang="no-nb"> + <green>This text must be green</green> + </rho> + </zeta> + </rho> + </sigma> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(@false,"attribute val")][@xml:id="id1"]//eta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::kappa[following-sibling::*[position()=3]][not(child::node())][following-sibling::kappa[@xml:id="id3"][following-sibling::*[position()=2]][following-sibling::rho[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omicron[@desciption="another attribute value"][@xml:lang="nb"][not(following-sibling::*)]/tau[@and][@xml:id="id5"][not(following-sibling::*)]//chi[@token][@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[contains(concat(@name,"$"),"-att-value$")]//tau[contains(concat(@and,"$"),"789$")][following-sibling::pi[contains(@data,"0")][@xml:lang="nb"][not(following-sibling::*)]//delta[@src="true"][@xml:lang="nb"]/psi[@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@xml:id="id8"][not(preceding-sibling::*)]/tau[@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)]//lambda[not(following-sibling::*)]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <zeta false="attribute value" xml:id="id1"> + <eta xml:id="id2"/> + <kappa/> + <kappa xml:id="id3"/> + <rho xml:lang="en-US" xml:id="id4"/> + <omicron desciption="another attribute value" xml:lang="nb"> + <tau and="this.nodeValue" xml:id="id5"> + <chi token="attribute value" xml:id="id6"/> + <mu name="this-is-att-value"> + <tau and="123456789"/> + <pi data="100%" xml:lang="nb"> + <delta src="true" xml:lang="nb"> + <psi xml:lang="nb" xml:id="id7"> + <eta xml:id="id8"> + <tau xml:lang="en" xml:id="id9"> + <lambda> + <green>This text must be green</green> + </lambda> + </tau> + </eta> + </psi> + </delta> + </pi> + </mu> + </tau> + </omicron> + </zeta> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-GB"]//chi[contains(@desciption,"e")][@xml:lang="no-nb"]//omega[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[not(following-sibling::*)]//nu[contains(concat(@attr,"$"),"alue$")][@xml:lang="en-US"][not(preceding-sibling::*)]//iota[@xml:lang="en-US"]//rho[not(preceding-sibling::*)][not(following-sibling::*)]/phi[following-sibling::lambda[starts-with(concat(@desciption,"-"),"attribute-")][@xml:lang="no"][@xml:id="id2"][position() = 1]]</xpath> + <tree> + <phi xml:lang="en-GB"> + <chi desciption="attribute" xml:lang="no-nb"> + <omega xml:lang="nb" xml:id="id1"> + <nu> + <nu attr="another attribute value" xml:lang="en-US"> + <iota xml:lang="en-US"> + <rho> + <phi/> + <lambda desciption="attribute-value" xml:lang="no" xml:id="id2"> + <green>This text must be green</green> + </lambda> + </rho> + </iota> + </nu> + </nu> + </omega> + </chi> + </phi> + </tree> + </test> + <test> + <xpath>//beta[@data][@xml:lang="en-US"][@xml:id="id1"]/lambda[starts-with(concat(@attr,"-"),"_blank-")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::iota[contains(concat(@or,"$"),"er attribute value$")][@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[contains(concat(@and,"$"),"e$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//epsilon[@or="123456789"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::epsilon[@attribute][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/zeta[@content][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]/*[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[contains(concat(@attrib,"$"),"ent$")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta data="attribute" xml:lang="en-US" xml:id="id1"> + <lambda attr="_blank" xml:lang="en-US" xml:id="id2"/> + <iota or="another attribute value" xml:lang="en-GB" xml:id="id3"/> + <eta and="false" xml:lang="en-GB"> + <epsilon or="123456789" xml:id="id4"/> + <epsilon attribute="this-is-att-value"> + <zeta content="this.nodeValue" xml:lang="nb" xml:id="id5"> + <any xml:id="id6"/> + <gamma attrib="content" xml:id="id7"/> + <eta xml:id="id8"> + <green>This text must be green</green> + </eta> + </zeta> + </epsilon> + </eta> + </beta> + </tree> + </test> + <test> + <xpath>//lambda[starts-with(concat(@data,"-"),"another attribute value-")][@xml:lang="en"]/xi[not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 1]][following-sibling::eta[starts-with(concat(@att,"-"),"this.nodeValue-")][@xml:id="id1"]//mu[@att][@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]//mu[@xml:lang="no"][not(following-sibling::*)]//chi[@xml:id="id3"]/lambda[contains(concat(@content,"$"),"ttribute value$")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::iota[contains(@name,"en")][preceding-sibling::*[position() = 1]][following-sibling::kappa[@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]]]]</xpath> + <tree> + <lambda data="another attribute value" xml:lang="en"> + <xi/> + <upsilon/> + <eta att="this.nodeValue" xml:id="id1"> + <mu att="true" xml:lang="en" xml:id="id2"> + <mu xml:lang="no"> + <chi xml:id="id3"> + <lambda content="another attribute value" xml:lang="no" xml:id="id4"/> + <iota name="solid 1px green"/> + <kappa xml:lang="no"> + <green>This text must be green</green> + </kappa> + </chi> + </mu> + </mu> + </eta> + </lambda> + </tree> + </test> + <test> + <xpath>//*[starts-with(@string,"another attribute va")][@xml:lang="en"][@xml:id="id1"]/gamma[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[starts-with(concat(@token,"-"),"content-")][@xml:id="id3"]/rho[@true="attribute-value"][not(preceding-sibling::*)]/pi[@insert="123456789"][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::pi)]/chi[contains(concat(@delete,"$"),"content$")][@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::eta[@xml:lang="en"]/kappa[@xml:id="id5"]/delta[starts-with(@number,"a")][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::delta)]/epsilon[@abort][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::gamma[@xml:lang="en"][@xml:id="id7"][not(child::node())][following-sibling::delta[following-sibling::*[position()=2]][following-sibling::omega[starts-with(@or,"solid ")][@xml:id="id8"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 4]]/gamma[contains(@number,"e value")][@xml:lang="no"][@xml:id="id9"][not(child::node())][following-sibling::*[starts-with(@delete,"_")]/rho[@xml:lang="nb"][following-sibling::alpha[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::mu[@xml:id="id10"][preceding-sibling::*[position() = 2]]//*[@xml:lang="en-GB"][not(following-sibling::*)]//zeta[@abort][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@attribute="123456789"][not(following-sibling::*)]//iota[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]]]]]</xpath> + <tree> + <any string="another attribute value" xml:lang="en" xml:id="id1"> + <gamma xml:lang="en-GB" xml:id="id2"/> + <upsilon token="content" xml:id="id3"> + <rho true="attribute-value"> + <pi insert="123456789" xml:lang="en-GB"> + <chi delete="content" xml:lang="nb" xml:id="id4"/> + <eta xml:lang="en"> + <kappa xml:id="id5"> + <delta number="attribute" xml:lang="en-US" xml:id="id6"> + <epsilon abort="false" xml:lang="en-US"/> + <gamma xml:lang="en" xml:id="id7"/> + <delta/> + <omega or="solid 1px green" xml:id="id8"/> + <theta> + <gamma number="attribute value" xml:lang="no" xml:id="id9"/> + <any delete="_blank"> + <rho xml:lang="nb"/> + <alpha xml:lang="en-GB"/> + <mu xml:id="id10"> + <any xml:lang="en-GB"> + <zeta abort="123456789" xml:lang="en-US"> + <eta attribute="123456789"> + <iota xml:lang="nb"> + <green>This text must be green</green> + </iota> + </eta> + </zeta> + </any> + </mu> + </any> + </theta> + </delta> + </kappa> + </eta> + </pi> + </rho> + </upsilon> + </any> + </tree> + </test> + <test> + <xpath>//gamma[@xml:id="id1"]/tau[@xml:id="id2"][not(child::node())][following-sibling::phi[starts-with(@insert,"attribute-v")][@xml:lang="en-US"][@xml:id="id3"][following-sibling::pi//upsilon[@xml:lang="en-GB"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@title][@xml:lang="en-US"]/eta[contains(concat(@abort,"$"),"alue$")][not(child::node())][following-sibling::alpha[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]/epsilon[@and="solid 1px green"][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::nu[@desciption][@xml:lang="nb"]/psi[@xml:id="id6"][not(following-sibling::*)]//omicron[not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:lang="no"][not(child::node())][following-sibling::mu[not(following-sibling::*)]/iota[contains(concat(@true,"$"),"attribute$")][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@attr][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:lang="en-US"][@xml:id="id8"]//*[not(preceding-sibling::*)][position() = 1]][position() = 1]]]]]]]][position() = 1]]</xpath> + <tree> + <gamma xml:id="id1"> + <tau xml:id="id2"/> + <phi insert="attribute-value" xml:lang="en-US" xml:id="id3"/> + <pi> + <upsilon xml:lang="en-GB" xml:id="id4"/> + <psi title="false" xml:lang="en-US"> + <eta abort="attribute-value"/> + <alpha xml:lang="no-nb" xml:id="id5"> + <epsilon and="solid 1px green" xml:lang="no"/> + <nu desciption="attribute-value" xml:lang="nb"> + <psi xml:id="id6"> + <omicron/> + <eta xml:lang="no"/> + <mu> + <iota true="attribute"/> + <mu attr="false" xml:id="id7"/> + <nu xml:lang="en-US" xml:id="id8"> + <any> + <green>This text must be green</green> + </any> + </nu> + </mu> + </psi> + </nu> + </alpha> + </psi> + </pi> + </gamma> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]//kappa[@xml:id="id2"][not(child::node())][following-sibling::*[@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]//lambda[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@att][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::psi[@content="_blank"][@xml:id="id7"]//kappa[starts-with(concat(@data,"-"),"this-")][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:id="id1"> + <kappa xml:id="id2"/> + <any xml:lang="en" xml:id="id3"> + <lambda xml:id="id4"/> + <omega xml:lang="en-US" xml:id="id5"> + <xi att="_blank" xml:lang="en" xml:id="id6"/> + <psi content="_blank" xml:id="id7"> + <kappa data="this-is-att-value" xml:id="id8"> + <green>This text must be green</green> + </kappa> + </psi> + </omega> + </any> + </iota> + </tree> + </test> + <test> + <xpath>//tau[@data="solid 1px green"][@xml:lang="nb"][@xml:id="id1"]//zeta[@xml:lang="nb"][not(child::node())][following-sibling::upsilon[@xml:lang="nb"][preceding-sibling::*[position() = 1]]/*[@content="this-is-att-value"][not(preceding-sibling::*)][following-sibling::sigma[starts-with(concat(@false,"-"),"content-")][@xml:lang="nb"][not(following-sibling::*)]//lambda[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::theta[@desciption="attribute"][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@and][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(concat(@data,"-"),"100%-")][not(following-sibling::*)]//eta[@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]//alpha[not(child::node())][following-sibling::omicron[starts-with(@content,"this.nodeVal")][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@object="123456789"][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="no"][@xml:id="id5"][not(following-sibling::*)]/eta[@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[starts-with(@number,"this.")][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:id="id8"][preceding-sibling::*[position() = 2]]//iota/iota[@name][@xml:id="id9"][not(preceding-sibling::*)]/tau[following-sibling::chi[contains(@true,"e")][@xml:id="id10"][preceding-sibling::*[position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <tau data="solid 1px green" xml:lang="nb" xml:id="id1"> + <zeta xml:lang="nb"/> + <upsilon xml:lang="nb"> + <any content="this-is-att-value"/> + <sigma false="content" xml:lang="nb"> + <lambda xml:lang="nb" xml:id="id2"/> + <theta desciption="attribute" xml:lang="nb" xml:id="id3"> + <epsilon and="123456789"/> + <kappa data="100%"> + <eta xml:lang="nb" xml:id="id4"> + <alpha/> + <omicron content="this.nodeValue"/> + <iota object="123456789" xml:lang="en-GB"/> + <phi xml:lang="no" xml:id="id5"> + <eta xml:lang="nb" xml:id="id6"/> + <lambda number="this.nodeValue" xml:id="id7"/> + <lambda xml:id="id8"> + <iota> + <iota name="attribute value" xml:id="id9"> + <tau/> + <chi true="content" xml:id="id10"> + <green>This text must be green</green> + </chi> + </iota> + </iota> + </lambda> + </phi> + </eta> + </kappa> + </theta> + </sigma> + </upsilon> + </tau> + </tree> + </test> + <test> + <xpath>//epsilon[contains(@attrib,"e")][@xml:id="id1"]//eta[@true][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@or][@xml:id="id2"][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 2]]//psi[@number][@xml:lang="nb"][@xml:id="id3"][following-sibling::*[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[@xml:lang="en"][@xml:id="id5"][not(following-sibling::*)]/gamma[@xml:id="id6"]/theta[not(preceding-sibling::*)][not(following-sibling::*)]/chi//lambda[@xml:lang="no-nb"]/gamma[@xml:lang="no"][@xml:id="id7"][not(child::node())][following-sibling::phi[@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::gamma[contains(@false,".nodeValue")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 3]]//tau[@xml:lang="no-nb"][@xml:id="id9"][not(child::node())][following-sibling::chi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <epsilon attrib="false" xml:id="id1"> + <eta true="_blank"/> + <eta or="true" xml:id="id2"/> + <sigma> + <psi number="this.nodeValue" xml:lang="nb" xml:id="id3"/> + <any xml:lang="no" xml:id="id4"> + <zeta xml:lang="en" xml:id="id5"> + <gamma xml:id="id6"> + <theta> + <chi> + <lambda xml:lang="no-nb"> + <gamma xml:lang="no" xml:id="id7"/> + <phi xml:lang="nb" xml:id="id8"/> + <gamma false="this.nodeValue" xml:lang="en"/> + <iota> + <tau xml:lang="no-nb" xml:id="id9"/> + <chi xml:lang="no-nb"> + <green>This text must be green</green> + </chi> + </iota> + </lambda> + </chi> + </theta> + </gamma> + </zeta> + </any> + </sigma> + </epsilon> + </tree> + </test> + <test> + <xpath>//pi[@string="100%"][@xml:lang="en"]/chi[@xml:lang="en"][@xml:id="id1"]/xi[contains(concat(@content,"$"),"se$")][not(preceding-sibling::*)]//alpha[contains(@title," ")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::rho[@xml:id="id3"][not(following-sibling::*)]/delta[@name="attribute value"][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[contains(concat(@delete,"$"),"e$")][@xml:lang="nb"][not(child::node())][following-sibling::epsilon[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::epsilon)]/alpha[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::psi[starts-with(concat(@attribute,"-"),"this.nodeValue-")][@xml:id="id5"][preceding-sibling::*[position() = 1]]//tau[starts-with(@title,"_blan")][not(following-sibling::*)]/*[@delete][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::psi[contains(@or,"nother attribute ")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::pi[following-sibling::nu[starts-with(concat(@object,"-"),"solid 1px green-")][@xml:id="id7"][preceding-sibling::*[position() = 3]][following-sibling::kappa[contains(@content,"attribute va")][@xml:id="id8"][not(child::node())][following-sibling::delta[@xml:lang="no"][not(following-sibling::*)]//phi[@and="attribute-value"][@xml:lang="no-nb"][not(child::node())][following-sibling::theta[contains(@att,"nk")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[starts-with(@object,"attr")][not(child::node())][following-sibling::mu[@xml:lang="nb"][not(following-sibling::*)]/phi[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@xml:lang="en-GB"][@xml:id="id11"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <pi string="100%" xml:lang="en"> + <chi xml:lang="en" xml:id="id1"> + <xi content="false"> + <alpha title="attribute value" xml:lang="nb" xml:id="id2"/> + <rho xml:id="id3"> + <delta name="attribute value" xml:lang="en"> + <lambda delete="attribute" xml:lang="nb"/> + <epsilon xml:lang="no" xml:id="id4"> + <alpha xml:lang="en-US"/> + <psi attribute="this.nodeValue" xml:id="id5"> + <tau title="_blank"> + <any delete="attribute-value" xml:id="id6"/> + <psi or="another attribute value"/> + <pi/> + <nu object="solid 1px green" xml:id="id7"/> + <kappa content="attribute value" xml:id="id8"/> + <delta xml:lang="no"> + <phi and="attribute-value" xml:lang="no-nb"/> + <theta att="_blank" xml:lang="nb"/> + <beta object="attribute"/> + <mu xml:lang="nb"> + <phi xml:id="id9"> + <zeta xml:lang="nb" xml:id="id10"> + <xi xml:lang="en-GB" xml:id="id11"> + <green>This text must be green</green> + </xi> + </zeta> + </phi> + </mu> + </delta> + </tau> + </psi> + </epsilon> + </delta> + </rho> + </xi> + </chi> + </pi> + </tree> + </test> + <test> + <xpath>//tau/xi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@insert][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@token][not(following-sibling::*)]/tau[@xml:id="id1"]//zeta[contains(@insert,"100")][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[not(child::node())][following-sibling::alpha[@xml:lang="en-US"][preceding-sibling::*[position() = 2]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau> + <xi xml:lang="en-GB"/> + <eta insert="false"/> + <theta token="true"> + <tau xml:id="id1"> + <zeta insert="100%" xml:lang="nb"/> + <beta/> + <alpha xml:lang="en-US"> + <green>This text must be green</green> + </alpha> + </tau> + </theta> + </tau> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@number,"_bla")][@xml:lang="en"]/tau[@xml:id="id1"][not(preceding-sibling::*)]/eta[contains(@src,"deValue")][@xml:lang="en"][following-sibling::gamma[contains(concat(@false,"$"),"100%$")][@xml:id="id2"][following-sibling::alpha[not(following-sibling::*)]/nu[starts-with(concat(@data,"-"),"this-")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[starts-with(@att,"attrib")][preceding-sibling::*[position() = 1]][following-sibling::pi[contains(@att,"a")][preceding-sibling::*[position() = 2]][following-sibling::*[@false][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::psi[starts-with(@and,"another attribu")][@xml:id="id4"][not(preceding-sibling::psi)]//epsilon[starts-with(concat(@insert,"-"),"attribute-")][@xml:id="id5"][following-sibling::omega[@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/theta[@attribute][@xml:id="id7"][not(child::node())][following-sibling::nu[@xml:lang="en"]//omicron[@att][@xml:lang="en-US"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[@insert][@xml:lang="no"][following-sibling::*[position()=3]][not(child::node())][following-sibling::alpha[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::lambda[@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::nu[not(following-sibling::*)]//xi[@xml:lang="en"][@xml:id="id10"][following-sibling::*[position()=3]][not(child::node())][following-sibling::tau[contains(concat(@data,"$"),"false$")][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[@xml:lang="en"][not(child::node())][following-sibling::theta[@delete="attribute"][@xml:id="id12"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <omega number="_blank" xml:lang="en"> + <tau xml:id="id1"> + <eta src="this.nodeValue" xml:lang="en"/> + <gamma false="100%" xml:id="id2"/> + <alpha> + <nu data="this-is-att-value" xml:lang="en-US"/> + <delta att="attribute"/> + <pi att="attribute value"/> + <any false="_blank" xml:lang="no-nb" xml:id="id3"/> + <psi and="another attribute value" xml:id="id4"> + <epsilon insert="attribute" xml:id="id5"/> + <omega xml:lang="en" xml:id="id6"> + <theta attribute="another attribute value" xml:id="id7"/> + <nu xml:lang="en"> + <omicron att="solid 1px green" xml:lang="en-US" xml:id="id8"> + <omega insert="false" xml:lang="no"/> + <alpha xml:lang="nb"/> + <lambda xml:id="id9"/> + <nu> + <xi xml:lang="en" xml:id="id10"/> + <tau data="false" xml:id="id11"/> + <zeta xml:lang="en"/> + <theta delete="attribute" xml:id="id12"> + <green>This text must be green</green> + </theta> + </nu> + </omicron> + </nu> + </omega> + </psi> + </alpha> + </tau> + </omega> + </tree> + </test> + <test> + <xpath>//gamma[@xml:id="id1"]//rho[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id3"][not(following-sibling::*)]//chi[@string][not(following-sibling::chi)][not(child::node())][following-sibling::epsilon[contains(concat(@abort,"$"),"value$")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::theta[@data="solid 1px green"][@xml:id="id5"]//omega[starts-with(@true,"this.n")][@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)][not(preceding-sibling::omega or following-sibling::omega)]/theta[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[contains(concat(@attribute,"$"),"bute value$")][@xml:lang="en-GB"][following-sibling::kappa[@src][@xml:lang="nb"][@xml:id="id8"]/iota[@xml:id="id9"][not(following-sibling::*)]/upsilon[starts-with(@insert,"fal")][@xml:lang="no"][@xml:id="id10"]//phi[not(following-sibling::*)]/lambda[not(following-sibling::*)]//chi[@data][@xml:lang="no-nb"][not(child::node())][following-sibling::theta[@xml:id="id11"][not(following-sibling::*)]]]][position() = 1]]]]</xpath> + <tree> + <gamma xml:id="id1"> + <rho xml:lang="nb" xml:id="id2"/> + <iota xml:id="id3"> + <chi string="attribute value"/> + <epsilon abort="attribute value" xml:id="id4"/> + <theta data="solid 1px green" xml:id="id5"> + <omega true="this.nodeValue" xml:lang="nb" xml:id="id6"> + <theta xml:id="id7"/> + <eta attribute="attribute value" xml:lang="en-GB"/> + <kappa src="content" xml:lang="nb" xml:id="id8"> + <iota xml:id="id9"> + <upsilon insert="false" xml:lang="no" xml:id="id10"> + <phi> + <lambda> + <chi data="attribute-value" xml:lang="no-nb"/> + <theta xml:id="id11"> + <green>This text must be green</green> + </theta> + </lambda> + </phi> + </upsilon> + </iota> + </kappa> + </omega> + </theta> + </iota> + </gamma> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no-nb"]//chi[@name="this.nodeValue"][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@delete][@xml:lang="en-US"][@xml:id="id1"][not(child::node())][following-sibling::kappa[@true][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/*[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::sigma[@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::nu[@xml:id="id5"][preceding-sibling::*[position() = 2]]//delta[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[starts-with(@desciption,"true")][@xml:lang="no-nb"][@xml:id="id7"]/omega[starts-with(concat(@abort,"-"),"123456789-")][@xml:id="id8"]//tau[starts-with(concat(@src,"-"),"false-")][@xml:lang="nb"][@xml:id="id9"][not(following-sibling::*)]//lambda[contains(concat(@or,"$"),"een$")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[contains(@attribute,"ls")][@xml:lang="no-nb"][following-sibling::chi[@class][@xml:id="id10"][not(following-sibling::*)]//lambda[@string][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::psi[following-sibling::upsilon[@xml:id="id11"][not(following-sibling::*)]/chi[starts-with(@src,"123456")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::theta[preceding-sibling::*[position() = 1]][following-sibling::epsilon[contains(@number,"ribute value")][preceding-sibling::*[position() = 2]][not(preceding-sibling::epsilon or following-sibling::epsilon)][following-sibling::kappa[@xml:lang="nb"]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <tau xml:lang="no-nb"> + <chi name="this.nodeValue" xml:lang="en"> + <rho delete="solid 1px green" xml:lang="en-US" xml:id="id1"/> + <kappa true="solid 1px green" xml:lang="no" xml:id="id2"> + <any xml:lang="no-nb" xml:id="id3"/> + <sigma xml:lang="no" xml:id="id4"/> + <nu xml:id="id5"> + <delta xml:id="id6"/> + <sigma desciption="true" xml:lang="no-nb" xml:id="id7"> + <omega abort="123456789" xml:id="id8"> + <tau src="false" xml:lang="nb" xml:id="id9"> + <lambda or="solid 1px green"/> + <omicron attribute="false" xml:lang="no-nb"/> + <chi class="this.nodeValue" xml:id="id10"> + <lambda string="attribute-value"/> + <mu xml:lang="no"/> + <psi/> + <upsilon xml:id="id11"> + <chi src="123456789" xml:lang="en"/> + <theta/> + <epsilon number="attribute value"/> + <kappa xml:lang="nb"> + <green>This text must be green</green> + </kappa> + </upsilon> + </chi> + </tau> + </omega> + </sigma> + </nu> + </kappa> + </chi> + </tau> + </tree> + </test> + <test> + <xpath>//epsilon[contains(@attribute,"als")][@xml:id="id1"]/omicron[@xml:id="id2"]/mu[starts-with(@title,"another att")][@xml:lang="nb"][@xml:id="id3"][following-sibling::kappa[@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::psi[starts-with(@number,"this-is-at")][@xml:lang="en"][preceding-sibling::*[position() = 2]]//*[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@xml:id="id5"][not(preceding-sibling::*)]/rho[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[@xml:id="id6"]/lambda[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)]/chi[@xml:lang="nb"][@xml:id="id8"][not(following-sibling::chi)][not(child::node())][following-sibling::theta[contains(concat(@class,"$"),"ue$")][@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 2]]//pi[starts-with(concat(@data,"-"),"attribute-")][not(preceding-sibling::*)][not(preceding-sibling::pi)][not(child::node())][following-sibling::nu[@att][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon attribute="false" xml:id="id1"> + <omicron xml:id="id2"> + <mu title="another attribute value" xml:lang="nb" xml:id="id3"/> + <kappa xml:lang="no-nb"/> + <psi number="this-is-att-value" xml:lang="en"> + <any xml:lang="no" xml:id="id4"> + <sigma xml:id="id5"> + <rho/> + <tau xml:id="id6"> + <lambda xml:lang="no" xml:id="id7"> + <chi xml:lang="nb" xml:id="id8"/> + <theta class="true" xml:lang="en-GB" xml:id="id9"/> + <zeta> + <pi data="attribute"/> + <nu att="this-is-att-value"> + <green>This text must be green</green> + </nu> + </zeta> + </lambda> + </tau> + </sigma> + </any> + </psi> + </omicron> + </epsilon> + </tree> + </test> + <test> + <xpath>//gamma//upsilon[not(child::node())][following-sibling::nu[@xml:id="id1"][not(child::node())][following-sibling::eta[starts-with(concat(@att,"-"),"another attribute value-")][preceding-sibling::*[position() = 2]]//sigma[not(preceding-sibling::*)]//lambda[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[@xml:id="id3"][following-sibling::mu[contains(@title,"tt-valu")][@xml:id="id4"][not(following-sibling::*)]/sigma[contains(@title,"ibute")]/theta[contains(@true," value")][not(following-sibling::*)]/gamma[position() = 1]]][position() = 1]]]</xpath> + <tree> + <gamma> + <upsilon/> + <nu xml:id="id1"/> + <eta att="another attribute value"> + <sigma> + <lambda xml:lang="en-US" xml:id="id2"/> + <rho xml:id="id3"/> + <mu title="this-is-att-value" xml:id="id4"> + <sigma title="attribute-value"> + <theta true="attribute value"> + <gamma> + <green>This text must be green</green> + </gamma> + </theta> + </sigma> + </mu> + </sigma> + </eta> + </gamma> + </tree> + </test> + <test> + <xpath>//eta[@xml:id="id1"]//gamma[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[not(child::node())][following-sibling::lambda[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::xi[starts-with(concat(@delete,"-"),"this-")][preceding-sibling::*[position() = 2]]//psi[contains(@desciption,"tribute")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]/tau[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omega[@content="true"][@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/mu[contains(concat(@number,"$"),"lse$")][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="en-US"][@xml:id="id8"]//pi[not(following-sibling::*)]//pi[contains(@title,"t")][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[not(preceding-sibling::*)]/gamma[contains(@name,"ntent")][not(child::node())][following-sibling::theta[@string][@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[not(following-sibling::*)]//alpha[contains(@src,"x gree")][@xml:lang="nb"]//delta[@xml:lang="en-US"][not(child::node())][following-sibling::upsilon[contains(@delete,"k")][@xml:lang="nb"][@xml:id="id11"][following-sibling::*[position()=1]][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id12"]/upsilon[starts-with(@delete,"this-is-att-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@xml:id="id13"][following-sibling::*[position()=1]][following-sibling::omega[starts-with(concat(@class,"-"),"true-")][@xml:lang="no"][@xml:id="id14"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta xml:id="id1"> + <gamma xml:lang="en" xml:id="id2"> + <chi/> + <lambda xml:id="id3"/> + <xi delete="this-is-att-value"> + <psi desciption="attribute" xml:lang="en-US" xml:id="id4"> + <tau xml:id="id5"/> + <omega content="true" xml:lang="no-nb" xml:id="id6"/> + <phi xml:lang="en-US" xml:id="id7"> + <mu number="false"/> + <nu xml:lang="en-US" xml:id="id8"> + <pi> + <pi title="content" xml:lang="no" xml:id="id9"> + <alpha> + <gamma name="content"/> + <theta string="solid 1px green" xml:lang="en" xml:id="id10"> + <omega> + <alpha src="solid 1px green" xml:lang="nb"> + <delta xml:lang="en-US"/> + <upsilon delete="_blank" xml:lang="nb" xml:id="id11"/> + <omicron xml:lang="en-GB" xml:id="id12"> + <upsilon delete="this-is-att-value" xml:lang="en-GB"> + <kappa xml:id="id13"/> + <omega class="true" xml:lang="no" xml:id="id14"> + <green>This text must be green</green> + </omega> + </upsilon> + </omicron> + </alpha> + </omega> + </theta> + </alpha> + </pi> + </pi> + </nu> + </phi> + </psi> + </xi> + </gamma> + </eta> + </tree> + </test> + <test> + <xpath>//pi[@xml:id="id1"]/zeta[contains(concat(@and,"$"),"n$")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=5]][following-sibling::gamma[@xml:lang="en-US"][@xml:id="id3"][not(child::node())][following-sibling::psi[@xml:lang="en"][not(child::node())][following-sibling::iota[@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::zeta[starts-with(@number,"attr")][@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::beta[@xml:lang="en"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//gamma[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[contains(concat(@attrib,"$"),"3456789$")][@xml:id="id5"][preceding-sibling::*[position() = 1]]//omega[starts-with(@content,"c")][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:lang="no-nb"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[starts-with(@attribute,"att")][@xml:lang="nb"]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <pi xml:id="id1"> + <zeta and="solid 1px green" xml:lang="no-nb" xml:id="id2"/> + <gamma xml:lang="en-US" xml:id="id3"/> + <psi xml:lang="en"/> + <iota xml:id="id4"/> + <zeta number="attribute" xml:lang="en-GB"/> + <beta xml:lang="en"> + <gamma xml:lang="en"/> + <omega attrib="123456789" xml:id="id5"> + <omega content="content" xml:id="id6"> + <upsilon xml:lang="no-nb" xml:id="id7"> + <gamma attribute="attribute-value" xml:lang="nb"> + <green>This text must be green</green> + </gamma> + </upsilon> + </omega> + </omega> + </beta> + </pi> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]/chi[contains(concat(@class,"$"),"k$")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[@xml:lang="nb"][not(preceding-sibling::*)]/mu[contains(@number,"ute")][@xml:lang="en-US"][not(following-sibling::*)]/kappa[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[starts-with(concat(@number,"-"),"attribute value-")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/iota[starts-with(concat(@number,"-"),"true-")][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id4"][following-sibling::upsilon[@xml:id="id5"][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:id="id1"> + <chi class="_blank" xml:lang="no" xml:id="id2"/> + <any> + <mu xml:lang="nb"> + <mu number="attribute" xml:lang="en-US"> + <kappa xml:lang="en-US"/> + <gamma number="attribute value" xml:lang="en" xml:id="id3"> + <iota number="true"/> + <rho xml:lang="en-GB" xml:id="id4"/> + <upsilon xml:id="id5"> + <green>This text must be green</green> + </upsilon> + </gamma> + </mu> + </mu> + </any> + </nu> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@attribute,"-"),"true-")][@xml:id="id1"]/chi[starts-with(concat(@or,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//beta[@content][@xml:id="id4"]//upsilon[@delete][@xml:id="id5"][not(following-sibling::*)]/rho[contains(@desciption,"tru")][@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)]//nu[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::pi[@title][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][@xml:id="id8"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omega[starts-with(@number,"123")][@xml:lang="no-nb"][@xml:id="id9"][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id10"]/sigma[@xml:lang="en-US"][@xml:id="id11"][following-sibling::omicron[@xml:lang="nb"][@xml:id="id12"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[starts-with(concat(@or,"-"),"123456789-")][@xml:id="id13"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <delta attribute="true" xml:id="id1"> + <chi or="this.nodeValue" xml:lang="nb" xml:id="id2"/> + <theta xml:lang="en-US"/> + <nu xml:lang="no-nb" xml:id="id3"> + <beta content="attribute-value" xml:id="id4"> + <upsilon delete="100%" xml:id="id5"> + <rho desciption="true" xml:lang="nb" xml:id="id6"> + <nu xml:lang="no-nb"/> + <pi title="false" xml:id="id7"/> + <omicron xml:lang="en-US"/> + <rho xml:lang="no-nb" xml:id="id8"/> + <omega number="123456789" xml:lang="no-nb" xml:id="id9"/> + <upsilon xml:lang="no-nb" xml:id="id10"> + <sigma xml:lang="en-US" xml:id="id11"/> + <omicron xml:lang="nb" xml:id="id12"/> + <tau or="123456789" xml:id="id13"> + <green>This text must be green</green> + </tau> + </upsilon> + </rho> + </upsilon> + </beta> + </nu> + </delta> + </tree> + </test> + <test> + <xpath>//epsilon[@object="attribute"][@xml:id="id1"]/mu[starts-with(@att,"1")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu//lambda[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@attrib][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::*[position()=3]][following-sibling::omicron[starts-with(concat(@title,"-"),"_blank-")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::omicron)][not(child::node())][following-sibling::upsilon[starts-with(concat(@number,"-"),"_blank-")][@xml:lang="en"][not(child::node())][following-sibling::iota[starts-with(concat(@delete,"-"),"100%-")][@xml:lang="no-nb"][@xml:id="id7"]/psi[not(following-sibling::*)]//iota[starts-with(@att,"this-is-att-valu")][@xml:id="id8"][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <epsilon object="attribute" xml:id="id1"> + <mu att="100%" xml:id="id2"> + <phi xml:id="id3"/> + <phi xml:id="id4"> + <nu> + <lambda xml:lang="no" xml:id="id5"/> + <tau attrib="true" xml:lang="en-GB" xml:id="id6"/> + <omicron title="_blank" xml:lang="en-US"/> + <upsilon number="_blank" xml:lang="en"/> + <iota delete="100%" xml:lang="no-nb" xml:id="id7"> + <psi> + <iota att="this-is-att-value" xml:id="id8"> + <green>This text must be green</green> + </iota> + </psi> + </iota> + </nu> + </phi> + </mu> + </epsilon> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(concat(@title,"-"),"content-")][@xml:id="id1"]/zeta[starts-with(concat(@att,"-"),"content-")][@xml:lang="en"]/psi[@att][@xml:lang="no"][not(following-sibling::*)][not(preceding-sibling::psi)]/xi[@or="attribute value"][not(child::node())][following-sibling::upsilon[not(following-sibling::*)]//alpha[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::xi[contains(@false,"fa")][@xml:lang="en"][following-sibling::*[position()=4]][following-sibling::xi[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::iota[contains(concat(@object,"$")," attribute value$")][@xml:id="id2"][following-sibling::lambda[starts-with(concat(@title,"-"),"this-")][@xml:lang="no-nb"][@xml:id="id3"][not(child::node())][following-sibling::omicron[@xml:lang="en"][preceding-sibling::*[position() = 5]]/alpha[@data="123456789"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@data="solid 1px green"][@xml:lang="en-GB"]//delta[following-sibling::*[position()=1]][following-sibling::lambda[starts-with(concat(@desciption,"-"),"this.nodeValue-")][@xml:lang="en-US"]/sigma[starts-with(@name,"12")][@xml:lang="en-GB"]/phi[contains(concat(@attrib,"$"),"100%$")]//zeta[@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron title="content" xml:id="id1"> + <zeta att="content" xml:lang="en"> + <psi att="solid 1px green" xml:lang="no"> + <xi or="attribute value"/> + <upsilon> + <alpha xml:lang="en-GB"/> + <xi false="false" xml:lang="en"/> + <xi xml:lang="en-GB"/> + <iota object="another attribute value" xml:id="id2"/> + <lambda title="this-is-att-value" xml:lang="no-nb" xml:id="id3"/> + <omicron xml:lang="en"> + <alpha data="123456789" xml:id="id4"> + <rho data="solid 1px green" xml:lang="en-GB"> + <delta/> + <lambda desciption="this.nodeValue" xml:lang="en-US"> + <sigma name="123456789" xml:lang="en-GB"> + <phi attrib="100%"> + <zeta xml:lang="en-GB"> + <green>This text must be green</green> + </zeta> + </phi> + </sigma> + </lambda> + </rho> + </alpha> + </omicron> + </upsilon> + </psi> + </zeta> + </omicron> + </tree> + </test> + <test> + <xpath>//chi[starts-with(concat(@object,"-"),"solid 1px green-")][@xml:lang="en-US"]/xi[contains(@string,"onte")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::iota[@insert="true"][preceding-sibling::*[position() = 1]]/mu[@number="another attribute value"][@xml:lang="nb"][not(child::node())][following-sibling::omicron[@or="this-is-att-value"][@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]]/eta[contains(@desciption,"deValue")][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 1]]/upsilon[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[@data="solid 1px green"][@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/*[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::lambda[starts-with(@attr,"1234")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]]//zeta[starts-with(concat(@string,"-"),"content-")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi object="solid 1px green" xml:lang="en-US"> + <xi string="content" xml:lang="nb"/> + <iota insert="true"> + <mu number="another attribute value" xml:lang="nb"/> + <omicron or="this-is-att-value" xml:lang="no-nb" xml:id="id1"> + <eta desciption="this.nodeValue"/> + <upsilon> + <upsilon/> + <epsilon data="solid 1px green" xml:lang="en-GB" xml:id="id2"> + <any xml:lang="en-GB" xml:id="id3"/> + <lambda attr="123456789" xml:lang="no" xml:id="id4"> + <zeta string="content"> + <green>This text must be green</green> + </zeta> + </lambda> + </epsilon> + </upsilon> + </omicron> + </iota> + </chi> + </tree> + </test> + <test> + <xpath>//epsilon[@data="true"]//lambda[starts-with(@attrib,"false")][@xml:lang="nb"][following-sibling::*[@xml:lang="no"][not(following-sibling::*)]/eta[contains(concat(@delete,"$"),"ribute value$")][@xml:lang="en-US"][@xml:id="id1"]/xi[@title][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id2"]//omicron[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@false="this.nodeValue"][following-sibling::mu[not(child::node())][following-sibling::*[starts-with(concat(@false,"-"),"another attribute value-")][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::beta[starts-with(@content,"so")][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@att][@xml:id="id4"][not(following-sibling::*)][position() = 1]]][position() = 1]]]]]]</xpath> + <tree> + <epsilon data="true"> + <lambda attrib="false" xml:lang="nb"/> + <any xml:lang="no"> + <eta delete="another attribute value" xml:lang="en-US" xml:id="id1"> + <xi title="false"/> + <upsilon xml:lang="no-nb" xml:id="id2"> + <omicron xml:id="id3"/> + <xi false="this.nodeValue"/> + <mu/> + <any false="another attribute value"/> + <beta content="solid 1px green"/> + <alpha att="123456789" xml:id="id4"> + <green>This text must be green</green> + </alpha> + </upsilon> + </eta> + </any> + </epsilon> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="en"][@xml:id="id1"]/*[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]/omega[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[starts-with(@data,"thi")][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@false][following-sibling::*[position()=1]][not(preceding-sibling::eta)][following-sibling::theta[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]]/iota[not(preceding-sibling::*)]//epsilon[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <rho xml:lang="en" xml:id="id1"> + <any xml:lang="en-US" xml:id="id2"> + <omega xml:lang="nb"> + <tau data="this-is-att-value"> + <epsilon xml:lang="en-US"/> + <eta false="this-is-att-value"/> + <theta xml:lang="no" xml:id="id3"> + <iota> + <epsilon xml:id="id4"> + <green>This text must be green</green> + </epsilon> + </iota> + </theta> + </tau> + </omega> + </any> + </rho> + </tree> + </test> + <test> + <xpath>//eta[contains(@token,"bla")][@xml:lang="no"][@xml:id="id1"]/tau[@attribute="another attribute value"][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@abort="this-is-att-value"][@xml:lang="en-US"][not(child::node())][following-sibling::delta[starts-with(concat(@title,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@token][@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=4]][not(child::node())][following-sibling::theta[@xml:lang="en"][@xml:id="id5"][following-sibling::*[position()=3]][following-sibling::xi[@xml:lang="no"][@xml:id="id6"][following-sibling::beta[@xml:lang="no"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::kappa[contains(concat(@desciption,"$"),"alse$")][@xml:id="id7"][not(following-sibling::*)]/kappa[not(following-sibling::*)]//theta[@xml:id="id8"][not(child::node())][following-sibling::omicron[@data][following-sibling::psi[@xml:lang="nb"][not(following-sibling::*)]//rho[contains(@token,"t")][@xml:lang="nb"][not(following-sibling::*)][not(preceding-sibling::rho)]//omega[@xml:lang="en-GB"][@xml:id="id9"][not(following-sibling::*)]/eta[starts-with(@false,"t")][@xml:lang="en-GB"]/eta[@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)]//omicron[@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta token="_blank" xml:lang="no" xml:id="id1"> + <tau attribute="another attribute value" xml:lang="no-nb" xml:id="id2"> + <kappa abort="this-is-att-value" xml:lang="en-US"/> + <delta title="this.nodeValue" xml:lang="nb" xml:id="id3"> + <any token="content" xml:lang="no-nb" xml:id="id4"/> + <theta xml:lang="en" xml:id="id5"/> + <xi xml:lang="no" xml:id="id6"/> + <beta xml:lang="no"/> + <kappa desciption="false" xml:id="id7"> + <kappa> + <theta xml:id="id8"/> + <omicron data="_blank"/> + <psi xml:lang="nb"> + <rho token="true" xml:lang="nb"> + <omega xml:lang="en-GB" xml:id="id9"> + <eta false="true" xml:lang="en-GB"> + <eta xml:lang="en-US" xml:id="id10"> + <omicron xml:id="id11"> + <green>This text must be green</green> + </omicron> + </eta> + </eta> + </omega> + </rho> + </psi> + </kappa> + </kappa> + </delta> + </tau> + </eta> + </tree> + </test> + <test> + <xpath>//chi[@attrib="content"][@xml:id="id1"]/nu[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="nb"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[@xml:id="id4"]//beta[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::lambda[contains(concat(@name,"$"),"his-is-att-value$")][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[contains(concat(@att,"$"),"deValue$")][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <chi attrib="content" xml:id="id1"> + <nu xml:lang="no" xml:id="id2"/> + <gamma xml:lang="nb" xml:id="id3"/> + <sigma xml:id="id4"> + <beta xml:lang="en-GB"/> + <lambda name="this-is-att-value" xml:lang="en-US" xml:id="id5"/> + <sigma att="this.nodeValue" xml:lang="no" xml:id="id6"> + <green>This text must be green</green> + </sigma> + </sigma> + </chi> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="en-US"][@xml:id="id1"]//omega[@xml:lang="no"][@xml:id="id2"]//*[@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]//sigma[@name][@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]/pi[starts-with(@token,"attribute-va")][@xml:lang="no-nb"][not(preceding-sibling::*)]/epsilon[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::sigma[@true][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[starts-with(@attr,"_bla")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::theta[@xml:lang="en"][@xml:id="id6"]//eta[@name][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@name][@xml:lang="nb"][following-sibling::*[position()=3]][following-sibling::eta[@title][@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::lambda[@xml:id="id8"][preceding-sibling::*[position() = 3]][following-sibling::pi[@xml:id="id9"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/omicron[not(preceding-sibling::*)][not(following-sibling::*)]//psi[@xml:lang="no-nb"][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id10"][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]]]][position() = 1]]]]]</xpath> + <tree> + <lambda xml:lang="en-US" xml:id="id1"> + <omega xml:lang="no" xml:id="id2"> + <any xml:lang="en-GB" xml:id="id3"> + <sigma name="attribute-value" xml:lang="en" xml:id="id4"> + <pi token="attribute-value" xml:lang="no-nb"> + <epsilon xml:lang="en"/> + <sigma true="100%" xml:id="id5"/> + <theta attr="_blank" xml:lang="nb"/> + <theta xml:lang="en" xml:id="id6"> + <eta name="attribute" xml:lang="en" xml:id="id7"/> + <lambda name="123456789" xml:lang="nb"/> + <eta title="solid 1px green" xml:lang="nb"/> + <lambda xml:id="id8"/> + <pi xml:id="id9"> + <omicron> + <psi xml:lang="no-nb"/> + <delta xml:lang="no-nb" xml:id="id10"/> + <sigma xml:lang="en-GB"> + <green>This text must be green</green> + </sigma> + </omicron> + </pi> + </theta> + </pi> + </sigma> + </any> + </omega> + </lambda> + </tree> + </test> + <test> + <xpath>//eta[contains(@attrib,"lue")][@xml:id="id1"]/phi[@data][@xml:lang="en-GB"][following-sibling::omicron[contains(@attribute,"-att-val")][not(following-sibling::*)]/kappa[contains(@data,"t")][not(preceding-sibling::*)][following-sibling::nu[@title][following-sibling::*[position()=3]][following-sibling::delta[@xml:id="id2"][not(preceding-sibling::delta)][following-sibling::*[@xml:id="id3"][preceding-sibling::*[position() = 3]][following-sibling::xi[starts-with(concat(@delete,"-"),"another attribute value-")][@xml:id="id4"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/theta[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[contains(@att,"tribu")][@xml:lang="no"][@xml:id="id6"][following-sibling::omicron[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[@content][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@number][@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <eta attrib="this-is-att-value" xml:id="id1"> + <phi data="true" xml:lang="en-GB"/> + <omicron attribute="this-is-att-value"> + <kappa data="content"/> + <nu title="_blank"/> + <delta xml:id="id2"/> + <any xml:id="id3"/> + <xi delete="another attribute value" xml:id="id4"> + <theta xml:lang="en-GB" xml:id="id5"> + <rho att="another attribute value" xml:lang="no" xml:id="id6"/> + <omicron> + <psi content="123456789" xml:lang="nb" xml:id="id7"> + <sigma number="false" xml:lang="nb" xml:id="id8"> + <green>This text must be green</green> + </sigma> + </psi> + </omicron> + </theta> + </xi> + </omicron> + </eta> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no-nb"][@xml:id="id1"]//tau[@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::psi[@xml:id="id3"][preceding-sibling::*[position() = 1]]//xi[contains(concat(@false,"$"),"alse$")][@xml:id="id4"][following-sibling::kappa[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[not(preceding-sibling::*)]/alpha[@xml:id="id5"]/phi[@att][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::upsilon[@and][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omega[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]</xpath> + <tree> + <beta xml:lang="no-nb" xml:id="id1"> + <tau xml:lang="nb" xml:id="id2"/> + <psi xml:id="id3"> + <xi false="false" xml:id="id4"/> + <kappa> + <lambda> + <alpha xml:id="id5"> + <phi att="_blank"/> + <gamma/> + <upsilon and="this.nodeValue" xml:id="id6"> + <omega xml:lang="no" xml:id="id7"> + <green>This text must be green</green> + </omega> + </upsilon> + </alpha> + </lambda> + </kappa> + </psi> + </beta> + </tree> + </test> + <test> + <xpath>//mu[@class]//pi[starts-with(concat(@delete,"-"),"true-")][not(following-sibling::*)]/omicron[contains(concat(@insert,"$"),"456789$")][@xml:lang="en-GB"][not(child::node())][following-sibling::lambda[@object][@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]]/delta[@or="_blank"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[starts-with(concat(@true,"-"),"100%-")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[contains(@name,"ttribut")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)]/kappa[contains(concat(@token,"$"),"attribute$")][@xml:lang="no-nb"][not(following-sibling::*)]/pi[@false][@xml:id="id4"][following-sibling::phi[@and][@xml:id="id5"][not(following-sibling::*)]/rho[starts-with(concat(@false,"-"),"attribute-")][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:id="id6"][not(following-sibling::*)]//lambda[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@name][@xml:lang="nb"][@xml:id="id8"][following-sibling::*[position()=3]][not(child::node())][following-sibling::lambda[@xml:lang="en"][@xml:id="id9"][not(child::node())][following-sibling::alpha[starts-with(@delete,"a")][@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="no"][@xml:id="id10"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu class="attribute-value"> + <pi delete="true"> + <omicron insert="123456789" xml:lang="en-GB"/> + <lambda object="false" xml:lang="no-nb" xml:id="id1"> + <delta or="_blank"> + <zeta true="100%" xml:id="id2"> + <tau name="attribute value" xml:lang="nb" xml:id="id3"> + <kappa token="attribute" xml:lang="no-nb"> + <pi false="solid 1px green" xml:id="id4"/> + <phi and="attribute" xml:id="id5"> + <rho false="attribute"/> + <gamma xml:id="id6"> + <lambda xml:id="id7"> + <phi name="attribute-value" xml:lang="nb" xml:id="id8"/> + <lambda xml:lang="en" xml:id="id9"/> + <alpha delete="attribute value" xml:lang="en"/> + <xi xml:lang="no" xml:id="id10"> + <green>This text must be green</green> + </xi> + </lambda> + </gamma> + </phi> + </kappa> + </tau> + </zeta> + </delta> + </lambda> + </pi> + </mu> + </tree> + </test> + <test> + <xpath>//nu[@attribute][@xml:lang="en"]//xi[contains(@object,"e")][@xml:lang="no"][@xml:id="id1"][following-sibling::*[position()=5]][not(child::node())][following-sibling::psi[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::pi[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omega[starts-with(@name,"false")][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][following-sibling::upsilon[@xml:lang="nb"][@xml:id="id4"][following-sibling::sigma[@true][@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)]/xi[@src][@xml:lang="no"][@xml:id="id6"][not(following-sibling::*)]//*[@attrib][@xml:id="id7"][not(child::node())][following-sibling::psi[starts-with(@attribute,"tr")][@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]/rho[@xml:id="id9"]/omicron[@desciption][@xml:lang="en"][not(preceding-sibling::omicron)][following-sibling::xi[not(following-sibling::*)]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <nu attribute="_blank" xml:lang="en"> + <xi object="attribute-value" xml:lang="no" xml:id="id1"/> + <psi xml:lang="nb" xml:id="id2"/> + <pi xml:lang="en-US" xml:id="id3"/> + <omega name="false" xml:lang="en-GB"/> + <upsilon xml:lang="nb" xml:id="id4"/> + <sigma true="true" xml:lang="en-US" xml:id="id5"> + <xi src="true" xml:lang="no" xml:id="id6"> + <any attrib="another attribute value" xml:id="id7"/> + <psi attribute="true" xml:lang="en-GB" xml:id="id8"> + <rho xml:id="id9"> + <omicron desciption="100%" xml:lang="en"/> + <xi> + <green>This text must be green</green> + </xi> + </rho> + </psi> + </xi> + </sigma> + </nu> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]//gamma[@token][@xml:lang="no"][@xml:id="id2"][following-sibling::*[position()=3]][following-sibling::tau[@xml:lang="en-GB"][following-sibling::*[position()=2]][following-sibling::xi[@xml:id="id3"][not(child::node())][following-sibling::xi[@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//upsilon[@xml:id="id5"][not(preceding-sibling::*)]/omega[contains(concat(@true,"$"),"0%$")][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::nu[preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::iota[@number="100%"][@xml:lang="en"][@xml:id="id7"][not(following-sibling::*)]/upsilon[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(@desciption,"t")][@xml:lang="en-US"][@xml:id="id9"]/*]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi xml:id="id1"> + <gamma token="attribute" xml:lang="no" xml:id="id2"/> + <tau xml:lang="en-GB"/> + <xi xml:id="id3"/> + <xi xml:id="id4"> + <upsilon xml:id="id5"> + <omega true="100%" xml:lang="en-GB" xml:id="id6"/> + <nu/> + <omega xml:lang="en"/> + <iota number="100%" xml:lang="en" xml:id="id7"> + <upsilon xml:lang="en-GB" xml:id="id8"> + <beta desciption="true" xml:lang="en-US" xml:id="id9"> + <any> + <green>This text must be green</green> + </any> + </beta> + </upsilon> + </iota> + </upsilon> + </xi> + </chi> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="en"]//tau[contains(concat(@true,"$"),"attribute value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(preceding-sibling::tau)]/omega[@false="attribute value"][@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)]//phi[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::rho[contains(concat(@att,"$"),"lank$")][not(following-sibling::*)]/eta[@xml:id="id2"][following-sibling::*[position()=3]][following-sibling::omicron[starts-with(concat(@att,"-"),"false-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::rho[@xml:id="id3"][following-sibling::delta[@xml:lang="en"][not(preceding-sibling::delta)]//omega[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/rho/alpha[following-sibling::*[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::sigma[@abort][@xml:id="id5"][not(following-sibling::*)]/omicron[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::chi[@xml:id="id7"][not(child::node())][following-sibling::iota[starts-with(concat(@true,"-"),"solid 1px green-")][@xml:id="id8"][preceding-sibling::*[position() = 3]][following-sibling::kappa[@xml:id="id9"]/nu[@and][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::iota[@or][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//iota[@xml:lang="no"][following-sibling::gamma[@att="this.nodeValue"][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:lang="en"> + <tau true="another attribute value" xml:lang="no-nb"> + <omega false="attribute value" xml:lang="nb" xml:id="id1"> + <phi xml:lang="nb"/> + <rho att="_blank"> + <eta xml:id="id2"/> + <omicron att="false" xml:lang="en"/> + <rho xml:id="id3"/> + <delta xml:lang="en"> + <omega xml:lang="en-US" xml:id="id4"> + <rho> + <alpha/> + <any/> + <sigma abort="content" xml:id="id5"> + <omicron xml:id="id6"/> + <phi xml:lang="en"/> + <chi xml:id="id7"/> + <iota true="solid 1px green" xml:id="id8"/> + <kappa xml:id="id9"> + <nu and="_blank" xml:id="id10"/> + <iota or="false" xml:lang="en-US"> + <iota xml:lang="no"/> + <gamma att="this.nodeValue" xml:lang="no"> + <green>This text must be green</green> + </gamma> + </iota> + </kappa> + </sigma> + </rho> + </omega> + </delta> + </rho> + </omega> + </tau> + </nu> + </tree> + </test> + <test> + <xpath>//upsilon[contains(@insert,"true")][@xml:lang="no"]//delta[starts-with(concat(@and,"-"),"this.nodeValue-")][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[starts-with(concat(@string,"-"),"this.nodeValue-")][@xml:id="id2"][not(child::node())][following-sibling::iota[@desciption][@xml:id="id3"][not(child::node())][following-sibling::psi[@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::rho/zeta[@xml:id="id5"][not(child::node())][following-sibling::beta[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <upsilon insert="true" xml:lang="no"> + <delta and="this.nodeValue" xml:lang="en-GB" xml:id="id1"> + <omicron string="this.nodeValue" xml:id="id2"/> + <iota desciption="attribute value" xml:id="id3"/> + <psi xml:lang="nb" xml:id="id4"/> + <rho> + <zeta xml:id="id5"/> + <beta xml:id="id6"> + <green>This text must be green</green> + </beta> + </rho> + </delta> + </upsilon> + </tree> + </test> + <test> + <xpath>//psi[@abort][@xml:lang="en"]/beta[starts-with(concat(@attribute,"-"),"123456789-")][@xml:id="id1"]/tau[@attr]/beta[@name][following-sibling::phi[contains(concat(@object,"$"),"lse$")][@xml:id="id2"][not(following-sibling::*)]/psi[starts-with(@abort,"f")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@number][@xml:lang="en-US"]/rho[starts-with(concat(@desciption,"-"),"_blank-")][@xml:id="id3"]/omicron[@att][@xml:lang="nb"][@xml:id="id4"][position() = 1]][position() = 1]]</xpath> + <tree> + <psi abort="solid 1px green" xml:lang="en"> + <beta attribute="123456789" xml:id="id1"> + <tau attr="false"> + <beta name="another attribute value"/> + <phi object="false" xml:id="id2"> + <psi abort="false" xml:lang="en-GB"/> + <omicron number="another attribute value" xml:lang="en-US"> + <rho desciption="_blank" xml:id="id3"> + <omicron att="solid 1px green" xml:lang="nb" xml:id="id4"> + <green>This text must be green</green> + </omicron> + </rho> + </omicron> + </phi> + </tau> + </beta> + </psi> + </tree> + </test> + <test> + <xpath>//lambda[contains(@src,"attribute-valu")][@xml:id="id1"]//upsilon[@xml:lang="en-US"][not(child::node())][following-sibling::nu[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(preceding-sibling::nu or following-sibling::nu)][not(preceding-sibling::nu)][following-sibling::lambda[@data][@xml:id="id3"][not(following-sibling::*)]//theta[@string="attribute"][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[not(child::node())][following-sibling::pi[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@class="attribute"][@xml:lang="nb"][preceding-sibling::*[position() = 3]]/lambda[starts-with(concat(@title,"-"),"this.nodeValue-")][@xml:lang="no-nb"][@xml:id="id6"][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 1]][following-sibling::iota[@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::phi[contains(@title,"ue")][@xml:lang="en"][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@attr="100%"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::kappa[starts-with(@delete,"1234")][@xml:lang="no-nb"][not(following-sibling::*)]//gamma[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id8"][following-sibling::sigma[@or][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <lambda src="attribute-value" xml:id="id1"> + <upsilon xml:lang="en-US"/> + <nu xml:lang="no" xml:id="id2"/> + <lambda data="_blank" xml:id="id3"> + <theta string="attribute" xml:lang="en" xml:id="id4"/> + <alpha/> + <pi xml:lang="en-US" xml:id="id5"/> + <rho class="attribute" xml:lang="nb"> + <lambda title="this.nodeValue" xml:lang="no-nb" xml:id="id6"/> + <xi/> + <iota xml:lang="nb" xml:id="id7"/> + <phi title="attribute-value" xml:lang="en"/> + <omicron attr="100%"/> + <kappa delete="123456789" xml:lang="no-nb"> + <gamma xml:lang="no"/> + <gamma xml:lang="no-nb" xml:id="id8"/> + <sigma or="content" xml:lang="nb"> + <green>This text must be green</green> + </sigma> + </kappa> + </rho> + </lambda> + </lambda> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]//pi[@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]//phi[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:id="id4"][preceding-sibling::*[position() = 1]]/sigma[contains(concat(@delete,"$"),"x green$")][following-sibling::kappa[contains(@true,"ibute val")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[@title][position() = 1]]]]</xpath> + <tree> + <phi xml:id="id1"> + <pi xml:lang="no" xml:id="id2"> + <phi xml:id="id3"/> + <upsilon xml:id="id4"> + <sigma delete="solid 1px green"/> + <kappa true="another attribute value" xml:id="id5"/> + <alpha title="attribute value"> + <green>This text must be green</green> + </alpha> + </upsilon> + </pi> + </phi> + </tree> + </test> + <test> + <xpath>//omicron[@src="this-is-att-value"][@xml:lang="no"]/upsilon[@and="attribute-value"][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[contains(concat(@or,"$"),"nodeValue$")][@xml:id="id1"][not(following-sibling::*)]/pi[@attrib][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:lang="no"][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[@xml:id="id4"][not(child::node())][following-sibling::delta[@attr][@xml:lang="nb"]//mu[not(preceding-sibling::*)][not(following-sibling::*)]//*[@insert="123456789"][@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::lambda[@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)][not(preceding-sibling::lambda)]/chi[@xml:lang="no-nb"][not(preceding-sibling::*)]//nu[@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <omicron src="this-is-att-value" xml:lang="no"> + <upsilon and="attribute-value" xml:lang="no"/> + <iota or="this.nodeValue" xml:id="id1"> + <pi attrib="attribute value" xml:id="id2"/> + <alpha xml:lang="no" xml:id="id3"/> + <chi xml:id="id4"/> + <delta attr="attribute value" xml:lang="nb"> + <mu> + <any insert="123456789" xml:lang="nb" xml:id="id5"/> + <lambda xml:lang="en-GB" xml:id="id6"> + <chi xml:lang="no-nb"> + <nu xml:lang="en" xml:id="id7"> + <green>This text must be green</green> + </nu> + </chi> + </lambda> + </mu> + </delta> + </iota> + </omicron> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@src,"$"),"e$")][@xml:lang="no"][@xml:id="id1"]//omicron[@xml:id="id2"][not(child::node())][following-sibling::nu[contains(@number,"lid 1px gre")][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::mu[@xml:id="id4"][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 3]]/pi[starts-with(@desciption,"another attribute va")][@xml:id="id5"]//omega[@false][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota src="true" xml:lang="no" xml:id="id1"> + <omicron xml:id="id2"/> + <nu number="solid 1px green" xml:id="id3"/> + <mu xml:id="id4"/> + <gamma> + <pi desciption="another attribute value" xml:id="id5"> + <omega false="123456789"> + <green>This text must be green</green> + </omega> + </pi> + </gamma> + </iota> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no"]/nu[contains(concat(@class,"$"),"ontent$")][@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[not(child::node())][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 2]][not(preceding-sibling::delta)][following-sibling::theta[@xml:id="id3"][preceding-sibling::*[position() = 3]]//omicron[@desciption][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(@content,"fa")][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][not(child::node())][following-sibling::tau[contains(@delete,"value")][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::tau[@xml:lang="nb"][@xml:id="id5"]//iota[not(preceding-sibling::*)]/omicron[contains(@and,"ue")][@xml:lang="no"][@xml:id="id6"]/mu[contains(concat(@insert,"$"),"lue$")][@xml:id="id7"][not(preceding-sibling::*)]/phi[contains(@desciption,"0%")][@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/omega[@xml:lang="no"][@xml:id="id9"][following-sibling::epsilon[@attr][@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]]//tau[@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="en-US"][not(preceding-sibling::*)]/rho[not(child::node())][following-sibling::zeta[contains(concat(@true,"$"),"en$")][@xml:id="id12"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(@attr,"solid 1px")][@xml:id="id13"][preceding-sibling::*[position() = 2]]//xi[@xml:lang="no-nb"][@xml:id="id14"][not(following-sibling::*)]/phi[not(preceding-sibling::*)]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <kappa xml:lang="no"> + <nu class="content" xml:lang="en" xml:id="id1"/> + <xi/> + <delta xml:id="id2"/> + <theta xml:id="id3"> + <omicron desciption="100%"> + <beta content="false"/> + <kappa xml:lang="no-nb"/> + <tau delete="this-is-att-value" xml:id="id4"/> + <tau xml:lang="nb" xml:id="id5"> + <iota> + <omicron and="attribute-value" xml:lang="no" xml:id="id6"> + <mu insert="this.nodeValue" xml:id="id7"> + <phi desciption="100%" xml:lang="nb" xml:id="id8"/> + <gamma xml:lang="en-US"> + <omega xml:lang="no" xml:id="id9"/> + <epsilon attr="attribute value" xml:lang="nb" xml:id="id10"> + <tau xml:lang="nb" xml:id="id11"> + <psi false="123456789" xml:lang="en-US"> + <rho/> + <zeta true="solid 1px green" xml:id="id12"/> + <delta attr="solid 1px green" xml:id="id13"> + <xi xml:lang="no-nb" xml:id="id14"> + <phi> + <green>This text must be green</green> + </phi> + </xi> + </delta> + </psi> + </tau> + </epsilon> + </gamma> + </mu> + </omicron> + </iota> + </tau> + </omicron> + </theta> + </kappa> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="no-nb"][@xml:id="id1"]//psi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/omicron[@data][@xml:lang="en-GB"][not(preceding-sibling::*)]/*[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@abort][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@xml:lang="en-US"][not(following-sibling::*)]/*[starts-with(@and,"fals")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <omicron xml:lang="no-nb" xml:id="id1"> + <psi xml:lang="en-GB"/> + <omicron xml:lang="en-US"> + <omicron data="false" xml:lang="en-GB"> + <any xml:lang="en-GB"> + <xi abort="attribute" xml:lang="en-GB" xml:id="id2"> + <any xml:lang="en-US"> + <any and="false" xml:lang="no-nb" xml:id="id3"> + <green>This text must be green</green> + </any> + </any> + </xi> + </any> + </omicron> + </omicron> + </omicron> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no-nb"]//omicron[@xml:id="id1"][not(preceding-sibling::*)]//omega[@class="_blank"]/xi[contains(@and,"ue")][@xml:lang="no"][@xml:id="id2"]//pi[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@attrib][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::omega[@content][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[contains(concat(@abort,"$"),"ontent$")][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::psi[contains(concat(@or,"$"),"te-value$")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omicron[@class][@xml:id="id6"]//phi[@xml:lang="nb"][not(preceding-sibling::*)]//delta[contains(@att,"00%")][@xml:id="id7"][not(following-sibling::*)]][position() = 1]][position() = 1]]]</xpath> + <tree> + <psi xml:lang="no-nb"> + <omicron xml:id="id1"> + <omega class="_blank"> + <xi and="attribute value" xml:lang="no" xml:id="id2"> + <pi xml:id="id3"> + <delta attrib="123456789" xml:lang="en"/> + <omega content="solid 1px green"/> + <alpha abort="content" xml:lang="en-GB" xml:id="id4"/> + <psi or="attribute-value" xml:lang="no-nb" xml:id="id5"/> + <omicron class="false" xml:id="id6"> + <phi xml:lang="nb"> + <delta att="100%" xml:id="id7"> + <green>This text must be green</green> + </delta> + </phi> + </omicron> + </pi> + </xi> + </omega> + </omicron> + </psi> + </tree> + </test> + <test> + <xpath>//kappa[@xml:id="id1"]/zeta[@xml:lang="en-US"][not(preceding-sibling::*)]/nu[starts-with(@title,"con")][@xml:id="id2"][not(following-sibling::*)]//phi[starts-with(concat(@and,"-"),"true-")][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="nb"]//psi[@xml:lang="no-nb"][@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]]]]</xpath> + <tree> + <kappa xml:id="id1"> + <zeta xml:lang="en-US"> + <nu title="content" xml:id="id2"> + <phi and="true" xml:lang="en" xml:id="id3"> + <phi xml:id="id4"/> + <lambda xml:lang="nb"> + <psi xml:lang="no-nb" xml:id="id5"/> + <beta xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </beta> + </lambda> + </phi> + </nu> + </zeta> + </kappa> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-US"]//psi[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@xml:lang="no"][not(preceding-sibling::*)]//omicron[@attr="true"][@xml:lang="nb"][following-sibling::epsilon[@delete][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::tau[not(following-sibling::*)]/phi[following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[starts-with(concat(@true,"-"),"attribute value-")][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/xi[not(preceding-sibling::*)][not(child::node())][following-sibling::rho[contains(@content,"tribute value")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[@xml:id="id4"][following-sibling::gamma[not(following-sibling::*)]//theta[@xml:id="id5"]/xi[@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::pi[starts-with(concat(@abort,"-"),"this-")][@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[preceding-sibling::*[position() = 2]]//kappa[starts-with(concat(@token,"-"),"100%-")][@xml:lang="en-US"][not(child::node())][following-sibling::iota[starts-with(concat(@abort,"-"),"123456789-")][@xml:id="id8"][preceding-sibling::*[position() = 1]]]][position() = 1]]][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <any xml:lang="en-US"> + <psi xml:id="id1"> + <tau xml:lang="no"> + <omicron attr="true" xml:lang="nb"/> + <epsilon delete="content"/> + <theta xml:lang="en-US" xml:id="id2"/> + <tau> + <phi/> + <beta true="attribute value" xml:id="id3"/> + <pi xml:lang="en-US"> + <xi/> + <rho content="another attribute value"/> + <chi xml:id="id4"/> + <gamma> + <theta xml:id="id5"> + <xi xml:lang="en-US" xml:id="id6"/> + <pi abort="this-is-att-value" xml:lang="no" xml:id="id7"/> + <delta> + <kappa token="100%" xml:lang="en-US"/> + <iota abort="123456789" xml:id="id8"> + <green>This text must be green</green> + </iota> + </delta> + </theta> + </gamma> + </pi> + </tau> + </tau> + </psi> + </any> + </tree> + </test> + <test> + <xpath>//omega[@data="100%"][@xml:lang="en"][@xml:id="id1"]/alpha[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(preceding-sibling::alpha)][following-sibling::xi[starts-with(concat(@and,"-"),"attribute-")][@xml:id="id3"][following-sibling::*[position()=4]][not(child::node())][following-sibling::psi[@desciption][following-sibling::*[position()=3]][not(child::node())][following-sibling::xi[not(child::node())][following-sibling::*[contains(@desciption,"nten")][@xml:id="id4"][not(child::node())][following-sibling::pi[@xml:lang="en-US"][not(following-sibling::*)]/lambda[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@and="this-is-att-value"][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)]//phi[@xml:lang="no"][not(child::node())][following-sibling::xi[contains(concat(@and,"$"),"nk$")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <omega data="100%" xml:lang="en" xml:id="id1"> + <alpha xml:lang="no" xml:id="id2"/> + <xi and="attribute" xml:id="id3"/> + <psi desciption="100%"/> + <xi/> + <any desciption="content" xml:id="id4"/> + <pi xml:lang="en-US"> + <lambda xml:id="id5"> + <pi and="this-is-att-value" xml:lang="en" xml:id="id6"> + <phi xml:lang="no"/> + <xi and="_blank" xml:lang="en-US"> + <green>This text must be green</green> + </xi> + </pi> + </lambda> + </pi> + </omega> + </tree> + </test> + <test> + <xpath>//beta[@attribute][@xml:lang="no"]/*[@xml:lang="en-GB"][not(preceding-sibling::*)]//rho[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@xml:lang="en"]//xi[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id3"]]</xpath> + <tree> + <beta attribute="false" xml:lang="no"> + <any xml:lang="en-GB"> + <rho xml:lang="no"> + <iota> + <kappa xml:lang="en-GB" xml:id="id1"> + <rho xml:lang="en"> + <xi xml:id="id2"/> + <sigma xml:lang="en-US" xml:id="id3"> + <green>This text must be green</green> + </sigma> + </rho> + </kappa> + </iota> + </rho> + </any> + </beta> + </tree> + </test> + <test> + <xpath>//beta[starts-with(@attr,"attribu")]/xi[contains(@number,"id 1px ")][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[contains(@attrib,"e")][@xml:id="id1"][not(following-sibling::*)]//zeta[starts-with(@desciption,"t")][@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]/nu[starts-with(@desciption,"fals")][not(preceding-sibling::*)][not(following-sibling::*)]/rho[starts-with(@or,"another attribut")][@xml:lang="no"][@xml:id="id3"][following-sibling::omicron[@xml:lang="nb"]//omega[@xml:lang="no"][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <beta attr="attribute-value"> + <xi number="solid 1px green"/> + <pi attrib="true" xml:id="id1"> + <zeta desciption="this-is-att-value" xml:lang="en" xml:id="id2"> + <nu desciption="false"> + <rho or="another attribute value" xml:lang="no" xml:id="id3"/> + <omicron xml:lang="nb"> + <omega xml:lang="no"> + <green>This text must be green</green> + </omega> + </omicron> + </nu> + </zeta> + </pi> + </beta> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]/pi[starts-with(@abort,"1")][@xml:lang="no"][@xml:id="id2"][following-sibling::eta[starts-with(@att,"1")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[contains(@delete,"e")][@xml:lang="en-US"][not(preceding-sibling::*)]//beta[@xml:id="id3"][not(preceding-sibling::*)]/omega[starts-with(concat(@false,"-"),"100%-")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[starts-with(@attr,"attribute-v")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]/eta[@true="this-is-att-value"][@xml:lang="no-nb"][@xml:id="id6"]/sigma[@true="attribute value"][@xml:lang="no"][@xml:id="id7"][not(following-sibling::*)]/omega[not(preceding-sibling::*)]/alpha[contains(concat(@content,"$")," attribute value$")][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@number][@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::epsilon[following-sibling::epsilon[@xml:lang="en-GB"]/psi[@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[not(preceding-sibling::*)][following-sibling::iota[not(child::node())][following-sibling::phi[@xml:id="id11"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/epsilon[@xml:id="id12"][not(following-sibling::*)]/pi[@xml:id="id13"][not(preceding-sibling::*)]//*[@xml:lang="en-GB"][@xml:id="id14"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(concat(@token,"-"),"content-")][@xml:lang="no-nb"][@xml:id="id15"]/tau[@object][@xml:id="id16"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <nu xml:id="id1"> + <pi abort="123456789" xml:lang="no" xml:id="id2"/> + <eta att="123456789" xml:lang="no"> + <tau delete="true" xml:lang="en-US"> + <beta xml:id="id3"> + <omega false="100%" xml:lang="en" xml:id="id4"> + <phi xml:lang="nb"/> + <gamma attr="attribute-value" xml:lang="no-nb" xml:id="id5"> + <eta true="this-is-att-value" xml:lang="no-nb" xml:id="id6"> + <sigma true="attribute value" xml:lang="no" xml:id="id7"> + <omega> + <alpha content="another attribute value" xml:id="id8"> + <beta number="attribute" xml:lang="en" xml:id="id9"/> + <epsilon/> + <epsilon xml:lang="en-GB"> + <psi xml:id="id10"> + <chi/> + <iota/> + <phi xml:id="id11"> + <epsilon xml:id="id12"> + <pi xml:id="id13"> + <any xml:lang="en-GB" xml:id="id14"/> + <kappa token="content" xml:lang="no-nb" xml:id="id15"> + <tau object="attribute-value" xml:id="id16"> + <green>This text must be green</green> + </tau> + </kappa> + </pi> + </epsilon> + </phi> + </psi> + </epsilon> + </alpha> + </omega> + </sigma> + </eta> + </gamma> + </omega> + </beta> + </tau> + </eta> + </nu> + </tree> + </test> + <test> + <xpath>//iota[starts-with(concat(@desciption,"-"),"this.nodeValue-")][@xml:id="id1"]/psi[starts-with(concat(@attribute,"-"),"another attribute value-")][@xml:id="id2"]/mu[@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@attr][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="no"][not(child::node())][following-sibling::iota[contains(@insert,"lid 1")][not(following-sibling::*)]/beta[@xml:id="id5"][not(preceding-sibling::*)]/beta[@string="true"][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::epsilon[contains(concat(@src,"$"),"ribute value$")][@xml:lang="en-US"][@xml:id="id6"]//omega[@xml:lang="en-US"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota desciption="this.nodeValue" xml:id="id1"> + <psi attribute="another attribute value" xml:id="id2"> + <mu xml:lang="en" xml:id="id3"> + <kappa attr="attribute-value" xml:lang="no" xml:id="id4"/> + <xi xml:lang="no"/> + <iota insert="solid 1px green"> + <beta xml:id="id5"> + <beta string="true" xml:lang="en-GB"/> + <epsilon src="another attribute value" xml:lang="en-US" xml:id="id6"> + <omega xml:lang="en-US"> + <green>This text must be green</green> + </omega> + </epsilon> + </beta> + </iota> + </mu> + </psi> + </iota> + </tree> + </test> + <test> + <xpath>//omicron[@string][@xml:id="id1"]/nu[starts-with(@false,"co")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::theta//pi[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::nu[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[@attribute][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(preceding-sibling::alpha)][following-sibling::lambda[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][following-sibling::psi[@attrib][@xml:lang="en"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]]]]]]</xpath> + <tree> + <omicron string="false" xml:id="id1"> + <nu false="content" xml:lang="nb"/> + <theta> + <pi xml:lang="nb" xml:id="id2"/> + <nu xml:lang="no"/> + <alpha attribute="attribute" xml:lang="nb"/> + <lambda xml:lang="en-GB"/> + <psi attrib="false" xml:lang="en"> + <green>This text must be green</green> + </psi> + </theta> + </omicron> + </tree> + </test> + <test> + <xpath>//gamma[@string][@xml:lang="en"]//tau[@token][@xml:lang="no-nb"][@xml:id="id1"][not(following-sibling::*)]//zeta[starts-with(@object,"conten")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@true][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::*[@xml:id="id4"][preceding-sibling::*[position() = 2]]//iota[@string="123456789"]//epsilon[starts-with(@att,"this.nodeValu")][@xml:lang="en-GB"][@xml:id="id5"][not(child::node())][following-sibling::upsilon[@xml:id="id6"][preceding-sibling::*[position() = 1]]]]]</xpath> + <tree> + <gamma string="this.nodeValue" xml:lang="en"> + <tau token="_blank" xml:lang="no-nb" xml:id="id1"> + <zeta object="content" xml:lang="no-nb" xml:id="id2"/> + <epsilon true="content" xml:lang="no-nb" xml:id="id3"/> + <any xml:id="id4"> + <iota string="123456789"> + <epsilon att="this.nodeValue" xml:lang="en-GB" xml:id="id5"/> + <upsilon xml:id="id6"> + <green>This text must be green</green> + </upsilon> + </iota> + </any> + </tau> + </gamma> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no-nb"][@xml:id="id1"]/nu[@attribute][@xml:lang="no"][@xml:id="id2"]//eta[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[contains(@class,"ntent")][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//rho[starts-with(concat(@or,"-"),"false-")][following-sibling::kappa[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::gamma[not(child::node())][following-sibling::xi[@object][not(child::node())][following-sibling::iota[@string][preceding-sibling::*[position() = 4]][not(preceding-sibling::iota)][following-sibling::upsilon[@desciption]//lambda[contains(concat(@string,"$")," value$")][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@attr][@xml:lang="en-GB"][@xml:id="id5"][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <psi xml:lang="no-nb" xml:id="id1"> + <nu attribute="this.nodeValue" xml:lang="no" xml:id="id2"> + <eta xml:lang="no"> + <omicron class="content" xml:lang="no-nb" xml:id="id3"> + <rho or="false"/> + <kappa xml:lang="en" xml:id="id4"/> + <gamma/> + <xi object="true"/> + <iota string="solid 1px green"/> + <upsilon desciption="false"> + <lambda string="attribute value"/> + <pi attr="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <green>This text must be green</green> + </pi> + </upsilon> + </omicron> + </eta> + </nu> + </psi> + </tree> + </test> + <test> + <xpath>//kappa[@attr="this.nodeValue"][@xml:lang="en-GB"][@xml:id="id1"]/omega[@xml:id="id2"][not(preceding-sibling::*)]/zeta[@xml:lang="nb"][@xml:id="id3"]/mu[@xml:lang="en-GB"][not(following-sibling::*)]//eta[@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::beta[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[@xml:lang="nb"][@xml:id="id6"][not(child::node())][following-sibling::alpha[starts-with(@false,"solid 1px ")][@xml:lang="nb"][@xml:id="id7"][not(child::node())][following-sibling::omega[contains(@src,"attribute")][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::mu[preceding-sibling::*[position() = 5]][following-sibling::*[position()=1]][following-sibling::epsilon[contains(concat(@delete,"$"),"en$")][@xml:lang="en-US"][@xml:id="id8"][not(following-sibling::*)]/xi[contains(@and,"00%")][@xml:lang="nb"][not(following-sibling::*)]//tau[@xml:lang="nb"]/alpha[starts-with(@name,"solid 1px gr")][@xml:lang="no"][not(preceding-sibling::*)]//pi[@xml:lang="no-nb"][not(following-sibling::*)]/kappa[@xml:lang="en"][@xml:id="id9"]/beta[@xml:id="id10"][not(following-sibling::*)]//omega[starts-with(@number,"con")][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[starts-with(@object,"attribute valu")][@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@attr="attribute value"][@xml:lang="no"][@xml:id="id12"][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa attr="this.nodeValue" xml:lang="en-GB" xml:id="id1"> + <omega xml:id="id2"> + <zeta xml:lang="nb" xml:id="id3"> + <mu xml:lang="en-GB"> + <eta xml:lang="nb" xml:id="id4"/> + <beta xml:lang="nb" xml:id="id5"/> + <eta xml:lang="nb" xml:id="id6"/> + <alpha false="solid 1px green" xml:lang="nb" xml:id="id7"/> + <omega src="attribute value" xml:lang="no-nb"/> + <mu/> + <epsilon delete="solid 1px green" xml:lang="en-US" xml:id="id8"> + <xi and="100%" xml:lang="nb"> + <tau xml:lang="nb"> + <alpha name="solid 1px green" xml:lang="no"> + <pi xml:lang="no-nb"> + <kappa xml:lang="en" xml:id="id9"> + <beta xml:id="id10"> + <omega number="content" xml:id="id11"> + <omicron object="attribute value" xml:lang="nb"/> + <alpha attr="attribute value" xml:lang="no" xml:id="id12"> + <green>This text must be green</green> + </alpha> + </omega> + </beta> + </kappa> + </pi> + </alpha> + </tau> + </xi> + </epsilon> + </mu> + </zeta> + </omega> + </kappa> + </tree> + </test> + <test> + <xpath>//kappa[contains(concat(@attr,"$"),"e-value$")][@xml:lang="en-US"][@xml:id="id1"]/mu[@xml:lang="no-nb"][@xml:id="id2"][following-sibling::alpha[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="nb"][not(following-sibling::*)]/alpha[starts-with(@desciption,"_")][@xml:lang="en"][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[@xml:lang="nb"][not(child::node())][following-sibling::tau[contains(@attrib,"fal")][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <kappa attr="attribute-value" xml:lang="en-US" xml:id="id1"> + <mu xml:lang="no-nb" xml:id="id2"/> + <alpha xml:lang="no-nb"/> + <nu xml:lang="nb"> + <alpha desciption="_blank" xml:lang="en"/> + <iota xml:lang="nb"/> + <tau attrib="false" xml:lang="no-nb"/> + <any xml:lang="en-GB"> + <green>This text must be green</green> + </any> + </nu> + </kappa> + </tree> + </test> + <test> + <xpath>//beta[@data][@xml:lang="no-nb"][@xml:id="id1"]//tau[not(preceding-sibling::*)]//*[not(preceding-sibling::*)][not(child::node())][following-sibling::eta[starts-with(@name,"solid 1px gr")][following-sibling::pi[starts-with(@token,"attribute val")][@xml:lang="en"][not(following-sibling::*)][not(following-sibling::pi)]//tau[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::psi[@attribute][@xml:lang="en"]/*[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::theta[@string="this.nodeValue"][@xml:id="id4"][not(child::node())][following-sibling::upsilon[@delete][@xml:id="id5"][preceding-sibling::*[position() = 2]]/lambda[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <beta data="_blank" xml:lang="no-nb" xml:id="id1"> + <tau> + <any/> + <eta name="solid 1px green"/> + <pi token="attribute value" xml:lang="en"> + <tau xml:lang="nb" xml:id="id2"/> + <psi attribute="true" xml:lang="en"> + <any xml:id="id3"/> + <theta string="this.nodeValue" xml:id="id4"/> + <upsilon delete="another attribute value" xml:id="id5"> + <lambda xml:id="id6"> + <green>This text must be green</green> + </lambda> + </upsilon> + </psi> + </pi> + </tau> + </beta> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]//psi[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(preceding-sibling::psi or following-sibling::psi)]/omega[@data][following-sibling::pi[@xml:id="id3"][following-sibling::omega[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[@attrib][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::gamma[starts-with(concat(@class,"-"),"content-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//omicron[@attrib][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::theta[contains(concat(@insert,"$"),"ent$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[contains(@attribute,"t-value")][@xml:id="id5"][preceding-sibling::*[position() = 2]]/iota[@xml:id="id6"][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <psi xml:id="id1"> + <psi xml:lang="no-nb" xml:id="id2"> + <omega data="attribute-value"/> + <pi xml:id="id3"/> + <omega xml:id="id4"/> + <delta attrib="true"/> + <gamma class="content" xml:lang="no-nb"> + <omicron attrib="false" xml:lang="nb"/> + <theta insert="content"/> + <chi attribute="this-is-att-value" xml:id="id5"> + <iota xml:id="id6"> + <green>This text must be green</green> + </iota> + </chi> + </gamma> + </psi> + </psi> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@att,"10")][@xml:lang="no"][@xml:id="id1"]/eta[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[starts-with(concat(@object,"-"),"this-")][@xml:id="id2"][following-sibling::*[position()=2]][following-sibling::upsilon[@xml:lang="no-nb"][not(child::node())][following-sibling::lambda[contains(@string,"te value")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 3]]//omega[starts-with(@data,"solid 1px")][@xml:id="id4"][not(child::node())][following-sibling::phi[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="nb"][not(following-sibling::*)]//omega[contains(@number,"onten")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omega att="100%" xml:lang="no" xml:id="id1"> + <eta xml:lang="en-US"/> + <phi object="this-is-att-value" xml:id="id2"/> + <upsilon xml:lang="no-nb"/> + <lambda string="attribute value" xml:lang="en" xml:id="id3"> + <omega data="solid 1px green" xml:id="id4"/> + <phi xml:id="id5"/> + <nu xml:lang="nb"> + <omega number="content"> + <green>This text must be green</green> + </omega> + </nu> + </lambda> + </omega> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no"]/alpha[@token][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="en"][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="no"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(preceding-sibling::kappa or following-sibling::kappa)]//chi[contains(@title,"e")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@object][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]/mu[@xml:lang="en"][following-sibling::sigma[starts-with(concat(@delete,"-"),"100%-")][@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::nu[@xml:id="id5"][not(following-sibling::*)]//beta[contains(concat(@data,"$")," attribute value$")][not(child::node())][following-sibling::chi[@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]//eta[@xml:id="id7"][not(following-sibling::*)]/pi[@xml:id="id8"][not(following-sibling::*)]//phi[@xml:lang="no-nb"][@xml:id="id9"][following-sibling::gamma[starts-with(@attrib,"conten")][preceding-sibling::*[position() = 1]]//delta[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <psi xml:lang="no"> + <alpha token="attribute-value" xml:lang="no"> + <rho xml:lang="en"/> + <sigma xml:lang="en-GB"> + <epsilon xml:lang="nb"/> + <kappa xml:lang="no" xml:id="id1"> + <chi title="true" xml:lang="en-GB" xml:id="id2"/> + <upsilon object="this.nodeValue" xml:lang="no-nb" xml:id="id3"> + <rho xml:lang="en" xml:id="id4"> + <mu xml:lang="en"/> + <sigma delete="100%" xml:lang="nb"/> + <nu xml:id="id5"> + <beta data="another attribute value"/> + <chi xml:lang="en-US" xml:id="id6"> + <eta xml:id="id7"> + <pi xml:id="id8"> + <phi xml:lang="no-nb" xml:id="id9"/> + <gamma attrib="content"> + <delta xml:lang="en-GB"/> + <omicron xml:lang="en-GB"> + <green>This text must be green</green> + </omicron> + </gamma> + </pi> + </eta> + </chi> + </nu> + </rho> + </upsilon> + </kappa> + </sigma> + </alpha> + </psi> + </tree> + </test> + <test> + <xpath>//pi[@src="this.nodeValue"][@xml:lang="nb"]/lambda[starts-with(concat(@and,"-"),"this-")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]/eta[not(child::node())][following-sibling::gamma[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="en"]//delta[@content][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 1]][following-sibling::gamma[@xml:lang="no"][not(following-sibling::*)]//gamma[starts-with(concat(@true,"-"),"123456789-")][not(preceding-sibling::*)][not(following-sibling::*)]/*[starts-with(concat(@insert,"-"),"123456789-")]//alpha[contains(concat(@false,"$"),"%$")][@xml:lang="no"][@xml:id="id2"]//chi[not(following-sibling::chi)]/phi[@xml:lang="nb"][not(preceding-sibling::*)]//upsilon[@xml:id="id3"][not(child::node())][following-sibling::mu[not(following-sibling::*)]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <pi src="this.nodeValue" xml:lang="nb"> + <lambda and="this-is-att-value" xml:id="id1"/> + <psi xml:lang="en-GB"> + <eta/> + <gamma token="attribute-value" xml:lang="en"> + <delta content="solid 1px green"/> + <kappa/> + <gamma xml:lang="no"> + <gamma true="123456789"> + <any insert="123456789"> + <alpha false="100%" xml:lang="no" xml:id="id2"> + <chi> + <phi xml:lang="nb"> + <upsilon xml:id="id3"/> + <mu> + <green>This text must be green</green> + </mu> + </phi> + </chi> + </alpha> + </any> + </gamma> + </gamma> + </gamma> + </psi> + </pi> + </tree> + </test> + <test> + <xpath>//xi[contains(@insert,"00%")][@xml:lang="en-GB"][@xml:id="id1"]//mu[@false][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(concat(@delete,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@content][not(following-sibling::*)]/tau[not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id3"][not(following-sibling::*)]//mu[contains(concat(@src,"$"),"px green$")][@xml:lang="en-US"][not(child::node())][following-sibling::phi[@or][not(following-sibling::*)]/chi[starts-with(concat(@data,"-"),"false-")][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[@xml:id="id4"][following-sibling::iota[@xml:id="id5"][not(following-sibling::*)]//tau[starts-with(concat(@data,"-"),"content-")][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="en"][not(following-sibling::*)]//phi[@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)]/psi[not(preceding-sibling::*)][not(following-sibling::*)]/kappa[contains(concat(@attribute,"$"),"false$")][@xml:lang="en"][not(following-sibling::*)]/epsilon[contains(concat(@src,"$"),"e$")][@xml:lang="en"][@xml:id="id7"]//tau[@insert][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[@xml:id="id8"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <xi insert="100%" xml:lang="en-GB" xml:id="id1"> + <mu false="solid 1px green"/> + <kappa delete="attribute" xml:lang="en-GB" xml:id="id2"/> + <nu content="this-is-att-value"> + <tau/> + <alpha xml:id="id3"> + <mu src="solid 1px green" xml:lang="en-US"/> + <phi or="100%"> + <chi data="false"/> + <nu xml:id="id4"/> + <iota xml:id="id5"> + <tau data="content"/> + <delta xml:lang="en"> + <phi xml:lang="en" xml:id="id6"> + <psi> + <kappa attribute="false" xml:lang="en"> + <epsilon src="true" xml:lang="en" xml:id="id7"> + <tau insert="attribute value"/> + <xi xml:id="id8"> + <green>This text must be green</green> + </xi> + </epsilon> + </kappa> + </psi> + </phi> + </delta> + </iota> + </phi> + </alpha> + </nu> + </xi> + </tree> + </test> + <test> + <xpath>//beta[contains(@attrib,"ue")]/nu[contains(@title,"fals")][@xml:id="id1"][not(preceding-sibling::*)]/rho[@insert][@xml:id="id2"][not(preceding-sibling::*)]/kappa[not(following-sibling::*)]//upsilon[@and][@xml:id="id3"][not(preceding-sibling::*)]//chi[not(preceding-sibling::*)][following-sibling::delta[preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]</xpath> + <tree> + <beta attrib="this.nodeValue"> + <nu title="false" xml:id="id1"> + <rho insert="this.nodeValue" xml:id="id2"> + <kappa> + <upsilon and="solid 1px green" xml:id="id3"> + <chi/> + <delta> + <green>This text must be green</green> + </delta> + </upsilon> + </kappa> + </rho> + </nu> + </beta> + </tree> + </test> + <test> + <xpath>//zeta[@xml:lang="en"][@xml:id="id1"]/delta[@and][@xml:lang="en"]/omicron[@xml:lang="no"][following-sibling::iota[contains(@number,"t")][@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::beta[contains(concat(@number,"$"),"k$")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/phi[not(preceding-sibling::*)]/omicron[contains(@class,"lue")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)]//omicron[not(preceding-sibling::*)]/omicron[@class="this-is-att-value"][@xml:id="id4"]/epsilon[starts-with(@false,"this.node")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[starts-with(@desciption,"co")][@xml:lang="no-nb"]/mu[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::upsilon[starts-with(concat(@name,"-"),"true-")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[@xml:id="id8"][not(child::node())][following-sibling::theta[@xml:lang="no"][not(child::node())][following-sibling::pi[contains(concat(@data,"$"),"lue$")][@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//*[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::phi[@xml:lang="en"][not(child::node())][following-sibling::psi[@xml:lang="en-US"][not(following-sibling::*)]/lambda[@xml:lang="en-GB"][@xml:id="id10"][position() = 1]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <zeta xml:lang="en" xml:id="id1"> + <delta and="_blank" xml:lang="en"> + <omicron xml:lang="no"/> + <iota number="content" xml:lang="nb" xml:id="id2"/> + <beta number="_blank" xml:lang="no"> + <phi> + <omicron class="this.nodeValue" xml:lang="no-nb" xml:id="id3"> + <omicron> + <omicron class="this-is-att-value" xml:id="id4"> + <epsilon false="this.nodeValue" xml:id="id5"> + <xi desciption="content" xml:lang="no-nb"> + <mu xml:lang="en-GB"> + <xi xml:lang="en-US" xml:id="id6"/> + <upsilon name="true" xml:id="id7"> + <tau xml:id="id8"/> + <theta xml:lang="no"/> + <pi data="this.nodeValue" xml:lang="en" xml:id="id9"> + <any xml:lang="nb"/> + <phi xml:lang="en"/> + <psi xml:lang="en-US"> + <lambda xml:lang="en-GB" xml:id="id10"> + <green>This text must be green</green> + </lambda> + </psi> + </pi> + </upsilon> + </mu> + </xi> + </epsilon> + </omicron> + </omicron> + </omicron> + </phi> + </beta> + </delta> + </zeta> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]//kappa[starts-with(concat(@att,"-"),"123456789-")][@xml:lang="no"][not(following-sibling::*)]//epsilon[@number][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//beta[contains(@desciption,"6789")][@xml:lang="no"][@xml:id="id4"][not(following-sibling::beta)][not(child::node())][following-sibling::delta[@name][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//phi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[starts-with(@false,"a")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::psi[contains(concat(@number,"$"),"%$")][@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <kappa att="123456789" xml:lang="no"> + <epsilon number="content" xml:lang="no" xml:id="id2"> + <zeta xml:lang="no" xml:id="id3"> + <beta desciption="123456789" xml:lang="no" xml:id="id4"/> + <delta name="attribute" xml:lang="en-US" xml:id="id5"> + <phi xml:lang="no-nb"/> + <eta false="attribute" xml:lang="no"/> + <psi number="100%" xml:lang="en"> + <green>This text must be green</green> + </psi> + </delta> + </zeta> + </epsilon> + </kappa> + </phi> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@false,"$"),"t-value$")][@xml:lang="en-GB"][@xml:id="id1"]//*[@xml:lang="en"][not(child::node())][following-sibling::rho[@false][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 2]][following-sibling::omicron[@token="attribute"][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//zeta[@content][@xml:lang="nb"]/phi[@attrib][@xml:id="id3"]/nu[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::omega[starts-with(concat(@number,"-"),"solid 1px green-")][@xml:lang="en-US"][@xml:id="id6"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta false="this-is-att-value" xml:lang="en-GB" xml:id="id1"> + <any xml:lang="en"/> + <rho false="solid 1px green"/> + <omega/> + <omicron token="attribute" xml:lang="no-nb" xml:id="id2"> + <zeta content="solid 1px green" xml:lang="nb"> + <phi attrib="attribute" xml:id="id3"> + <nu/> + <any xml:id="id4"> + <rho/> + <sigma xml:lang="no-nb" xml:id="id5"/> + <omega number="solid 1px green" xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </omega> + </any> + </phi> + </zeta> + </omicron> + </beta> + </tree> + </test> + <test> + <xpath>//*/delta[@xml:lang="en-GB"][not(preceding-sibling::*)]//lambda[not(preceding-sibling::*)]//lambda[@abort][@xml:lang="no"][@xml:id="id1"][following-sibling::*[position()=8]][not(child::node())][following-sibling::phi[following-sibling::*[position()=7]][following-sibling::psi[@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[starts-with(concat(@attribute,"-"),"this-")][@xml:lang="en"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::upsilon[contains(concat(@att,"$"),"t$")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=4]][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 5]][following-sibling::*[position()=3]][following-sibling::pi[@xml:id="id5"][preceding-sibling::*[position() = 6]][not(preceding-sibling::pi or following-sibling::pi)][not(child::node())][following-sibling::alpha[contains(concat(@attr,"$"),"456789$")][@xml:lang="no"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::beta[contains(@data,"an")][@xml:lang="en-US"]/rho[@att][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[contains(concat(@class,"$"),"another attribute value$")][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any> + <delta xml:lang="en-GB"> + <lambda> + <lambda abort="this.nodeValue" xml:lang="no" xml:id="id1"/> + <phi/> + <psi xml:id="id2"/> + <upsilon attribute="this-is-att-value" xml:lang="en"/> + <upsilon att="content" xml:lang="no" xml:id="id3"/> + <rho xml:lang="en-GB" xml:id="id4"/> + <pi xml:id="id5"/> + <alpha attr="123456789" xml:lang="no" xml:id="id6"/> + <beta data="_blank" xml:lang="en-US"> + <rho att="100%" xml:lang="nb" xml:id="id7"> + <tau class="another attribute value" xml:id="id8"/> + <omega xml:id="id9"/> + <lambda xml:lang="no"> + <green>This text must be green</green> + </lambda> + </rho> + </beta> + </lambda> + </delta> + </any> + </tree> + </test> + <test> + <xpath>//theta[contains(concat(@attr,"$"),"ue$")]/zeta[@xml:lang="en-US"][not(preceding-sibling::*)]/rho[starts-with(concat(@insert,"-"),"attribute value-")][@xml:lang="nb"][@xml:id="id1"]/theta[starts-with(concat(@and,"-"),"this.nodeValue-")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="en"]/alpha[contains(@att,"hi")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::chi[@xml:lang="nb"][preceding-sibling::*[position() = 1]]//chi[@attrib="another attribute value"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::psi[starts-with(@number,"_blank")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[not(preceding-sibling::*)][following-sibling::gamma[@true][@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta attr="true"> + <zeta xml:lang="en-US"> + <rho insert="attribute value" xml:lang="nb" xml:id="id1"> + <theta and="this.nodeValue" xml:lang="en"/> + <xi xml:lang="en"> + <alpha att="this-is-att-value" xml:id="id2"/> + <chi xml:lang="nb"> + <chi attrib="another attribute value" xml:id="id3"/> + <psi number="_blank"> + <epsilon/> + <gamma true="this-is-att-value" xml:lang="en-GB"> + <green>This text must be green</green> + </gamma> + </psi> + </chi> + </xi> + </rho> + </zeta> + </theta> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no"][@xml:id="id1"]//nu//omicron[not(preceding-sibling::*)][following-sibling::beta[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@string][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::tau[contains(@src,"s")][@xml:lang="no-nb"][following-sibling::nu[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::gamma[@xml:lang="en-US"][@xml:id="id5"]/omega[contains(concat(@abort,"$"),"eValue$")][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[not(child::node())][following-sibling::alpha[starts-with(@name,"this.n")][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::tau[@xml:id="id8"][not(following-sibling::*)]//lambda[@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[starts-with(concat(@true,"-"),"attribute value-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id10"]]]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <tau xml:lang="no" xml:id="id1"> + <nu> + <omicron/> + <beta xml:lang="no" xml:id="id2"> + <chi string="123456789" xml:id="id3"/> + <tau src="false" xml:lang="no-nb"/> + <nu xml:lang="no" xml:id="id4"/> + <gamma xml:lang="en-US" xml:id="id5"> + <omega abort="this.nodeValue" xml:id="id6"> + <psi/> + <alpha name="this.nodeValue" xml:id="id7"/> + <tau xml:id="id8"> + <lambda xml:id="id9"/> + <omicron true="attribute value" xml:lang="en"/> + <phi xml:lang="no-nb" xml:id="id10"> + <green>This text must be green</green> + </phi> + </tau> + </omega> + </gamma> + </beta> + </nu> + </tau> + </tree> + </test> + <test> + <xpath>//*[@data="false"][@xml:id="id1"]/mu[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@xml:lang="no-nb"][not(child::node())][following-sibling::lambda[@xml:lang="en-GB"][following-sibling::zeta[@xml:id="id3"][following-sibling::eta[@class][@xml:id="id4"][not(child::node())][following-sibling::sigma[@attrib][@xml:lang="no-nb"][not(following-sibling::*)]//mu[not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@delete][@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//gamma[not(preceding-sibling::*)]//upsilon[@data][@xml:id="id6"][not(following-sibling::*)]//beta/psi[contains(@number," green")][@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::alpha[@attrib][@xml:id="id8"][preceding-sibling::*[position() = 1]]//delta[contains(concat(@class,"$"),"this-is-att-value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::eta[@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[@xml:lang="en-GB"][@xml:id="id10"][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <any data="false" xml:id="id1"> + <mu xml:lang="nb" xml:id="id2"> + <phi xml:lang="en-GB"> + <tau xml:lang="no-nb"/> + <lambda xml:lang="en-GB"/> + <zeta xml:id="id3"/> + <eta class="another attribute value" xml:id="id4"/> + <sigma attrib="this-is-att-value" xml:lang="no-nb"> + <mu/> + <sigma delete="this.nodeValue" xml:lang="en" xml:id="id5"> + <gamma> + <upsilon data="this-is-att-value" xml:id="id6"> + <beta> + <psi number="solid 1px green" xml:lang="en-GB" xml:id="id7"/> + <alpha attrib="100%" xml:id="id8"> + <delta class="this-is-att-value" xml:lang="no-nb"/> + <eta xml:id="id9"> + <zeta xml:lang="en-GB" xml:id="id10"> + <green>This text must be green</green> + </zeta> + </eta> + </alpha> + </beta> + </upsilon> + </gamma> + </sigma> + </sigma> + </phi> + </mu> + </any> + </tree> + </test> + <test> + <xpath>//lambda[contains(concat(@src,"$"),"-value$")]/omega[not(child::node())][following-sibling::zeta[@data][@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::omega[starts-with(concat(@attrib,"-"),"this.nodeValue-")][@xml:id="id2"]//nu[contains(@number,"00")][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/delta[starts-with(@true,"this-is-att")][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[starts-with(@abort,"solid 1px gr")][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[not(following-sibling::*)]/eta[@xml:lang="no-nb"][@xml:id="id6"][following-sibling::sigma[starts-with(concat(@desciption,"-"),"123456789-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@insert="this-is-att-value"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::*[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 3]][not(preceding-sibling::any)]/tau[@token="123456789"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[starts-with(@token,"_blan")][@xml:lang="no-nb"][@xml:id="id10"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda src="this-is-att-value"> + <omega/> + <zeta data="this-is-att-value" xml:lang="en-GB" xml:id="id1"/> + <omega attrib="this.nodeValue" xml:id="id2"> + <nu number="100%"/> + <sigma xml:lang="en-US" xml:id="id3"> + <delta true="this-is-att-value" xml:id="id4"> + <zeta abort="solid 1px green" xml:id="id5"/> + <gamma> + <eta xml:lang="no-nb" xml:id="id6"/> + <sigma desciption="123456789" xml:lang="nb"/> + <iota insert="this-is-att-value" xml:id="id7"/> + <any xml:lang="en-GB" xml:id="id8"> + <tau token="123456789" xml:id="id9"> + <nu token="_blank" xml:lang="no-nb" xml:id="id10"/> + <delta> + <green>This text must be green</green> + </delta> + </tau> + </any> + </gamma> + </delta> + </sigma> + </omega> + </lambda> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(@content,"attribute valu")][@xml:lang="en"][@xml:id="id1"]/iota[contains(concat(@attrib,"$"),"tribute value$")][not(preceding-sibling::*)][following-sibling::alpha[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="no-nb"][@xml:id="id2"]//nu[contains(concat(@abort,"$"),"rue$")][@xml:id="id3"][following-sibling::omicron[preceding-sibling::*[position() = 1]][following-sibling::*[position()=6]][following-sibling::epsilon[@xml:lang="en-GB"][following-sibling::*[position()=5]][not(child::node())][following-sibling::mu[contains(concat(@data,"$"),"ute value$")][following-sibling::pi[@xml:id="id4"][not(child::node())][following-sibling::gamma[@desciption][@xml:lang="nb"][following-sibling::omicron[@insert][@xml:lang="en-US"][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 7]][not(following-sibling::*)]//omega[@attribute][@xml:lang="no"][@xml:id="id5"][not(following-sibling::*)]//gamma[@xml:lang="en"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::tau[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[starts-with(@delete,"false")][not(preceding-sibling::*)]//rho[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::delta//lambda[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::omega[@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/*[contains(@or,"ntent")][@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)]/kappa[contains(@name,"reen")][@xml:lang="en-GB"][@xml:id="id11"][not(following-sibling::*)]//nu[@xml:lang="no"][@xml:id="id12"][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[@xml:lang="en-US"][@xml:id="id13"]]]]]][position() = 1]]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <upsilon content="attribute value" xml:lang="en" xml:id="id1"> + <iota attrib="another attribute value"/> + <alpha false="123456789" xml:lang="no-nb" xml:id="id2"> + <nu abort="true" xml:id="id3"/> + <omicron/> + <epsilon xml:lang="en-GB"/> + <mu data="attribute value"/> + <pi xml:id="id4"/> + <gamma desciption="100%" xml:lang="nb"/> + <omicron insert="content" xml:lang="en-US"/> + <sigma> + <omega attribute="attribute value" xml:lang="no" xml:id="id5"> + <gamma xml:lang="en" xml:id="id6"/> + <tau xml:id="id7"> + <omicron delete="false"> + <rho xml:lang="nb"/> + <delta> + <lambda xml:lang="en" xml:id="id8"/> + <omega xml:id="id9"> + <any or="content" xml:lang="nb" xml:id="id10"> + <kappa name="solid 1px green" xml:lang="en-GB" xml:id="id11"> + <nu xml:lang="no" xml:id="id12"/> + <rho/> + <phi xml:lang="en-US" xml:id="id13"> + <green>This text must be green</green> + </phi> + </kappa> + </any> + </omega> + </delta> + </omicron> + </tau> + </omega> + </sigma> + </alpha> + </upsilon> + </tree> + </test> + <test> + <xpath>//gamma[@object][@xml:lang="en-GB"][@xml:id="id1"]//tau[@class][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:id="id4"]//pi[starts-with(concat(@true,"-"),"_blank-")][@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::eta[@class="true"][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]]/theta[@src][not(preceding-sibling::*)][not(following-sibling::*)]//eta[starts-with(@attrib,"true")][@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]//zeta[starts-with(concat(@insert,"-"),"this.nodeValue-")][not(preceding-sibling::*)][following-sibling::xi[starts-with(concat(@attr,"-"),"another attribute value-")][not(child::node())][following-sibling::tau[@xml:id="id8"][preceding-sibling::*[position() = 2]]/lambda[@and][not(following-sibling::*)]//kappa[not(following-sibling::*)]//delta[@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@xml:lang="no-nb"][not(following-sibling::*)]/rho[@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::*[@true][@xml:lang="no"][@xml:id="id10"][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <gamma object="100%" xml:lang="en-GB" xml:id="id1"> + <tau class="content" xml:id="id2"/> + <psi xml:id="id3"> + <mu xml:id="id4"> + <pi true="_blank" xml:lang="no" xml:id="id5"/> + <eta class="true" xml:lang="en-GB" xml:id="id6"> + <theta src="true"> + <eta attrib="true" xml:lang="no-nb" xml:id="id7"> + <zeta insert="this.nodeValue"/> + <xi attr="another attribute value"/> + <tau xml:id="id8"> + <lambda and="attribute value"> + <kappa> + <delta xml:lang="no" xml:id="id9"> + <omicron xml:lang="no-nb"> + <rho xml:lang="en"/> + <any true="attribute" xml:lang="no" xml:id="id10"> + <green>This text must be green</green> + </any> + </omicron> + </delta> + </kappa> + </lambda> + </tau> + </eta> + </theta> + </eta> + </mu> + </psi> + </gamma> + </tree> + </test> + <test> + <xpath>//phi[contains(concat(@object,"$")," 1px green$")][@xml:id="id1"]//xi[starts-with(@attr,"content")]//epsilon[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:lang="no"][preceding-sibling::*[position() = 2]]/iota[@abort][@xml:id="id3"][not(following-sibling::*)]]]</xpath> + <tree> + <phi object="solid 1px green" xml:id="id1"> + <xi attr="content"> + <epsilon xml:id="id2"/> + <any/> + <psi xml:lang="no"> + <iota abort="123456789" xml:id="id3"> + <green>This text must be green</green> + </iota> + </psi> + </xi> + </phi> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="en"][@xml:id="id1"]/nu/pi[@attribute][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::nu[@xml:lang="nb"][preceding-sibling::*[position() = 1]]/beta[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@xml:id="id4"][not(child::node())][following-sibling::lambda[@xml:lang="no"]/rho[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="no-nb"][@xml:id="id6"][not(child::node())][following-sibling::tau[@or="content"][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 2]]/kappa[@xml:lang="en"][not(preceding-sibling::*)]/tau[starts-with(concat(@delete,"-"),"false-")][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[contains(@and,"100")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::omicron[starts-with(concat(@title,"-"),"attribute-")][@xml:id="id8"][not(following-sibling::*)]//sigma[contains(@data,"fals")][@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)]//theta[@and="true"][@xml:lang="nb"][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi xml:lang="en" xml:id="id1"> + <nu> + <pi attribute="this-is-att-value" xml:id="id2"/> + <nu xml:lang="nb"> + <beta xml:id="id3"> + <psi xml:id="id4"/> + <lambda xml:lang="no"> + <rho xml:lang="no-nb" xml:id="id5"> + <mu xml:lang="no-nb" xml:id="id6"/> + <tau or="content" xml:lang="nb"/> + <rho> + <kappa xml:lang="en"> + <tau delete="false" xml:lang="en-GB" xml:id="id7"/> + <omicron and="100%" xml:lang="en"/> + <omicron title="attribute-value" xml:id="id8"> + <sigma data="false" xml:lang="en-GB" xml:id="id9"> + <theta and="true" xml:lang="nb"> + <green>This text must be green</green> + </theta> + </sigma> + </omicron> + </kappa> + </rho> + </rho> + </lambda> + </beta> + </nu> + </nu> + </psi> + </tree> + </test> + <test> + <xpath>//iota[starts-with(@title,"solid 1")]//nu[@xml:lang="no-nb"][not(child::node())][following-sibling::beta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::theta[@xml:id="id1"]/nu[contains(@number,"e valu")][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@string="content"][@xml:lang="no"][not(preceding-sibling::*)]//*[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/zeta[starts-with(@attrib,"this-is-att-valu")][@xml:lang="nb"][@xml:id="id3"]//*[@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[not(child::node())][following-sibling::omicron[contains(@number,"ibute")]/delta[contains(concat(@number,"$"),"his.nodeValue$")][@xml:lang="en-GB"][not(child::node())][following-sibling::lambda[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@class][@xml:lang="nb"][not(following-sibling::*)]/zeta[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::mu[@number="false"][@xml:lang="en"][following-sibling::zeta[following-sibling::*[position()=1]][following-sibling::nu[@class][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/epsilon[@abort][@xml:id="id7"][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota title="solid 1px green"> + <nu xml:lang="no-nb"/> + <beta xml:lang="en-GB"/> + <kappa/> + <theta xml:id="id1"> + <nu number="attribute value"> + <mu string="content" xml:lang="no"> + <any/> + <chi xml:lang="en-GB" xml:id="id2"> + <zeta attrib="this-is-att-value" xml:lang="nb" xml:id="id3"> + <any xml:id="id4"/> + <zeta/> + <omicron number="attribute"> + <delta number="this.nodeValue" xml:lang="en-GB"/> + <lambda xml:lang="en-GB"> + <beta class="solid 1px green" xml:lang="nb"> + <zeta xml:lang="en-GB" xml:id="id5"/> + <mu number="false" xml:lang="en"/> + <zeta/> + <nu class="false" xml:lang="en" xml:id="id6"> + <epsilon abort="_blank" xml:id="id7"> + <green>This text must be green</green> + </epsilon> + </nu> + </beta> + </lambda> + </omicron> + </zeta> + </chi> + </mu> + </nu> + </theta> + </iota> + </tree> + </test> + <test> + <xpath>//phi//theta[@xml:lang="en-GB"]//*[@attribute][@xml:id="id1"][following-sibling::*[position()=6]][not(child::node())][following-sibling::*[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::nu[@object][@xml:id="id3"][not(child::node())][following-sibling::alpha[contains(concat(@true,"$"),"value$")][@xml:id="id4"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=3]][following-sibling::omicron[preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::phi[@or][@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="en-US"][preceding-sibling::*[position() = 6]][not(following-sibling::*)]/delta[@name][@xml:lang="en-GB"][@xml:id="id5"][following-sibling::*[position()=3]][not(child::node())][following-sibling::nu[@xml:lang="en-US"][not(child::node())][following-sibling::nu[@xml:id="id6"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::zeta[@data][@xml:id="id7"][not(following-sibling::*)]//alpha[@insert="solid 1px green"][@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-US"][@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::kappa[contains(concat(@abort,"$"),"other attribute value$")][@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 2]]//gamma[@insert][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][not(following-sibling::*)]//gamma[@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[contains(@true,"rue")][@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]]][position() = 1]]]]]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi> + <theta xml:lang="en-GB"> + <any attribute="false" xml:id="id1"/> + <any xml:lang="no-nb" xml:id="id2"/> + <nu object="attribute value" xml:id="id3"/> + <alpha true="attribute value" xml:id="id4"/> + <omicron/> + <phi or="attribute-value" xml:lang="en-US"/> + <chi xml:lang="en-US"> + <delta name="this-is-att-value" xml:lang="en-GB" xml:id="id5"/> + <nu xml:lang="en-US"/> + <nu xml:id="id6"/> + <zeta data="123456789" xml:id="id7"> + <alpha insert="solid 1px green" xml:lang="en" xml:id="id8"/> + <theta xml:lang="en-US" xml:id="id9"/> + <kappa abort="another attribute value" xml:lang="en" xml:id="id10"> + <gamma insert="_blank" xml:lang="no-nb"/> + <tau xml:lang="en-GB"> + <gamma xml:lang="nb" xml:id="id11"> + <zeta true="true" xml:lang="en-GB"> + <green>This text must be green</green> + </zeta> + </gamma> + </tau> + </kappa> + </zeta> + </chi> + </theta> + </phi> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="nb"]/upsilon[@xml:lang="no-nb"][@xml:id="id1"]/psi[@xml:id="id2"]//kappa[@name][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en-GB"][following-sibling::*[position()=1]][not(preceding-sibling::omicron)][not(child::node())][following-sibling::alpha[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 2]]//lambda[starts-with(concat(@class,"-"),"_blank-")][@xml:lang="no-nb"][not(preceding-sibling::*)]/alpha[@attribute][@xml:id="id5"][not(preceding-sibling::*)]/delta[@xml:id="id6"]/delta[contains(concat(@title,"$"),"3456789$")][following-sibling::omicron[contains(@true,"_blan")][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/sigma[contains(@token,"3456")][@xml:lang="en-US"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::xi[starts-with(concat(@title,"-"),"attribute-")][@xml:id="id9"][preceding-sibling::*[position() = 1]]//sigma[@attr][@xml:lang="en-US"][@xml:id="id10"][not(following-sibling::*)]/phi[contains(@desciption,"nother a")][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[contains(concat(@true,"$"),"ue$")][@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[starts-with(concat(@name,"-"),"solid 1px green-")][@xml:lang="no-nb"][@xml:id="id11"][preceding-sibling::*[position() = 2]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="nb"> + <upsilon xml:lang="no-nb" xml:id="id1"> + <psi xml:id="id2"> + <kappa name="content" xml:lang="en" xml:id="id3"/> + <omicron xml:lang="en-GB"/> + <alpha xml:lang="en" xml:id="id4"> + <lambda class="_blank" xml:lang="no-nb"> + <alpha attribute="attribute" xml:id="id5"> + <delta xml:id="id6"> + <delta title="123456789"/> + <omicron true="_blank" xml:lang="en" xml:id="id7"> + <sigma token="123456789" xml:lang="en-US" xml:id="id8"/> + <xi title="attribute-value" xml:id="id9"> + <sigma attr="100%" xml:lang="en-US" xml:id="id10"> + <phi desciption="another attribute value"/> + <zeta true="true" xml:lang="en-US"/> + <alpha name="solid 1px green" xml:lang="no-nb" xml:id="id11"> + <green>This text must be green</green> + </alpha> + </sigma> + </xi> + </omicron> + </delta> + </alpha> + </lambda> + </alpha> + </psi> + </upsilon> + </phi> + </tree> + </test> + <test> + <xpath>//delta[@xml:id="id1"]//eta[@xml:lang="en-US"][@xml:id="id2"]//*[starts-with(@attrib,"false")][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@src,"$"),"lue$")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]/*[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:id="id6"][preceding-sibling::*[position() = 1]]/sigma[contains(@src,"l")][@xml:lang="no-nb"][@xml:id="id7"]/lambda[@xml:lang="no-nb"]//iota[contains(concat(@src,"$"),"ttribute value$")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="en-US"]//eta[starts-with(@desciption,"attribute va")][not(following-sibling::*)]//psi[following-sibling::*[position()=1]][following-sibling::rho[@attr][@xml:lang="no-nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <delta xml:id="id1"> + <eta xml:lang="en-US" xml:id="id2"> + <any attrib="false" xml:lang="no" xml:id="id3"/> + <alpha src="attribute value" xml:id="id4"/> + <delta xml:lang="en-GB" xml:id="id5"> + <any xml:lang="nb"/> + <rho xml:id="id6"> + <sigma src="_blank" xml:lang="no-nb" xml:id="id7"> + <lambda xml:lang="no-nb"> + <iota src="attribute value" xml:lang="nb"/> + <kappa xml:lang="en-US"> + <eta desciption="attribute value"> + <psi/> + <rho attr="this-is-att-value" xml:lang="no-nb" xml:id="id8"> + <green>This text must be green</green> + </rho> + </eta> + </kappa> + </lambda> + </sigma> + </rho> + </delta> + </eta> + </delta> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]/tau[@string][@xml:id="id2"]//alpha[@insert][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)]//lambda[starts-with(@or,"1234567")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::theta[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:lang="no"][@xml:id="id6"][not(child::node())][following-sibling::iota[contains(@title,"en")][@xml:lang="no"][@xml:id="id7"]/phi[contains(@or,"e")][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id8"]//*[contains(concat(@src,"$"),"e$")][@xml:lang="nb"][not(child::node())][following-sibling::eta[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//gamma[@xml:lang="no-nb"][following-sibling::omicron[contains(concat(@insert,"$"),"blank$")][@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <rho xml:id="id1"> + <tau string="attribute" xml:id="id2"> + <alpha insert="attribute value" xml:lang="no-nb" xml:id="id3"> + <lambda or="123456789" xml:id="id4"/> + <theta xml:lang="nb" xml:id="id5"/> + <nu xml:lang="no" xml:id="id6"/> + <iota title="solid 1px green" xml:lang="no" xml:id="id7"> + <phi or="true"/> + <sigma xml:lang="en-US" xml:id="id8"> + <any src="attribute value" xml:lang="nb"/> + <eta attr="attribute" xml:lang="no"> + <gamma xml:lang="no-nb"/> + <omicron insert="_blank" xml:lang="en-GB" xml:id="id9"> + <green>This text must be green</green> + </omicron> + </eta> + </sigma> + </iota> + </alpha> + </tau> + </rho> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@attr,"$"),"e$")][@xml:lang="no-nb"]/chi[@att][@xml:lang="en-GB"]//kappa[@name="content"][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[starts-with(concat(@title,"-"),"attribute-")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//xi[@attribute][not(preceding-sibling::*)]//phi[@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[contains(concat(@content,"$"),"ue$")][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@class][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::zeta/iota[starts-with(@object,"c")][@xml:lang="en-US"][following-sibling::*[starts-with(concat(@token,"-"),"another attribute value-")][@xml:id="id6"][preceding-sibling::*[position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota attr="attribute value" xml:lang="no-nb"> + <chi att="attribute" xml:lang="en-GB"> + <kappa name="content" xml:lang="en-GB" xml:id="id1"/> + <delta xml:id="id2"/> + <phi title="attribute"> + <xi attribute="solid 1px green"> + <phi xml:lang="en" xml:id="id3"/> + <any content="this-is-att-value" xml:lang="nb" xml:id="id4"> + <xi class="this-is-att-value" xml:id="id5"/> + <zeta> + <iota object="content" xml:lang="en-US"/> + <any token="another attribute value" xml:id="id6"> + <green>This text must be green</green> + </any> + </zeta> + </any> + </xi> + </phi> + </chi> + </iota> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="no"]//theta[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::xi[contains(concat(@or,"$"),"false$")][following-sibling::*[position()=2]][following-sibling::beta[@content="true"][not(following-sibling::beta)][following-sibling::phi[@xml:lang="en-US"][not(following-sibling::*)]/epsilon[contains(concat(@title,"$")," value$")][@xml:id="id1"][not(preceding-sibling::*)]/theta[starts-with(@content,"a")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)]/xi[starts-with(@true,"true")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::delta[contains(@insert,"other att")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[contains(concat(@attr,"$"),"k$")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="no-nb"][following-sibling::alpha[@xml:lang="no-nb"][@xml:id="id4"]//lambda[contains(@insert,"ttr")][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::tau[@or="attribute value"][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::nu[contains(@string,"thi")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 2]]/nu[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi xml:lang="no"> + <theta xml:lang="en-US"/> + <xi or="false"/> + <beta content="true"/> + <phi xml:lang="en-US"> + <epsilon title="another attribute value" xml:id="id1"> + <theta content="another attribute value" xml:lang="en-GB" xml:id="id2"> + <xi true="true" xml:lang="nb"/> + <delta insert="another attribute value" xml:lang="no"> + <chi attr="_blank" xml:id="id3"/> + <omicron xml:lang="no-nb"/> + <alpha xml:lang="no-nb" xml:id="id4"> + <lambda insert="attribute-value" xml:lang="nb" xml:id="id5"> + <zeta xml:lang="en-GB"/> + <tau or="attribute value" xml:lang="en-US"/> + <nu string="this.nodeValue" xml:lang="en-US" xml:id="id6"> + <nu xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </nu> + </nu> + </lambda> + </alpha> + </delta> + </theta> + </epsilon> + </phi> + </chi> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="en-US"][@xml:id="id1"]/omega[@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)][not(preceding-sibling::omega)]//eta[starts-with(@number,"1234567")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="no"][not(child::node())][following-sibling::theta[starts-with(concat(@string,"-"),"solid 1px green-")][@xml:lang="en-US"][@xml:id="id3"]/nu[@object][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::nu[starts-with(concat(@src,"-"),"attribute-")][@xml:id="id4"]//kappa[@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::beta[starts-with(@name,"content")][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 1]]]]][position() = 1]]</xpath> + <tree> + <iota xml:lang="en-US" xml:id="id1"> + <omega xml:lang="en" xml:id="id2"> + <eta number="123456789" xml:lang="nb"/> + <kappa xml:lang="no"/> + <theta string="solid 1px green" xml:lang="en-US" xml:id="id3"> + <nu object="another attribute value" xml:lang="nb"/> + <nu src="attribute" xml:id="id4"> + <kappa xml:lang="no" xml:id="id5"/> + <beta name="content" xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </beta> + </nu> + </theta> + </omega> + </iota> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no"][@xml:id="id1"]//zeta[@xml:id="id2"][not(preceding-sibling::*)]//delta[@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@xml:id="id4"]//nu[not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::upsilon[@attr="solid 1px green"][following-sibling::mu[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::alpha[@xml:lang="en"][@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[@xml:id="id7"]//pi[@xml:id="id8"]]]][position() = 1]]</xpath> + <tree> + <iota xml:lang="no" xml:id="id1"> + <zeta xml:id="id2"> + <delta xml:lang="en" xml:id="id3"> + <mu xml:id="id4"> + <nu/> + <upsilon attr="solid 1px green"/> + <mu xml:lang="en-GB" xml:id="id5"/> + <alpha xml:lang="en" xml:id="id6"/> + <delta xml:id="id7"> + <pi xml:id="id8"> + <green>This text must be green</green> + </pi> + </delta> + </mu> + </delta> + </zeta> + </iota> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@abort,"anoth")]//beta[@string][@xml:lang="no"][not(child::node())][following-sibling::xi[contains(concat(@content,"$"),"other attribute value$")][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[contains(@class,"_")][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[@true][@xml:lang="en-GB"][@xml:id="id2"][following-sibling::omega[starts-with(concat(@false,"-"),"content-")][@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(following-sibling::*)][position() = 1]]][position() = 1]]]</xpath> + <tree> + <omega abort="another attribute value"> + <beta string="attribute" xml:lang="no"/> + <xi content="another attribute value" xml:id="id1"/> + <lambda class="_blank"/> + <eta true="true" xml:lang="en-GB" xml:id="id2"/> + <omega false="content" xml:lang="nb"> + <green>This text must be green</green> + </omega> + </omega> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]//xi[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)]/omicron[@xml:id="id3"][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@xml:id="id5"][preceding-sibling::*[position() = 2]]/xi[@string][@xml:lang="en-US"][not(preceding-sibling::*)]/xi[@att="content"][@xml:id="id6"][following-sibling::alpha[@xml:id="id7"][preceding-sibling::*[position() = 1]]//nu[@attrib][@xml:id="id8"][not(preceding-sibling::*)]/tau[starts-with(@att,"attribut")][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[starts-with(@token,"this.nodeValue")][@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::lambda)][not(child::node())][following-sibling::alpha[@xml:lang="nb"][@xml:id="id11"]//delta[@delete][@xml:lang="no"][not(child::node())][following-sibling::upsilon[@class][@xml:lang="no"][@xml:id="id12"][following-sibling::phi[@xml:lang="en"][preceding-sibling::*[position() = 2]][following-sibling::lambda[@xml:lang="nb"][following-sibling::alpha[contains(@token,"s-is-a")][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//epsilon[starts-with(@name,"another attribute val")][@xml:id="id13"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:lang="en-GB"][@xml:id="id14"][following-sibling::epsilon[starts-with(@token,"12345")][@xml:id="id15"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <mu xml:id="id1"> + <xi xml:lang="no" xml:id="id2"> + <omicron xml:id="id3"/> + <xi xml:lang="en-GB" xml:id="id4"/> + <zeta xml:id="id5"> + <xi string="content" xml:lang="en-US"> + <xi att="content" xml:id="id6"/> + <alpha xml:id="id7"> + <nu attrib="true" xml:id="id8"> + <tau att="attribute" xml:id="id9"/> + <lambda token="this.nodeValue" xml:lang="nb" xml:id="id10"/> + <alpha xml:lang="nb" xml:id="id11"> + <delta delete="_blank" xml:lang="no"/> + <upsilon class="attribute-value" xml:lang="no" xml:id="id12"/> + <phi xml:lang="en"/> + <lambda xml:lang="nb"/> + <alpha token="this-is-att-value"> + <epsilon name="another attribute value" xml:id="id13"> + <phi xml:lang="en-GB" xml:id="id14"/> + <epsilon token="123456789" xml:id="id15"/> + <pi> + <green>This text must be green</green> + </pi> + </epsilon> + </alpha> + </alpha> + </nu> + </alpha> + </xi> + </zeta> + </xi> + </mu> + </tree> + </test> + <test> + <xpath>//gamma[@xml:lang="en"]/xi[contains(concat(@number,"$"),"ribute-value$")][@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)]/*[contains(concat(@object,"$"),"lank$")][@xml:id="id2"][following-sibling::psi[preceding-sibling::*[position() = 1]]//pi[not(preceding-sibling::*)][not(following-sibling::*)]/eta[@title="this.nodeValue"][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id3"][not(child::node())][following-sibling::chi[starts-with(concat(@name,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau[contains(@number,"k")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::phi[preceding-sibling::*[position() = 1]][following-sibling::*[@xml:lang="en"][@xml:id="id6"]//omicron[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::eta[@xml:id="id8"][not(following-sibling::*)]//delta[contains(@abort,"al")][not(preceding-sibling::delta or following-sibling::delta)]/*[starts-with(concat(@and,"-"),"attribute value-")][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::eta[contains(@insert,"nk")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::gamma[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/sigma[@xml:lang="en-GB"][not(child::node())][following-sibling::zeta[starts-with(concat(@src,"-"),"solid 1px green-")][@xml:lang="en"][not(following-sibling::*)]//eta[@data][@xml:lang="nb"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <gamma xml:lang="en"> + <xi number="attribute-value" xml:lang="en" xml:id="id1"> + <any object="_blank" xml:id="id2"/> + <psi> + <pi> + <eta title="this.nodeValue" xml:lang="nb"/> + <epsilon xml:lang="no-nb" xml:id="id3"/> + <chi name="attribute-value" xml:lang="en-GB" xml:id="id4"> + <tau number="_blank" xml:id="id5"/> + <phi/> + <any xml:lang="en" xml:id="id6"> + <omicron xml:lang="en-GB" xml:id="id7"/> + <eta xml:id="id8"> + <delta abort="another attribute value"> + <any and="attribute value" xml:lang="no" xml:id="id9"/> + <eta insert="_blank"/> + <gamma xml:lang="no-nb"> + <sigma xml:lang="en-GB"/> + <zeta src="solid 1px green" xml:lang="en"> + <eta data="_blank" xml:lang="nb"> + <green>This text must be green</green> + </eta> + </zeta> + </gamma> + </delta> + </eta> + </any> + </chi> + </pi> + </psi> + </xi> + </gamma> + </tree> + </test> + <test> + <xpath>//mu[starts-with(@abort,"anothe")]/pi[@xml:id="id1"][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[following-sibling::omega[@class="_blank"][following-sibling::delta[@object][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi/zeta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@attr][@xml:lang="no-nb"][@xml:id="id2"][following-sibling::sigma[contains(concat(@string,"$"),"789$")][@xml:lang="no"]//chi[not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@and][@xml:id="id3"]//eta[not(preceding-sibling::*)][not(child::node())][following-sibling::mu[starts-with(concat(@true,"-"),"true-")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[starts-with(concat(@or,"-"),"123456789-")][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/omicron[@xml:id="id6"][following-sibling::sigma[@attr][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/*[starts-with(concat(@insert,"-"),"this.nodeValue-")][@xml:lang="en"]][position() = 1]]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <mu abort="another attribute value"> + <pi xml:id="id1"/> + <nu/> + <delta/> + <omega class="_blank"/> + <delta object="attribute value" xml:lang="en"/> + <pi> + <zeta xml:lang="no-nb"/> + <xi attr="123456789" xml:lang="no-nb" xml:id="id2"/> + <sigma string="123456789" xml:lang="no"> + <chi/> + <zeta and="attribute-value" xml:id="id3"> + <eta/> + <mu true="true" xml:id="id4"/> + <any or="123456789" xml:id="id5"> + <omicron xml:id="id6"/> + <sigma attr="123456789" xml:lang="en-US"> + <any insert="this.nodeValue" xml:lang="en"> + <green>This text must be green</green> + </any> + </sigma> + </any> + </zeta> + </sigma> + </pi> + </mu> + </tree> + </test> + <test> + <xpath>//omega[contains(concat(@desciption,"$"),"ute$")][@xml:lang="no"]//iota[@xml:lang="en-US"][@xml:id="id1"][following-sibling::*[position()=2]][following-sibling::psi[following-sibling::chi[starts-with(@true,"12345678")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/omega[starts-with(@attribute,"solid 1px")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::zeta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//gamma[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::sigma[contains(@att,"e")][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]//iota[starts-with(concat(@attr,"-"),"123456789-")][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <omega desciption="attribute" xml:lang="no"> + <iota xml:lang="en-US" xml:id="id1"/> + <psi/> + <chi true="123456789" xml:lang="no-nb"> + <omega attribute="solid 1px green" xml:lang="en"/> + <delta xml:lang="en"/> + <zeta> + <gamma xml:lang="no"/> + <sigma att="attribute" xml:id="id2"/> + <theta xml:lang="en" xml:id="id3"> + <iota attr="123456789"> + <green>This text must be green</green> + </iota> + </theta> + </zeta> + </chi> + </omega> + </tree> + </test> + <test> + <xpath>//beta/mu[@desciption][@xml:lang="no"][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[starts-with(concat(@attribute,"-"),"attribute-")][not(following-sibling::*)]//beta[contains(@or,"content")][@xml:lang="en"][@xml:id="id2"]/chi[@abort][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[@attrib][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::gamma[@xml:id="id5"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta> + <mu desciption="attribute" xml:lang="no"/> + <alpha xml:id="id1"/> + <tau attribute="attribute"> + <beta or="content" xml:lang="en" xml:id="id2"> + <chi abort="123456789"/> + <alpha xml:id="id3"/> + <eta attrib="attribute value" xml:id="id4"/> + <gamma xml:id="id5"> + <green>This text must be green</green> + </gamma> + </beta> + </tau> + </beta> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="en-US"][@xml:id="id1"]/psi[contains(@data,"se")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[contains(concat(@token,"$"),"nk$")][@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]//nu[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::phi[starts-with(@and,"this-is-att-val")][not(child::node())][following-sibling::eta[contains(@attribute,"is-is-att-v")][@xml:id="id4"][not(following-sibling::*)]/nu[@xml:id="id5"][not(preceding-sibling::*)][not(preceding-sibling::nu)]//tau[not(preceding-sibling::*)][following-sibling::alpha[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[@false][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omicron[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[not(preceding-sibling::*)]//mu[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)]/zeta[@name="another attribute value"][not(preceding-sibling::*)]//delta[@insert="123456789"][not(following-sibling::*)]/iota[@xml:id="id7"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:lang="en-US" xml:id="id1"> + <psi data="false"/> + <gamma xml:lang="no"> + <delta token="_blank" xml:lang="en-GB" xml:id="id2"> + <nu xml:id="id3"/> + <phi and="this-is-att-value"/> + <eta attribute="this-is-att-value" xml:id="id4"> + <nu xml:id="id5"> + <tau/> + <alpha xml:lang="en-GB"> + <rho false="false" xml:lang="no"/> + <omicron> + <chi> + <mu xml:lang="en-GB"/> + <kappa xml:lang="en-GB" xml:id="id6"> + <zeta name="another attribute value"> + <delta insert="123456789"> + <iota xml:id="id7"> + <green>This text must be green</green> + </iota> + </delta> + </zeta> + </kappa> + </chi> + </omicron> + </alpha> + </nu> + </eta> + </delta> + </gamma> + </iota> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:id="id1"]//omega[@xml:lang="en-US"]/kappa[@desciption][not(preceding-sibling::*)]//omicron[@and="100%"][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[preceding-sibling::*[position() = 1]][following-sibling::theta[@title][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/pi[@and="attribute-value"][@xml:lang="en"][@xml:id="id3"]/upsilon[@xml:lang="nb"][following-sibling::omicron[@att="true"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[@or][@xml:id="id5"][not(following-sibling::*)]]][position() = 1]]</xpath> + <tree> + <upsilon xml:id="id1"> + <omega xml:lang="en-US"> + <kappa desciption="true"> + <omicron and="100%" xml:lang="no"/> + <mu/> + <theta title="attribute" xml:lang="no" xml:id="id2"> + <pi and="attribute-value" xml:lang="en" xml:id="id3"> + <upsilon xml:lang="nb"/> + <omicron att="true" xml:id="id4"> + <mu or="false" xml:id="id5"> + <green>This text must be green</green> + </mu> + </omicron> + </pi> + </theta> + </kappa> + </omega> + </upsilon> + </tree> + </test> + <test> + <xpath>//zeta/gamma[@class][@xml:id="id1"][not(following-sibling::*)]/sigma[@delete][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(@and,"ute-value")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[contains(concat(@string,"$"),"attribute-value$")][@xml:lang="no-nb"][@xml:id="id3"]//epsilon[@desciption][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]/sigma[@xml:id="id5"][following-sibling::*[position()=11]][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=10]][following-sibling::omicron[@xml:lang="en-GB"][following-sibling::omicron[@content][@xml:id="id7"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::eta[@true][@xml:lang="nb"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=7]][following-sibling::tau[@xml:id="id8"][following-sibling::psi[@xml:id="id9"][not(child::node())][following-sibling::delta[contains(concat(@and,"$"),"nt$")][@xml:id="id10"][preceding-sibling::*[position() = 7]][following-sibling::*[position()=4]][following-sibling::zeta[@xml:id="id11"][following-sibling::alpha[not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 10]][following-sibling::psi[@string="false"][preceding-sibling::*[position() = 11]]][position() = 1]]]]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <zeta> + <gamma class="this-is-att-value" xml:id="id1"> + <sigma delete="false" xml:lang="nb" xml:id="id2"/> + <mu and="attribute-value"> + <upsilon string="attribute-value" xml:lang="no-nb" xml:id="id3"> + <epsilon desciption="attribute" xml:lang="no-nb" xml:id="id4"> + <sigma xml:id="id5"/> + <xi xml:lang="en-GB" xml:id="id6"/> + <omicron xml:lang="en-GB"/> + <omicron content="this.nodeValue" xml:id="id7"/> + <eta true="false" xml:lang="nb"/> + <tau xml:id="id8"/> + <psi xml:id="id9"/> + <delta and="content" xml:id="id10"/> + <zeta xml:id="id11"/> + <alpha/> + <iota/> + <psi string="false"> + <green>This text must be green</green> + </psi> + </epsilon> + </upsilon> + </mu> + </gamma> + </zeta> + </tree> + </test> + <test> + <xpath>//pi[@xml:id="id1"]//tau[following-sibling::*[position()=1]][following-sibling::rho[starts-with(concat(@and,"-"),"attribute-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[following-sibling::*[position()=6]][not(child::node())][following-sibling::omicron[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=4]][following-sibling::theta[@token][@xml:lang="en-GB"][following-sibling::*[position()=3]][following-sibling::alpha[contains(concat(@string,"$"),"123456789$")][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::chi[@xml:id="id4"][preceding-sibling::*[position() = 5]][following-sibling::iota//pi[@name][@xml:id="id5"][not(preceding-sibling::*)]/phi[@xml:id="id6"][not(child::node())][following-sibling::pi[@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::theta[contains(@attrib,"olid 1p")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::pi[@false][@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <pi xml:id="id1"> + <tau/> + <rho and="attribute-value" xml:lang="en"> + <phi/> + <omicron xml:lang="en" xml:id="id2"/> + <alpha xml:id="id3"/> + <theta token="attribute value" xml:lang="en-GB"/> + <alpha string="123456789"/> + <chi xml:id="id4"/> + <iota> + <pi name="123456789" xml:id="id5"> + <phi xml:id="id6"/> + <pi xml:id="id7"/> + <theta attrib="solid 1px green"/> + <pi false="this.nodeValue" xml:id="id8"> + <green>This text must be green</green> + </pi> + </pi> + </iota> + </rho> + </pi> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no"][@xml:id="id1"]/chi[contains(@name,"0")][@xml:lang="en-GB"][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@attr][@xml:id="id2"][following-sibling::epsilon[@xml:lang="en"][@xml:id="id3"][not(following-sibling::epsilon)]/psi[starts-with(@title,"attrib")][@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@xml:lang="nb"][@xml:id="id5"][following-sibling::*[position()=1]][not(preceding-sibling::iota)][not(child::node())][following-sibling::epsilon[@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]//omicron[@src][@xml:lang="en-US"][@xml:id="id7"][following-sibling::*[position()=3]][following-sibling::upsilon[contains(@and,"fa")][@xml:id="id8"][following-sibling::sigma[@xml:lang="no"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::zeta[starts-with(concat(@and,"-"),"123456789-")][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:lang="no" xml:id="id1"> + <chi name="100%" xml:lang="en-GB"/> + <any attr="this.nodeValue" xml:id="id2"/> + <epsilon xml:lang="en" xml:id="id3"> + <psi title="attribute" xml:lang="no-nb" xml:id="id4"/> + <iota xml:lang="nb" xml:id="id5"/> + <epsilon xml:lang="en" xml:id="id6"> + <omicron src="true" xml:lang="en-US" xml:id="id7"/> + <upsilon and="false" xml:id="id8"/> + <sigma xml:lang="no"/> + <zeta and="123456789" xml:lang="en-GB"> + <green>This text must be green</green> + </zeta> + </epsilon> + </epsilon> + </iota> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="no-nb"][@xml:id="id1"]//rho[@xml:id="id2"][not(child::node())][following-sibling::chi[not(following-sibling::*)]/rho[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::kappa[@xml:lang="en"][following-sibling::*[@or][@xml:lang="en-GB"][@xml:id="id4"]//mu[@xml:lang="en"][@xml:id="id5"]//psi[following-sibling::pi[@number][not(following-sibling::*)]/beta[@xml:lang="en-GB"][following-sibling::*[position()=2]][following-sibling::lambda[@or][@xml:id="id6"][following-sibling::gamma[starts-with(concat(@insert,"-"),"content-")][@xml:lang="no"][@xml:id="id7"][not(following-sibling::*)]//*[@xml:lang="en-US"][@xml:id="id8"]]]]]][position() = 1]]</xpath> + <tree> + <lambda xml:lang="no-nb" xml:id="id1"> + <rho xml:id="id2"/> + <chi> + <rho xml:lang="no" xml:id="id3"/> + <kappa xml:lang="en"/> + <any or="this.nodeValue" xml:lang="en-GB" xml:id="id4"> + <mu xml:lang="en" xml:id="id5"> + <psi/> + <pi number="123456789"> + <beta xml:lang="en-GB"/> + <lambda or="100%" xml:id="id6"/> + <gamma insert="content" xml:lang="no" xml:id="id7"> + <any xml:lang="en-US" xml:id="id8"> + <green>This text must be green</green> + </any> + </gamma> + </pi> + </mu> + </any> + </chi> + </lambda> + </tree> + </test> + <test> + <xpath>//kappa[@data][@xml:lang="no"][@xml:id="id1"]//rho[contains(concat(@object,"$"),"te value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::rho)][following-sibling::phi[following-sibling::tau[@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/mu[@attribute][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::alpha[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/alpha[@xml:id="id4"][following-sibling::pi[contains(concat(@att,"$"),"lank$")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[starts-with(concat(@and,"-"),"attribute value-")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]]]]]</xpath> + <tree> + <kappa data="this.nodeValue" xml:lang="no" xml:id="id1"> + <rho object="another attribute value" xml:lang="no-nb"/> + <phi/> + <tau xml:lang="en-GB" xml:id="id2"> + <mu attribute="100%" xml:lang="nb"/> + <alpha xml:lang="en-US" xml:id="id3"> + <alpha xml:id="id4"/> + <pi att="_blank" xml:lang="en"/> + <chi and="attribute value" xml:lang="no"> + <green>This text must be green</green> + </chi> + </alpha> + </tau> + </kappa> + </tree> + </test> + <test> + <xpath>//omicron[@xml:id="id1"]/kappa[@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::gamma[@xml:id="id3"][not(following-sibling::*)]/rho[@xml:lang="nb"][not(preceding-sibling::*)]/rho[@xml:lang="en-US"]//upsilon[starts-with(@desciption,"false")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[starts-with(@delete,"123456789")][@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[@data="content"][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 2]]/beta[contains(@title,"n")][@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]/omicron[@xml:lang="no"][not(child::node())][following-sibling::gamma[@false][@xml:id="id8"]/iota[following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[contains(concat(@title,"$"),"3456789$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::epsilon[@xml:lang="en-GB"][@xml:id="id9"]/zeta[contains(@delete,"reen")]]]]]][position() = 1]]]</xpath> + <tree> + <omicron xml:id="id1"> + <kappa xml:lang="nb" xml:id="id2"/> + <gamma xml:id="id3"> + <rho xml:lang="nb"> + <rho xml:lang="en-US"> + <upsilon desciption="false" xml:id="id4"/> + <delta delete="123456789" xml:lang="no" xml:id="id5"/> + <upsilon data="content" xml:lang="no" xml:id="id6"> + <beta title="solid 1px green" xml:lang="en-GB" xml:id="id7"> + <omicron xml:lang="no"/> + <gamma false="attribute value" xml:id="id8"> + <iota/> + <omega title="123456789"/> + <iota xml:lang="no-nb"/> + <epsilon xml:lang="en-GB" xml:id="id9"> + <zeta delete="solid 1px green"> + <green>This text must be green</green> + </zeta> + </epsilon> + </gamma> + </beta> + </upsilon> + </rho> + </rho> + </gamma> + </omicron> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]//theta[starts-with(concat(@desciption,"-"),"false-")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[starts-with(@or,"_blan")][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::theta[contains(concat(@content,"$"),"100%$")][@xml:lang="en-US"][@xml:id="id4"][not(child::node())][following-sibling::beta[starts-with(concat(@title,"-"),"false-")][@xml:lang="nb"][not(following-sibling::*)]//iota[@delete][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[starts-with(@att,"this-is-att-va")][not(preceding-sibling::*)]/iota[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@xml:lang="en"][@xml:id="id6"][not(child::node())][following-sibling::*[contains(@and,"-value")][@xml:lang="nb"]/rho[following-sibling::epsilon[@abort][@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]//epsilon[@attrib][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <theta desciption="false" xml:lang="en-US" xml:id="id2"/> + <upsilon or="_blank" xml:lang="no-nb" xml:id="id3"/> + <theta content="100%" xml:lang="en-US" xml:id="id4"/> + <beta title="false" xml:lang="nb"> + <iota delete="another attribute value" xml:id="id5"> + <tau att="this-is-att-value"> + <iota xml:lang="no"> + <theta xml:lang="en" xml:id="id6"/> + <any and="attribute-value" xml:lang="nb"> + <rho/> + <epsilon abort="100%" xml:lang="no-nb" xml:id="id7"> + <epsilon attrib="solid 1px green"/> + <eta> + <green>This text must be green</green> + </eta> + </epsilon> + </any> + </iota> + </tau> + </iota> + </beta> + </phi> + </tree> + </test> + <test> + <xpath>//kappa[@abort]//delta[contains(@attr,"alu")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)]//epsilon[starts-with(concat(@attribute,"-"),"_blank-")][@xml:lang="no"][not(child::node())][following-sibling::omicron[@delete][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::theta[starts-with(@and,"attribute v")][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::delta[not(child::node())][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/eta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[not(preceding-sibling::*)]/theta[not(child::node())][following-sibling::beta[starts-with(@string,"a")][@xml:lang="nb"][not(following-sibling::*)]//epsilon[contains(@att,"olid 1px gr")][@xml:id="id4"][following-sibling::delta[@or="solid 1px green"][@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[not(child::node())][following-sibling::eta[@xml:lang="nb"][not(child::node())][following-sibling::epsilon[@xml:id="id6"][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id7"][not(child::node())][following-sibling::phi[@attr="123456789"][@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::omega[@xml:lang="en-GB"]//lambda[@xml:id="id9"][not(preceding-sibling::*)]//omicron[@attr="content"][@xml:lang="no-nb"][not(child::node())][following-sibling::pi[@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@xml:id="id11"]]]]][position() = 1]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <kappa abort="another attribute value"> + <delta attr="attribute-value" xml:lang="en-US" xml:id="id1"> + <epsilon attribute="_blank" xml:lang="no"/> + <omicron delete="attribute-value" xml:lang="en-GB"/> + <theta and="attribute value" xml:id="id2"/> + <delta/> + <alpha xml:id="id3"> + <eta xml:lang="no-nb"> + <pi> + <theta/> + <beta string="attribute" xml:lang="nb"> + <epsilon att="solid 1px green" xml:id="id4"/> + <delta or="solid 1px green" xml:lang="nb" xml:id="id5"> + <pi/> + <eta xml:lang="nb"/> + <epsilon xml:id="id6"/> + <lambda xml:lang="en-US" xml:id="id7"/> + <phi attr="123456789" xml:id="id8"/> + <omega xml:lang="en-GB"> + <lambda xml:id="id9"> + <omicron attr="content" xml:lang="no-nb"/> + <pi xml:lang="en" xml:id="id10"> + <xi xml:id="id11"> + <green>This text must be green</green> + </xi> + </pi> + </lambda> + </omega> + </delta> + </beta> + </pi> + </eta> + </alpha> + </delta> + </kappa> + </tree> + </test> + <test> + <xpath>//*[@xml:id="id1"]/delta[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="nb"][@xml:id="id3"]//theta[@src][@xml:lang="en"][following-sibling::eta[@xml:id="id4"]/chi[@abort][@xml:id="id5"][not(child::node())][following-sibling::iota[starts-with(@false,"tru")][@xml:lang="nb"][not(following-sibling::*)]/psi[@att="solid 1px green"][@xml:lang="no-nb"]//kappa[@or][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::kappa[@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:id="id8"][not(following-sibling::*)]//kappa[starts-with(@attribute,"another a")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[starts-with(concat(@insert,"-"),"attribute-")][@xml:lang="en-GB"][not(following-sibling::*)]/*[@and][@xml:lang="no-nb"][@xml:id="id9"][not(following-sibling::*)]//omicron[@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)]/phi[@xml:id="id11"][not(child::node())][following-sibling::tau[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::pi[@xml:id="id12"][following-sibling::iota[@name="123456789"][preceding-sibling::*[position() = 3]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <any xml:id="id1"> + <delta xml:lang="en-US" xml:id="id2"/> + <upsilon xml:lang="nb" xml:id="id3"> + <theta src="123456789" xml:lang="en"/> + <eta xml:id="id4"> + <chi abort="false" xml:id="id5"/> + <iota false="true" xml:lang="nb"> + <psi att="solid 1px green" xml:lang="no-nb"> + <kappa or="123456789" xml:lang="nb"/> + <rho xml:id="id6"/> + <kappa xml:id="id7"/> + <chi xml:id="id8"> + <kappa attribute="another attribute value" xml:lang="en-US"/> + <sigma insert="attribute-value" xml:lang="en-GB"> + <any and="another attribute value" xml:lang="no-nb" xml:id="id9"> + <omicron xml:lang="nb" xml:id="id10"> + <phi xml:id="id11"/> + <tau xml:lang="en"/> + <pi xml:id="id12"/> + <iota name="123456789"> + <green>This text must be green</green> + </iota> + </omicron> + </any> + </sigma> + </chi> + </psi> + </iota> + </eta> + </upsilon> + </any> + </tree> + </test> + <test> + <xpath>//iota[contains(@and,"ute value")][@xml:id="id1"]/nu[contains(@and," ")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::psi[starts-with(@token,"fals")][@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::tau[not(following-sibling::*)]/gamma[starts-with(@content,"a")][@xml:lang="en-GB"]//alpha[@data][@xml:lang="en-US"][not(preceding-sibling::*)]//upsilon[contains(concat(@true,"$"),"tribute-value$")][not(following-sibling::*)]/chi[contains(@data,"alue")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@src="another attribute value"][not(following-sibling::*)]//pi[@false][@xml:lang="no"]]][position() = 1]]</xpath> + <tree> + <iota and="another attribute value" xml:id="id1"> + <nu and="another attribute value" xml:lang="no"/> + <psi token="false" xml:lang="en-US" xml:id="id2"/> + <tau> + <gamma content="attribute-value" xml:lang="en-GB"> + <alpha data="this.nodeValue" xml:lang="en-US"> + <upsilon true="attribute-value"> + <chi data="another attribute value" xml:lang="nb" xml:id="id3"/> + <omicron src="another attribute value"> + <pi false="true" xml:lang="no"> + <green>This text must be green</green> + </pi> + </omicron> + </upsilon> + </alpha> + </gamma> + </tau> + </iota> + </tree> + </test> + <test> + <xpath>//eta/alpha[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="nb"]//iota/delta[contains(@token,"alue")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omega[@xml:id="id3"][preceding-sibling::*[position() = 1]]//theta[@xml:id="id4"][not(preceding-sibling::*)]/delta[@xml:lang="no-nb"][not(preceding-sibling::*)]//theta[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en-US"]//lambda//beta[@data][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[contains(concat(@object,"$"),"bute value$")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@and][@xml:lang="en-US"][@xml:id="id8"]//*[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[not(preceding-sibling::*)][following-sibling::*[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@or][@xml:id="id9"][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta> + <alpha xml:lang="no-nb" xml:id="id1"/> + <sigma xml:lang="nb"> + <iota> + <delta token="attribute value" xml:lang="en" xml:id="id2"/> + <omega xml:id="id3"> + <theta xml:id="id4"> + <delta xml:lang="no-nb"> + <theta xml:lang="nb" xml:id="id5"/> + <psi xml:lang="en-US"> + <lambda> + <beta data="content" xml:lang="no-nb" xml:id="id6"/> + <kappa object="another attribute value" xml:lang="en-US" xml:id="id7"> + <alpha and="_blank" xml:lang="en-US" xml:id="id8"> + <any xml:lang="en-US"> + <alpha/> + <any/> + <phi or="attribute" xml:id="id9"> + <green>This text must be green</green> + </phi> + </any> + </alpha> + </kappa> + </lambda> + </psi> + </delta> + </theta> + </omega> + </iota> + </sigma> + </eta> + </tree> + </test> + <test> + <xpath>//delta//delta[contains(@attr,"att")][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::iota[@xml:lang="en-GB"]//mu[starts-with(@true,"this.nodeVa")][@xml:lang="en"][@xml:id="id2"][not(child::node())][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(preceding-sibling::upsilon)]//lambda[starts-with(concat(@attribute,"-"),"_blank-")][@xml:lang="en-GB"][@xml:id="id4"]//theta[@data][@xml:lang="en-GB"][following-sibling::gamma[preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]/omega[@xml:id="id5"][not(preceding-sibling::*)]//xi[@class][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[contains(@string,"this-is-a")][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@number][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//eta[not(preceding-sibling::*)][not(following-sibling::*)]//eta[@xml:id="id7"][following-sibling::omega[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::omicron[contains(concat(@src,"$"),"his.nodeValue$")][@xml:id="id9"][preceding-sibling::*[position() = 2]]//upsilon[starts-with(@name,"fals")][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::beta[@xml:lang="no"][@xml:id="id11"][not(following-sibling::*)]/alpha[@delete][@xml:id="id12"][not(preceding-sibling::*)]/pi[starts-with(@name,"a")][@xml:lang="no"][@xml:id="id13"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[contains(concat(@attribute,"$"),"blank$")]/alpha[@xml:lang="en-US"][not(preceding-sibling::*)]//alpha[@true="123456789"][@xml:lang="en-GB"][@xml:id="id14"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <delta> + <delta attr="attribute value" xml:lang="en-GB" xml:id="id1"/> + <iota xml:lang="en-GB"> + <mu true="this.nodeValue" xml:lang="en" xml:id="id2"/> + <upsilon xml:lang="no-nb" xml:id="id3"> + <lambda attribute="_blank" xml:lang="en-GB" xml:id="id4"> + <theta data="another attribute value" xml:lang="en-GB"/> + <gamma/> + <omega xml:lang="en-GB"> + <omega xml:id="id5"> + <xi class="true" xml:lang="no"/> + <rho string="this-is-att-value"/> + <phi number="attribute value" xml:id="id6"> + <eta> + <eta xml:id="id7"/> + <omega xml:lang="en-GB" xml:id="id8"/> + <omicron src="this.nodeValue" xml:id="id9"> + <upsilon name="false" xml:id="id10"/> + <beta xml:lang="no" xml:id="id11"> + <alpha delete="this.nodeValue" xml:id="id12"> + <pi name="another attribute value" xml:lang="no" xml:id="id13"/> + <lambda attribute="_blank"> + <alpha xml:lang="en-US"> + <alpha true="123456789" xml:lang="en-GB" xml:id="id14"> + <green>This text must be green</green> + </alpha> + </alpha> + </lambda> + </alpha> + </beta> + </omicron> + </eta> + </phi> + </omega> + </omega> + </lambda> + </upsilon> + </iota> + </delta> + </tree> + </test> + <test> + <xpath>//tau/tau[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::upsilon[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@number="attribute-value"][@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::chi[contains(@attribute,"bu")][@xml:id="id1"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:lang="no"][@xml:id="id2"]/nu[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::mu[starts-with(concat(@token,"-"),"solid 1px green-")][preceding-sibling::*[position() = 1]][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id4"][not(child::node())][following-sibling::chi[@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/upsilon[starts-with(@string,"attribute-")][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)]/alpha[@true="attribute-value"][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau> + <tau xml:lang="no-nb"> + <lambda xml:lang="no-nb"/> + <upsilon xml:lang="no"/> + <xi number="attribute-value" xml:lang="nb"/> + <chi attribute="attribute value" xml:id="id1"/> + <epsilon xml:lang="no" xml:id="id2"> + <nu xml:id="id3"/> + <mu token="solid 1px green"/> + <tau xml:lang="no-nb" xml:id="id4"/> + <chi xml:lang="nb"> + <upsilon string="attribute-value" xml:lang="en" xml:id="id5"> + <alpha true="attribute-value" xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </alpha> + </upsilon> + </chi> + </epsilon> + </tau> + </tau> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(@attr,"attribute valu")][@xml:id="id1"]/psi[contains(concat(@src,"$"),"-att-value$")][@xml:lang="en"]//sigma[@xml:id="id2"][not(preceding-sibling::*)]//kappa[contains(@attrib,"attri")][@xml:id="id3"][not(preceding-sibling::*)]/alpha[@attr][@xml:id="id4"][not(following-sibling::*)]//alpha[contains(concat(@string,"$"),"89$")][@xml:lang="en-US"]//tau[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]</xpath> + <tree> + <alpha attr="attribute value" xml:id="id1"> + <psi src="this-is-att-value" xml:lang="en"> + <sigma xml:id="id2"> + <kappa attrib="attribute value" xml:id="id3"> + <alpha attr="true" xml:id="id4"> + <alpha string="123456789" xml:lang="en-US"> + <tau xml:lang="en" xml:id="id5"> + <green>This text must be green</green> + </tau> + </alpha> + </alpha> + </kappa> + </sigma> + </psi> + </alpha> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]/rho[not(following-sibling::*)]/mu[not(preceding-sibling::*)][not(following-sibling::*)]/mu[@data="this-is-att-value"][following-sibling::alpha[@xml:lang="en-US"][following-sibling::eta[@xml:id="id2"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::chi[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/psi[contains(concat(@title,"$"),"value$")][@xml:lang="en"]//tau[contains(concat(@class,"$"),"ue$")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::alpha[not(following-sibling::*)]/tau[@xml:lang="en-GB"][@xml:id="id5"]//omicron[contains(concat(@abort,"$"),"bute value$")][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::phi[@xml:lang="en"][not(following-sibling::*)]//alpha[@xml:id="id7"]/sigma[@attribute="123456789"][@xml:lang="en"][@xml:id="id8"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <rho> + <mu> + <mu data="this-is-att-value"/> + <alpha xml:lang="en-US"/> + <eta xml:id="id2"/> + <chi xml:lang="no-nb" xml:id="id3"> + <psi title="attribute value" xml:lang="en"> + <tau class="attribute-value" xml:id="id4"/> + <alpha> + <tau xml:lang="en-GB" xml:id="id5"> + <omicron abort="another attribute value" xml:id="id6"/> + <phi xml:lang="en"> + <alpha xml:id="id7"> + <sigma attribute="123456789" xml:lang="en" xml:id="id8"> + <green>This text must be green</green> + </sigma> + </alpha> + </phi> + </tau> + </alpha> + </psi> + </chi> + </mu> + </rho> + </phi> + </tree> + </test> + <test> + <xpath>//sigma[contains(@false,"0%")][@xml:lang="no-nb"]/tau[@insert][@xml:id="id1"]//*[@title="false"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[contains(concat(@false,"$"),"nk$")][@xml:id="id2"][following-sibling::*[position()=3]][following-sibling::nu[@number][@xml:id="id3"][following-sibling::*[@object][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omicron[contains(@att,"nk")][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//omicron[@or][@xml:id="id5"][not(preceding-sibling::*)]//omega[contains(concat(@delete,"$"),"ue$")][not(preceding-sibling::*)]/gamma[starts-with(concat(@abort,"-"),"false-")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::sigma[@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=2]][following-sibling::alpha[@xml:id="id8"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@xml:lang="en-US"]/lambda[@data][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::lambda)][not(child::node())][following-sibling::zeta[starts-with(concat(@delete,"-"),"true-")][@xml:lang="en-GB"]/pi[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma false="100%" xml:lang="no-nb"> + <tau insert="true" xml:id="id1"> + <any title="false"> + <sigma false="_blank" xml:id="id2"/> + <nu number="attribute" xml:id="id3"/> + <any object="attribute value"/> + <omicron att="_blank" xml:id="id4"> + <omicron or="another attribute value" xml:id="id5"> + <omega delete="true"> + <gamma abort="false" xml:lang="en-US" xml:id="id6"/> + <sigma xml:lang="en-GB" xml:id="id7"/> + <alpha xml:id="id8"/> + <psi xml:lang="en-US"> + <lambda data="another attribute value" xml:lang="nb" xml:id="id9"/> + <zeta delete="true" xml:lang="en-GB"> + <pi> + <green>This text must be green</green> + </pi> + </zeta> + </psi> + </omega> + </omicron> + </omicron> + </any> + </tau> + </sigma> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="no-nb"][@xml:id="id1"]//eta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]/omega[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[starts-with(@object,"a")][@xml:lang="nb"][not(following-sibling::*)]][position() = 1]]]</xpath> + <tree> + <pi xml:lang="no-nb" xml:id="id1"> + <eta xml:lang="no-nb"/> + <nu xml:lang="en-GB"> + <omega xml:id="id2"/> + <epsilon xml:lang="en-US" xml:id="id3"/> + <upsilon object="another attribute value" xml:lang="nb"> + <green>This text must be green</green> + </upsilon> + </nu> + </pi> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="nb"]//nu[following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[contains(concat(@and,"$"),"-att-value$")][@xml:lang="en"][not(child::node())][following-sibling::beta[not(following-sibling::*)]//lambda[not(preceding-sibling::*)][not(following-sibling::*)]//mu[starts-with(@title,"false")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::rho[@name="this.nodeValue"][@xml:lang="en-GB"][@xml:id="id1"]/chi[@or="this-is-att-value"][@xml:lang="en-GB"][not(preceding-sibling::*)]/sigma[contains(concat(@att,"$"),"e$")][@xml:id="id2"][not(preceding-sibling::*)]//tau[not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@xml:id="id3"]//pi[@xml:lang="en-US"][following-sibling::sigma[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[@string][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[contains(@title,"nk")][@xml:id="id5"][following-sibling::beta[contains(concat(@desciption,"$")," value$")][@xml:id="id6"][not(preceding-sibling::beta)][not(child::node())][following-sibling::rho[@src][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::xi[contains(@number," va")][@xml:lang="nb"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::iota[not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="nb"> + <nu/> + <rho and="this-is-att-value" xml:lang="en"/> + <beta> + <lambda> + <mu title="false" xml:lang="en"/> + <rho name="this.nodeValue" xml:lang="en-GB" xml:id="id1"> + <chi or="this-is-att-value" xml:lang="en-GB"> + <sigma att="false" xml:id="id2"> + <tau/> + <omega xml:id="id3"> + <pi xml:lang="en-US"/> + <sigma xml:lang="no"> + <xi string="solid 1px green" xml:id="id4"> + <psi title="_blank" xml:id="id5"/> + <beta desciption="attribute value" xml:id="id6"/> + <rho src="100%" xml:lang="en-US" xml:id="id7"/> + <xi number="attribute value" xml:lang="nb"/> + <iota> + <green>This text must be green</green> + </iota> + </xi> + </sigma> + </omega> + </sigma> + </chi> + </rho> + </lambda> + </beta> + </upsilon> + </tree> + </test> + <test> + <xpath>//theta[@att][@xml:lang="no"]/phi[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)]//omicron[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//xi[contains(@name,"tribut")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::xi[not(following-sibling::*)]//epsilon[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)]]]</xpath> + <tree> + <theta att="false" xml:lang="no"> + <phi xml:lang="en-GB" xml:id="id1"> + <omicron xml:lang="en-GB" xml:id="id2"> + <omicron xml:lang="no-nb"/> + <iota xml:lang="nb" xml:id="id3"> + <xi name="attribute value" xml:lang="en" xml:id="id4"/> + <xi> + <epsilon xml:lang="en-US" xml:id="id5"> + <green>This text must be green</green> + </epsilon> + </xi> + </iota> + </omicron> + </phi> + </theta> + </tree> + </test> + <test> + <xpath>//xi[@abort="100%"][@xml:lang="en-GB"][@xml:id="id1"]//theta[starts-with(@src,"this-is-att-valu")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::alpha[preceding-sibling::*[position() = 1]]//phi[not(preceding-sibling::*)][following-sibling::sigma[@name][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//rho[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]/zeta[following-sibling::theta[@xml:lang="nb"][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <xi abort="100%" xml:lang="en-GB" xml:id="id1"> + <theta src="this-is-att-value" xml:id="id2"/> + <alpha> + <phi/> + <sigma name="100%" xml:lang="no"/> + <chi xml:lang="no-nb" xml:id="id3"> + <rho xml:lang="no-nb" xml:id="id4"> + <zeta/> + <theta xml:lang="nb"> + <green>This text must be green</green> + </theta> + </rho> + </chi> + </alpha> + </xi> + </tree> + </test> + <test> + <xpath>//xi[@xml:lang="no"]//lambda[@att][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[contains(concat(@att,"$"),"his.nodeValue$")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[contains(concat(@true,"$"),"ue$")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omega[contains(@insert,"alse")][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::xi[not(child::node())][following-sibling::pi[starts-with(@att,"solid 1px gre")][@xml:id="id4"][preceding-sibling::*[position() = 5]][position() = 1]]]]]]</xpath> + <tree> + <xi xml:lang="no"> + <lambda att="attribute value" xml:id="id1"> + <zeta att="this.nodeValue" xml:id="id2"/> + <sigma/> + <psi true="attribute value" xml:lang="en-US"/> + <omega insert="false" xml:lang="en-US" xml:id="id3"/> + <xi/> + <pi att="solid 1px green" xml:id="id4"> + <green>This text must be green</green> + </pi> + </lambda> + </xi> + </tree> + </test> + <test> + <xpath>//kappa[@xml:id="id1"]/pi[contains(concat(@object,"$"),"3456789$")][@xml:id="id2"][following-sibling::zeta[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//rho[starts-with(@object,"another attribute valu")][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:id="id5"][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]][following-sibling::phi[@attribute="100%"][@xml:id="id6"][preceding-sibling::*[position() = 2]]/theta[@xml:lang="en"][following-sibling::upsilon[starts-with(concat(@delete,"-"),"this.nodeValue-")][@xml:id="id7"]/chi[@false][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[starts-with(@src,"this.nodeVal")][@xml:id="id8"][preceding-sibling::*[position() = 1]]//iota[@xml:lang="en"][@xml:id="id9"][following-sibling::chi[contains(@and,".no")][@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[starts-with(concat(@content,"-"),"this.nodeValue-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[starts-with(@object,"fal")][@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <kappa xml:id="id1"> + <pi object="123456789" xml:id="id2"/> + <zeta xml:lang="no" xml:id="id3"> + <rho object="another attribute value" xml:id="id4"> + <epsilon xml:id="id5"/> + <nu/> + <phi attribute="100%" xml:id="id6"> + <theta xml:lang="en"/> + <upsilon delete="this.nodeValue" xml:id="id7"> + <chi false="content" xml:lang="nb"/> + <pi src="this.nodeValue" xml:id="id8"> + <iota xml:lang="en" xml:id="id9"/> + <chi and="this.nodeValue" xml:lang="nb" xml:id="id10"> + <nu content="this.nodeValue" xml:lang="en-GB"/> + <rho object="false" xml:lang="en-GB"> + <green>This text must be green</green> + </rho> + </chi> + </pi> + </upsilon> + </phi> + </rho> + </zeta> + </kappa> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@attr,"$"),"1px green$")][@xml:id="id1"]/eta[@xml:lang="en"][not(preceding-sibling::*)]/sigma[@xml:id="id2"][not(preceding-sibling::*)]//zeta[not(following-sibling::*)]/lambda[@xml:lang="no"][not(preceding-sibling::*)]/theta[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/omicron[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]//omicron[not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:lang="no"][not(following-sibling::*)]/lambda[not(following-sibling::*)]/alpha[contains(concat(@desciption,"$"),"123456789$")][@xml:lang="en-US"][@xml:id="id5"]</xpath> + <tree> + <beta attr="solid 1px green" xml:id="id1"> + <eta xml:lang="en"> + <sigma xml:id="id2"> + <zeta> + <lambda xml:lang="no"> + <theta xml:lang="no-nb" xml:id="id3"> + <omicron xml:lang="no" xml:id="id4"> + <omicron> + <xi xml:lang="no"> + <lambda> + <alpha desciption="123456789" xml:lang="en-US" xml:id="id5"> + <green>This text must be green</green> + </alpha> + </lambda> + </xi> + </omicron> + </omicron> + </theta> + </lambda> + </zeta> + </sigma> + </eta> + </beta> + </tree> + </test> + <test> + <xpath>//mu[@name][@xml:lang="no"]/phi[@xml:lang="no-nb"][not(following-sibling::*)]/theta[contains(concat(@data,"$"),"lank$")][@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]/xi[starts-with(@insert,"con")][not(following-sibling::*)]//tau[not(preceding-sibling::*)][following-sibling::beta[@attrib][not(following-sibling::*)]//gamma[contains(@title,"se")][@xml:lang="no-nb"][following-sibling::zeta[@insert="this-is-att-value"][not(child::node())][following-sibling::alpha[@xml:lang="en-US"][not(child::node())][following-sibling::zeta[@content="attribute-value"][preceding-sibling::*[position() = 3]][following-sibling::kappa[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=6]][not(child::node())][following-sibling::beta[@desciption][@xml:lang="no-nb"][not(child::node())][following-sibling::pi[@delete="_blank"][preceding-sibling::*[position() = 6]][following-sibling::*[position()=4]][not(child::node())][following-sibling::gamma[contains(@insert,"ute")][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 7]][following-sibling::*[position()=3]][not(child::node())][following-sibling::*[@true][@xml:lang="no"][@xml:id="id4"][following-sibling::pi[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 9]][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@false][@xml:lang="no"]//upsilon[@xml:id="id6"][not(preceding-sibling::*)]//psi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::rho[@attribute][@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::delta[@attribute="_blank"][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omega[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <mu name="solid 1px green" xml:lang="no"> + <phi xml:lang="no-nb"> + <theta data="_blank" xml:lang="en-GB" xml:id="id1"> + <xi insert="content"> + <tau/> + <beta attrib="false"> + <gamma title="false" xml:lang="no-nb"/> + <zeta insert="this-is-att-value"/> + <alpha xml:lang="en-US"/> + <zeta content="attribute-value"/> + <kappa xml:lang="no-nb" xml:id="id2"/> + <beta desciption="100%" xml:lang="no-nb"/> + <pi delete="_blank"/> + <gamma insert="attribute" xml:lang="nb" xml:id="id3"/> + <any true="content" xml:lang="no" xml:id="id4"/> + <pi xml:lang="en" xml:id="id5"/> + <eta false="another attribute value" xml:lang="no"> + <upsilon xml:id="id6"> + <psi xml:lang="no-nb"/> + <rho attribute="another attribute value" xml:lang="no-nb" xml:id="id7"/> + <delta attribute="_blank" xml:lang="en-GB" xml:id="id8"> + <omega xml:lang="no-nb"> + <green>This text must be green</green> + </omega> + </delta> + </upsilon> + </eta> + </beta> + </xi> + </theta> + </phi> + </mu> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="nb"][@xml:id="id1"]/sigma[@xml:id="id2"][not(following-sibling::*)]/xi[@content="attribute"][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::pi[starts-with(concat(@content,"-"),"123456789-")][preceding-sibling::*[position() = 1]][following-sibling::lambda[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//xi[@attribute][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[contains(concat(@attr,"$"),"0%$")][not(preceding-sibling::eta)][following-sibling::kappa[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]/xi[@xml:lang="no-nb"][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::sigma[@true="attribute-value"]/sigma[@token][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[contains(@delete,"ibute-value")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@xml:id="id7"][following-sibling::epsilon[@or="attribute value"][@xml:lang="en-GB"][not(child::node())][following-sibling::theta[@delete="this-is-att-value"][@xml:id="id8"][not(following-sibling::*)]//delta[contains(concat(@true,"$"),"deValue$")][following-sibling::delta[@name="_blank"][@xml:lang="no"][following-sibling::beta[@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omega[@xml:lang="en-US"][@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::zeta[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <alpha xml:lang="nb" xml:id="id1"> + <sigma xml:id="id2"> + <xi content="attribute" xml:lang="no-nb" xml:id="id3"/> + <pi content="123456789"/> + <lambda> + <xi attribute="this.nodeValue"/> + <eta attr="100%"/> + <kappa xml:lang="no-nb" xml:id="id4"> + <xi xml:lang="no-nb"/> + <tau xml:lang="no-nb" xml:id="id5"/> + <sigma true="attribute-value"> + <sigma token="content" xml:lang="en"> + <epsilon delete="attribute-value" xml:lang="no-nb" xml:id="id6"> + <any xml:id="id7"/> + <epsilon or="attribute value" xml:lang="en-GB"/> + <theta delete="this-is-att-value" xml:id="id8"> + <delta true="this.nodeValue"/> + <delta name="_blank" xml:lang="no"/> + <beta xml:lang="nb"> + <omega xml:lang="en-US" xml:id="id9"/> + <zeta attr="attribute" xml:lang="en-US" xml:id="id10"> + <green>This text must be green</green> + </zeta> + </beta> + </theta> + </epsilon> + </sigma> + </sigma> + </kappa> + </lambda> + </sigma> + </alpha> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en"][@xml:id="id1"]/rho[starts-with(@src,"f")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::epsilon[contains(concat(@title,"$"),"t$")][@xml:id="id3"][not(following-sibling::*)]//lambda[contains(concat(@token,"$"),"-value$")][not(child::node())][following-sibling::iota[starts-with(concat(@and,"-"),"attribute value-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]//kappa[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@xml:lang="no"][preceding-sibling::*[position() = 1]]//theta[starts-with(@abort,"soli")][@xml:id="id6"]//delta[@attribute="this.nodeValue"][@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]][position() = 1]]]</xpath> + <tree> + <upsilon xml:lang="en" xml:id="id1"> + <rho src="false" xml:id="id2"/> + <epsilon title="content" xml:id="id3"> + <lambda token="attribute-value"/> + <iota and="attribute value" xml:lang="nb"> + <pi xml:lang="en" xml:id="id4"> + <kappa xml:id="id5"/> + <omega xml:lang="no"> + <theta abort="solid 1px green" xml:id="id6"> + <delta attribute="this.nodeValue" xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </delta> + </theta> + </omega> + </pi> + </iota> + </epsilon> + </upsilon> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(concat(@attrib,"-"),"this.nodeValue-")][@xml:lang="no-nb"][@xml:id="id1"]/nu[@xml:lang="nb"][following-sibling::alpha[starts-with(@attrib,"th")][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@insert][@xml:id="id3"][not(child::node())][following-sibling::gamma[@xml:lang="en-US"][not(child::node())][following-sibling::mu[@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][following-sibling::delta[preceding-sibling::*[position() = 5]][following-sibling::*[position()=2]][following-sibling::rho[@xml:lang="no"][following-sibling::pi[@false][preceding-sibling::*[position() = 7]]/*[starts-with(@insert,"tr")][not(preceding-sibling::*)][not(preceding-sibling::any)]//alpha[following-sibling::eta[following-sibling::phi[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[@xml:lang="nb"]/beta[@xml:lang="en-GB"]/lambda[@name="this-is-att-value"][not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id5"]/alpha[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[contains(concat(@desciption,"$"),"%$")][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::eta[contains(@or,"nk")][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:id="id9"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::delta[@xml:lang="no"][@xml:id="id10"][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id11"][preceding-sibling::*[position() = 4]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta attrib="this.nodeValue" xml:lang="no-nb" xml:id="id1"> + <nu xml:lang="nb"/> + <alpha attrib="this.nodeValue" xml:id="id2"/> + <delta insert="_blank" xml:id="id3"/> + <gamma xml:lang="en-US"/> + <mu xml:lang="no-nb"/> + <delta/> + <rho xml:lang="no"/> + <pi false="attribute value"> + <any insert="true"> + <alpha/> + <eta/> + <phi xml:id="id4"/> + <upsilon xml:lang="nb"> + <beta xml:lang="en-GB"> + <lambda name="this-is-att-value"/> + <kappa xml:lang="en-GB" xml:id="id5"> + <alpha xml:id="id6"> + <eta desciption="100%" xml:id="id7"/> + <eta or="_blank" xml:id="id8"/> + <pi xml:id="id9"/> + <delta xml:lang="no" xml:id="id10"/> + <zeta xml:lang="en-GB" xml:id="id11"> + <green>This text must be green</green> + </zeta> + </alpha> + </kappa> + </beta> + </upsilon> + </any> + </pi> + </zeta> + </tree> + </test> + <test> + <xpath>//upsilon[@name="123456789"]//theta[@xml:lang="no"][not(following-sibling::*)]//nu[contains(concat(@attrib,"$"),"te$")][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::chi[starts-with(@object,"false")][not(following-sibling::*)]/pi[@xml:lang="no"][not(following-sibling::*)]/rho[starts-with(concat(@false,"-"),"attribute-")][@xml:id="id2"][not(child::node())][following-sibling::lambda[preceding-sibling::*[position() = 1]]/alpha[contains(concat(@string,"$"),"false$")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@true][@xml:id="id3"][not(preceding-sibling::*)]//iota[starts-with(@src,"1234567")][@xml:lang="no-nb"][not(preceding-sibling::*)]/upsilon[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[@or="attribute value"][not(following-sibling::*)]/gamma[contains(concat(@or,"$"),"reen$")][@xml:id="id5"][not(preceding-sibling::*)]//rho[@attr="another attribute value"]//phi[@xml:id="id6"][following-sibling::chi[starts-with(@title,"1234567")][preceding-sibling::*[position() = 1]]//xi[not(child::node())][following-sibling::pi[starts-with(concat(@number,"-"),"solid 1px green-")][@xml:id="id7"]/theta[@xml:lang="en-GB"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="no"][@xml:id="id8"][not(following-sibling::*)]/iota[@attribute="attribute value"][@xml:lang="en-US"][@xml:id="id9"][not(following-sibling::*)]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <upsilon name="123456789"> + <theta xml:lang="no"> + <nu attrib="attribute" xml:id="id1"/> + <chi object="false"> + <pi xml:lang="no"> + <rho false="attribute-value" xml:id="id2"/> + <lambda> + <alpha string="false" xml:lang="en-GB"> + <iota xml:lang="en-GB"> + <rho true="_blank" xml:id="id3"> + <iota src="123456789" xml:lang="no-nb"> + <upsilon xml:lang="en-US" xml:id="id4"> + <zeta or="attribute value"> + <gamma or="solid 1px green" xml:id="id5"> + <rho attr="another attribute value"> + <phi xml:id="id6"/> + <chi title="123456789"> + <xi/> + <pi number="solid 1px green" xml:id="id7"> + <theta xml:lang="en-GB"/> + <theta xml:lang="no" xml:id="id8"> + <iota attribute="attribute value" xml:lang="en-US" xml:id="id9"> + <green>This text must be green</green> + </iota> + </theta> + </pi> + </chi> + </rho> + </gamma> + </zeta> + </upsilon> + </iota> + </rho> + </iota> + </alpha> + </lambda> + </pi> + </chi> + </theta> + </upsilon> + </tree> + </test> + <test> + <xpath>//phi//kappa[@object][@xml:lang="en-US"][@xml:id="id1"]/theta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::iota[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[contains(@attrib,"k")][@xml:lang="en-GB"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[starts-with(concat(@name,"-"),"100%-")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/epsilon[starts-with(@true,"attribute-va")][not(following-sibling::*)]/mu[@xml:lang="en"][@xml:id="id4"][not(child::node())][following-sibling::beta[@false][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::tau[not(following-sibling::*)]/nu[@attribute][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::lambda[@number][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::mu[contains(@true,"cont")][@xml:lang="en-GB"][@xml:id="id5"][not(child::node())][following-sibling::delta[contains(@title,"value")][@xml:lang="en-US"]/omega[@content][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[starts-with(@attrib,"t")][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(preceding-sibling::theta or following-sibling::theta)]//rho//sigma[@xml:id="id7"][not(preceding-sibling::*)][position() = 1]]]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi> + <kappa object="this-is-att-value" xml:lang="en-US" xml:id="id1"> + <theta xml:id="id2"/> + <iota xml:id="id3"/> + <chi attrib="_blank" xml:lang="en-GB"/> + <psi name="100%"> + <epsilon true="attribute-value"> + <mu xml:lang="en" xml:id="id4"/> + <beta false="attribute-value"/> + <omicron xml:lang="en-GB"/> + <tau> + <nu attribute="this-is-att-value" xml:lang="no"/> + <lambda number="attribute value" xml:lang="no-nb"/> + <mu true="content" xml:lang="en-GB" xml:id="id5"/> + <delta title="this-is-att-value" xml:lang="en-US"> + <omega content="this-is-att-value"/> + <theta attrib="this-is-att-value" xml:lang="en" xml:id="id6"> + <rho> + <sigma xml:id="id7"> + <green>This text must be green</green> + </sigma> + </rho> + </theta> + </delta> + </tau> + </epsilon> + </psi> + </kappa> + </phi> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(concat(@class,"-"),"content-")][@xml:lang="nb"][@xml:id="id1"]/*[@src="123456789"][following-sibling::omega[contains(@string,"blank")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[@false][not(child::node())][following-sibling::zeta[starts-with(concat(@desciption,"-"),"solid 1px green-")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[starts-with(concat(@token,"-"),"100%-")][@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]//pi[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[contains(concat(@object,"$")," attribute value$")][following-sibling::gamma[contains(@attr,"nt")][@xml:id="id6"][not(following-sibling::*)]//beta[@xml:id="id7"][not(following-sibling::*)]/alpha[starts-with(concat(@true,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id8"]/iota[@xml:lang="nb"][not(child::node())][following-sibling::omega[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[@att="attribute value"][@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[starts-with(@insert,"thi")][@xml:lang="no"][@xml:id="id11"][not(preceding-sibling::*)]/chi[@xml:lang="no-nb"][@xml:id="id12"][not(following-sibling::*)]/psi[starts-with(@object,"an")][@xml:lang="en-US"][not(child::node())][following-sibling::upsilon[@xml:id="id13"][preceding-sibling::*[position() = 1]][following-sibling::pi[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//delta[@xml:lang="en-GB"][@xml:id="id14"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <alpha class="content" xml:lang="nb" xml:id="id1"> + <any src="123456789"/> + <omega string="_blank" xml:lang="no"> + <psi false="this-is-att-value"/> + <zeta desciption="solid 1px green" xml:id="id2"/> + <omega token="100%" xml:lang="en-GB" xml:id="id3"> + <nu xml:lang="no-nb" xml:id="id4"> + <pi xml:lang="no" xml:id="id5"/> + <omega object="another attribute value"/> + <gamma attr="content" xml:id="id6"> + <beta xml:id="id7"> + <alpha true="attribute-value" xml:lang="en-US" xml:id="id8"> + <iota xml:lang="nb"/> + <omega xml:lang="nb" xml:id="id9"> + <omega att="attribute value" xml:lang="en-US" xml:id="id10"> + <delta insert="this.nodeValue" xml:lang="no" xml:id="id11"> + <chi xml:lang="no-nb" xml:id="id12"> + <psi object="another attribute value" xml:lang="en-US"/> + <upsilon xml:id="id13"/> + <pi xml:lang="en"> + <delta xml:lang="en-GB" xml:id="id14"> + <green>This text must be green</green> + </delta> + </pi> + </chi> + </delta> + </omega> + </omega> + </alpha> + </beta> + </gamma> + </nu> + </omega> + </omega> + </alpha> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en"]//gamma[@data][not(preceding-sibling::*)]//pi[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::mu[starts-with(concat(@att,"-"),"attribute value-")][@xml:lang="no"][following-sibling::chi[@attr][@xml:lang="no-nb"]/epsilon[@and="attribute-value"][@xml:lang="en"][following-sibling::upsilon[starts-with(concat(@token,"-"),"123456789-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[contains(@desciption,"%")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::xi[not(child::node())][following-sibling::eta[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::omega[@xml:id="id3"][not(child::node())][following-sibling::phi[@xml:id="id4"][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::pi[@xml:id="id5"][preceding-sibling::*[position() = 6]][following-sibling::mu[@xml:id="id6"][preceding-sibling::*[position() = 7]][following-sibling::omega[contains(@false,"this")][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 8]][following-sibling::*[position()=1]][following-sibling::beta[not(following-sibling::*)]/alpha[@xml:lang="en"][not(preceding-sibling::*)]//rho[@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[contains(@attribute,"bute")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="nb"][@xml:id="id9"][following-sibling::delta[not(child::node())][following-sibling::zeta[@xml:lang="no"][not(following-sibling::*)]/iota[@xml:id="id10"][not(following-sibling::*)]]][position() = 1]]]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega xml:lang="en"> + <gamma data="this-is-att-value"> + <pi xml:id="id1"/> + <mu att="attribute value" xml:lang="no"/> + <chi attr="_blank" xml:lang="no-nb"> + <epsilon and="attribute-value" xml:lang="en"/> + <upsilon token="123456789" xml:lang="nb"> + <xi desciption="100%" xml:lang="en" xml:id="id2"/> + <xi/> + <eta xml:lang="en-US"/> + <omega xml:id="id3"/> + <phi xml:id="id4"/> + <psi/> + <pi xml:id="id5"/> + <mu xml:id="id6"/> + <omega false="this-is-att-value" xml:lang="en" xml:id="id7"/> + <beta> + <alpha xml:lang="en"> + <rho xml:id="id8"> + <chi attribute="attribute" xml:lang="en-GB"/> + <tau xml:lang="nb" xml:id="id9"/> + <delta/> + <zeta xml:lang="no"> + <iota xml:id="id10"> + <green>This text must be green</green> + </iota> + </zeta> + </rho> + </alpha> + </beta> + </upsilon> + </chi> + </gamma> + </omega> + </tree> + </test> + <test> + <xpath>//*[contains(concat(@name,"$"),"ue$")][@xml:lang="en-US"]//kappa[starts-with(@desciption,"10")][@xml:id="id1"][following-sibling::omicron[contains(concat(@att,"$"),"er attribute value$")][@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]/rho[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@title="content"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@xml:lang="no"]//alpha[following-sibling::chi[@attr][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::chi[position()=1]][not(child::node())][following-sibling::rho[following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 3]][following-sibling::mu[@insert="attribute-value"][@xml:id="id6"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//lambda[@content="123456789"][@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::*[contains(concat(@or,"$"),"nk$")][@xml:lang="en-GB"][@xml:id="id7"]/eta[@xml:lang="en-US"]/zeta[contains(@content,"attribu")][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::tau[starts-with(@false,"this.nodeVa")][@xml:id="id9"][following-sibling::chi[contains(@att," valu")][@xml:id="id10"][following-sibling::*[position()=1]][following-sibling::xi[contains(concat(@false,"$"),"ibute$")][@xml:lang="en-US"][@xml:id="id11"][not(following-sibling::*)]//omega[starts-with(concat(@and,"-"),"100%-")][@xml:lang="nb"][@xml:id="id12"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <any name="true" xml:lang="en-US"> + <kappa desciption="100%" xml:id="id1"/> + <omicron att="another attribute value" xml:lang="no" xml:id="id2"> + <rho xml:id="id3"> + <tau title="content" xml:id="id4"> + <nu xml:lang="no"> + <alpha/> + <chi attr="another attribute value" xml:id="id5"/> + <rho/> + <chi/> + <mu insert="attribute-value" xml:id="id6"> + <lambda content="123456789" xml:lang="no"/> + <any or="_blank" xml:lang="en-GB" xml:id="id7"> + <eta xml:lang="en-US"> + <zeta content="attribute value"> + <rho xml:id="id8"/> + <tau false="this.nodeValue" xml:id="id9"/> + <chi att="attribute value" xml:id="id10"/> + <xi false="attribute" xml:lang="en-US" xml:id="id11"> + <omega and="100%" xml:lang="nb" xml:id="id12"/> + <omicron xml:lang="en-US"> + <green>This text must be green</green> + </omicron> + </xi> + </zeta> + </eta> + </any> + </mu> + </nu> + </tau> + </rho> + </omicron> + </any> + </tree> + </test> + <test> + <xpath>//nu/kappa[@xml:id="id1"]//phi[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[contains(@attribute,"id 1p")][@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[starts-with(concat(@and,"-"),"another attribute value-")][@xml:id="id4"][not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[@desciption][following-sibling::gamma[@false][@xml:id="id6"][following-sibling::xi[@true="this-is-att-value"][@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]]/mu[starts-with(concat(@name,"-"),"this-")][@xml:lang="nb"][@xml:id="id8"][not(child::node())][following-sibling::lambda[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//eta[starts-with(@desciption,"so")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::alpha[contains(concat(@content,"$"),"alue$")][@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::*[following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[contains(concat(@token,"$"),"ue$")][preceding-sibling::*[position() = 4]][following-sibling::phi[@xml:lang="en-US"][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <nu> + <kappa xml:id="id1"> + <phi xml:lang="en-US" xml:id="id2"/> + <xi attribute="solid 1px green" xml:lang="en-GB" xml:id="id3"> + <iota and="another attribute value" xml:id="id4"/> + <omicron xml:lang="en-GB" xml:id="id5"> + <nu desciption="solid 1px green"/> + <gamma false="attribute-value" xml:id="id6"/> + <xi true="this-is-att-value" xml:lang="nb" xml:id="id7"> + <mu name="this-is-att-value" xml:lang="nb" xml:id="id8"/> + <lambda token="attribute" xml:lang="no-nb"> + <eta desciption="solid 1px green" xml:lang="en"> + <phi/> + <psi xml:id="id9"/> + <alpha content="this-is-att-value" xml:lang="en-US" xml:id="id10"/> + <any/> + <kappa token="true"/> + <phi xml:lang="en-US"> + <green>This text must be green</green> + </phi> + </eta> + </lambda> + </xi> + </omicron> + </xi> + </kappa> + </nu> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="no"]//chi[contains(concat(@title,"$"),"lue$")][@xml:id="id1"]/phi[not(child::node())][following-sibling::eta[@xml:id="id2"][preceding-sibling::*[position() = 1]]/kappa[starts-with(concat(@src,"-"),"100%-")][@xml:lang="en"][@xml:id="id3"][following-sibling::psi[contains(concat(@true,"$"),"content$")][@xml:lang="en-US"][@xml:id="id4"]/sigma[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[@abort="this.nodeValue"][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]/psi[@class][@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)]/nu[@delete][following-sibling::kappa[@xml:lang="en-GB"]//xi[starts-with(@insert,"attri")][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::tau[starts-with(concat(@class,"-"),"content-")][@xml:id="id7"][not(preceding-sibling::tau)]/nu[@or="false"][@xml:id="id8"]/theta[@xml:lang="no"][@xml:id="id9"][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[starts-with(concat(@and,"-"),"this-")][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <theta xml:lang="no"> + <chi title="this.nodeValue" xml:id="id1"> + <phi/> + <eta xml:id="id2"> + <kappa src="100%" xml:lang="en" xml:id="id3"/> + <psi true="content" xml:lang="en-US" xml:id="id4"> + <sigma xml:lang="en"/> + <tau abort="this.nodeValue" xml:lang="en"> + <eta/> + <omicron xml:lang="en-GB"> + <psi class="attribute" xml:lang="en-US" xml:id="id5"> + <nu delete="this.nodeValue"/> + <kappa xml:lang="en-GB"> + <xi insert="attribute-value" xml:lang="en-US" xml:id="id6"/> + <tau class="content" xml:id="id7"> + <nu or="false" xml:id="id8"> + <theta xml:lang="no" xml:id="id9"/> + <upsilon and="this-is-att-value"> + <green>This text must be green</green> + </upsilon> + </nu> + </tau> + </kappa> + </psi> + </omicron> + </tau> + </psi> + </eta> + </chi> + </theta> + </tree> + </test> + <test> + <xpath>//phi[contains(concat(@or,"$"),"deValue$")][@xml:lang="en-GB"][@xml:id="id1"]/gamma[not(following-sibling::*)]/pi[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@number="false"][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[@src][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::rho[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@object][@xml:id="id6"][not(following-sibling::*)]//tau[not(preceding-sibling::*)][following-sibling::iota[@xml:lang="no-nb"][following-sibling::mu[@attrib="attribute value"][@xml:lang="en"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi or="this.nodeValue" xml:lang="en-GB" xml:id="id1"> + <gamma> + <pi xml:id="id2"> + <sigma number="false" xml:lang="en-US" xml:id="id3"> + <tau src="false" xml:lang="nb" xml:id="id4"> + <alpha xml:lang="nb"/> + <rho xml:id="id5"/> + <psi object="this.nodeValue" xml:id="id6"> + <tau/> + <iota xml:lang="no-nb"/> + <mu attrib="attribute value" xml:lang="en"> + <green>This text must be green</green> + </mu> + </psi> + </tau> + </sigma> + </pi> + </gamma> + </phi> + </tree> + </test> + <test> + <xpath>//rho/theta[starts-with(@name,"cont")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[@content="attribute-value"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[starts-with(concat(@number,"-"),"_blank-")][@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@xml:lang="no-nb"][not(following-sibling::*)]//omicron[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::nu[contains(concat(@att,"$"),"100%$")][@xml:lang="en"][not(following-sibling::*)]/sigma[contains(@attribute,"e")][@xml:lang="en-GB"][not(preceding-sibling::*)]//sigma[contains(@object,"s")]/omega[@xml:lang="nb"][@xml:id="id3"]//omega[@token][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::upsilon[contains(@class,"s-att-value")][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[starts-with(@abort,"attri")][@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::theta[following-sibling::nu[@insert="attribute-value"]//rho[starts-with(concat(@content,"-"),"true-")][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[following-sibling::omicron[@class][@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 2]]/chi[starts-with(concat(@false,"-"),"attribute-")][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@xml:lang="no-nb"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@abort][@xml:lang="en-GB"][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <rho> + <theta name="content" xml:lang="en-GB"/> + <phi content="attribute-value"> + <eta number="_blank" xml:lang="no" xml:id="id1"> + <chi xml:id="id2"> + <sigma xml:lang="no-nb"> + <omicron xml:lang="en-US"/> + <nu att="100%" xml:lang="en"> + <sigma attribute="attribute" xml:lang="en-GB"> + <sigma object="false"> + <omega xml:lang="nb" xml:id="id3"> + <omega token="attribute-value" xml:lang="nb" xml:id="id4"> + <mu xml:lang="en"/> + <upsilon class="this-is-att-value" xml:lang="en-US" xml:id="id5"> + <rho abort="attribute value" xml:lang="nb" xml:id="id6"/> + <theta/> + <nu insert="attribute-value"> + <rho content="true" xml:lang="en" xml:id="id7"/> + <upsilon/> + <omicron class="this.nodeValue" xml:lang="en" xml:id="id8"> + <chi false="attribute-value"> + <lambda xml:lang="no-nb" xml:id="id9"/> + <chi abort="attribute value" xml:lang="en-GB"> + <green>This text must be green</green> + </chi> + </chi> + </omicron> + </nu> + </upsilon> + </omega> + </omega> + </sigma> + </sigma> + </nu> + </sigma> + </chi> + </eta> + </phi> + </rho> + </tree> + </test> + <test> + <xpath>//mu[starts-with(concat(@insert,"-"),"attribute value-")][@xml:lang="no"]//zeta[not(child::node())][following-sibling::theta[@xml:lang="en"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::pi[starts-with(@string,"fal")][@xml:id="id2"][preceding-sibling::*[position() = 2]]/sigma[contains(@class,"ank")][following-sibling::*[position()=5]][not(child::node())][following-sibling::xi[@att="_blank"][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::tau[@false][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(child::node())][following-sibling::chi[contains(@and,"bute-value")][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::gamma[preceding-sibling::*[position() = 4]][following-sibling::iota[@xml:id="id5"][not(following-sibling::*)]//eta[@insert="_blank"][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::nu[starts-with(concat(@title,"-"),"true-")][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::phi[@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::eta[starts-with(concat(@att,"-"),"_blank-")][@xml:lang="en-US"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::alpha//omicron[not(preceding-sibling::*)]//omega[@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@title="_blank"][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[@name][@xml:lang="no"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]]]]]]</xpath> + <tree> + <mu insert="attribute value" xml:lang="no"> + <zeta/> + <theta xml:lang="en" xml:id="id1"/> + <pi string="false" xml:id="id2"> + <sigma class="_blank"/> + <xi att="_blank" xml:lang="en-GB" xml:id="id3"/> + <tau false="this-is-att-value"/> + <chi and="attribute-value" xml:id="id4"/> + <gamma/> + <iota xml:id="id5"> + <eta insert="_blank" xml:lang="no-nb"/> + <nu title="true" xml:id="id6"/> + <phi xml:id="id7"/> + <gamma/> + <eta att="_blank" xml:lang="en-US"/> + <alpha> + <omicron> + <omega xml:lang="no-nb" xml:id="id8"/> + <gamma title="_blank" xml:lang="no"> + <phi name="attribute-value" xml:lang="no"> + <green>This text must be green</green> + </phi> + </gamma> + </omicron> + </alpha> + </iota> + </pi> + </mu> + </tree> + </test> + <test> + <xpath>//upsilon[@attrib="123456789"][@xml:lang="no"]//alpha[@xml:lang="en"][following-sibling::delta[@attrib][@xml:lang="no-nb"][not(child::node())][following-sibling::lambda[starts-with(@attrib,"1")][@xml:lang="nb"][not(child::node())][following-sibling::eta[starts-with(@content,"attr")][@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 3]]/mu[@xml:id="id2"]/pi[@and][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@xml:lang="no"]/chi[@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[starts-with(@false,"false")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[starts-with(@abort,"10")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <upsilon attrib="123456789" xml:lang="no"> + <alpha xml:lang="en"/> + <delta attrib="false" xml:lang="no-nb"/> + <lambda attrib="100%" xml:lang="nb"/> + <eta content="attribute-value" xml:lang="no-nb" xml:id="id1"> + <mu xml:id="id2"> + <pi and="content" xml:id="id3"> + <nu xml:lang="no"> + <chi xml:id="id4"/> + <zeta xml:lang="en-US"> + <xi false="false" xml:lang="no-nb"> + <zeta abort="100%"/> + <epsilon> + <green>This text must be green</green> + </epsilon> + </xi> + </zeta> + </nu> + </pi> + </mu> + </eta> + </upsilon> + </tree> + </test> + <test> + <xpath>//sigma[@token][@xml:id="id1"]//rho[@xml:id="id2"][not(preceding-sibling::*)]//theta[starts-with(concat(@number,"-"),"false-")][not(child::node())][following-sibling::alpha[@number="attribute-value"][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//psi[@title][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)]//delta[starts-with(@insert,"fal")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::theta[@xml:lang="en-GB"][following-sibling::*[position()=4]][not(child::node())][following-sibling::rho[starts-with(concat(@number,"-"),"another attribute value-")][not(child::node())][following-sibling::psi[@delete="false"][@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::psi[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::pi[@attrib]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma token="another attribute value" xml:id="id1"> + <rho xml:id="id2"> + <theta number="false"/> + <alpha number="attribute-value" xml:lang="en" xml:id="id3"> + <psi title="true" xml:lang="en-GB" xml:id="id4"> + <delta insert="false" xml:lang="en-US"/> + <theta xml:lang="en-GB"/> + <rho number="another attribute value"/> + <psi delete="false" xml:lang="no" xml:id="id5"/> + <psi xml:lang="en-US" xml:id="id6"/> + <pi attrib="this.nodeValue"> + <green>This text must be green</green> + </pi> + </psi> + </alpha> + </rho> + </sigma> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="nb"]/chi[contains(concat(@true,"$"),"e$")][@xml:id="id1"]/xi[starts-with(@content,"1")][@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@xml:lang="en-GB"][not(child::node())][following-sibling::omicron[@xml:lang="no-nb"][@xml:id="id3"]/pi[@src][@xml:lang="nb"]/phi[not(preceding-sibling::*)][following-sibling::eta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[@content][@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]//theta[@abort][@xml:id="id5"][following-sibling::psi[@att][@xml:lang="nb"][@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@xml:id="id7"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <omega xml:lang="nb"> + <chi true="false" xml:id="id1"> + <xi content="100%" xml:lang="en" xml:id="id2"/> + <xi xml:lang="nb"> + <beta xml:lang="en-GB"/> + <omicron xml:lang="no-nb" xml:id="id3"> + <pi src="_blank" xml:lang="nb"> + <phi/> + <eta> + <sigma content="true" xml:lang="en" xml:id="id4"> + <theta abort="100%" xml:id="id5"/> + <psi att="solid 1px green" xml:lang="nb" xml:id="id6"/> + <omega xml:id="id7"> + <green>This text must be green</green> + </omega> + </sigma> + </eta> + </pi> + </omicron> + </xi> + </chi> + </omega> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="en-GB"]//alpha//phi[@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)]/upsilon[@attribute][@xml:lang="no"][not(following-sibling::*)][not(following-sibling::upsilon)]//chi[following-sibling::*[position()=2]][following-sibling::upsilon[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@title="solid 1px green"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/omicron[starts-with(@or,"fa")][not(child::node())][following-sibling::lambda[contains(concat(@token,"$"),"green$")][@xml:id="id3"][not(following-sibling::*)]/gamma[@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::omega[starts-with(@attrib,"a")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id6"][following-sibling::kappa[following-sibling::phi[contains(concat(@attribute,"$"),"k$")][@xml:lang="no-nb"][@xml:id="id7"][not(child::node())][following-sibling::iota[starts-with(concat(@delete,"-"),"100%-")][@xml:id="id8"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::*[@xml:lang="no-nb"][not(following-sibling::*)]//alpha[contains(concat(@number,"$"),"ibute-value$")]//omega[contains(@desciption,"0%")][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:id="id9"][not(following-sibling::*)]//xi[@xml:lang="en"][not(preceding-sibling::*)]/beta[@xml:lang="en-GB"][not(preceding-sibling::*)]/upsilon[@xml:id="id10"][not(following-sibling::*)]]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta xml:lang="en-GB"> + <alpha> + <phi xml:lang="no" xml:id="id1"> + <upsilon attribute="attribute-value" xml:lang="no"> + <chi/> + <upsilon/> + <nu title="solid 1px green" xml:id="id2"> + <omicron or="false"/> + <lambda token="solid 1px green" xml:id="id3"> + <gamma xml:lang="no" xml:id="id4"/> + <omega attrib="attribute" xml:lang="no"> + <omicron xml:id="id5"/> + <epsilon xml:id="id6"/> + <kappa/> + <phi attribute="_blank" xml:lang="no-nb" xml:id="id7"/> + <iota delete="100%" xml:id="id8"/> + <any xml:lang="no-nb"> + <alpha number="attribute-value"> + <omega desciption="100%"/> + <eta xml:id="id9"> + <xi xml:lang="en"> + <beta xml:lang="en-GB"> + <upsilon xml:id="id10"> + <green>This text must be green</green> + </upsilon> + </beta> + </xi> + </eta> + </alpha> + </any> + </omega> + </lambda> + </nu> + </upsilon> + </phi> + </alpha> + </eta> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@attribute,"$"),"ue$")]//chi[contains(concat(@object,"$"),"blank$")][@xml:id="id1"][not(preceding-sibling::*)]//delta[@xml:id="id2"]/iota[@title="123456789"][@xml:id="id3"]/beta[@xml:id="id4"][not(child::node())][following-sibling::rho[contains(@string,"sol")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::mu[@true][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[contains(concat(@and,"$"),"ibute-value$")]/rho[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::tau[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="no"][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota attribute="true"> + <chi object="_blank" xml:id="id1"> + <delta xml:id="id2"> + <iota title="123456789" xml:id="id3"> + <beta xml:id="id4"/> + <rho string="solid 1px green" xml:lang="en-US"/> + <mu true="this-is-att-value" xml:lang="no"/> + <zeta and="attribute-value"> + <rho/> + <tau xml:lang="en" xml:id="id5"/> + <nu xml:lang="no"> + <green>This text must be green</green> + </nu> + </zeta> + </iota> + </delta> + </chi> + </iota> + </tree> + </test> + <test> + <xpath>//omega[@name="false"][@xml:lang="no"][@xml:id="id1"]/lambda[@xml:id="id2"][not(preceding-sibling::lambda or following-sibling::lambda)]/xi[following-sibling::*[position()=1]][following-sibling::mu[@attr][@xml:lang="en-GB"][@xml:id="id3"]//sigma[contains(@number,"n")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[starts-with(concat(@src,"-"),"solid 1px green-")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:lang="en-US"][not(preceding-sibling::*)]//omicron[@xml:lang="nb"][not(following-sibling::*)]//pi[contains(@false,"green")][@xml:lang="en-GB"][@xml:id="id6"]//*[starts-with(@or,"c")][not(preceding-sibling::*)][following-sibling::pi[@xml:lang="no"][preceding-sibling::*[position() = 1]]//lambda[@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@attr="this.nodeValue"][@xml:lang="en-GB"]//xi[not(preceding-sibling::*)]//alpha[starts-with(concat(@class,"-"),"123456789-")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[not(following-sibling::*)]//beta[@xml:lang="en-US"][not(preceding-sibling::beta)]/nu[@xml:lang="en-US"][not(child::node())][following-sibling::nu[@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:id="id9"]//zeta[@xml:lang="no-nb"][not(parent::*/*[position()=2])]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <omega name="false" xml:lang="no" xml:id="id1"> + <lambda xml:id="id2"> + <xi/> + <mu attr="this.nodeValue" xml:lang="en-GB" xml:id="id3"> + <sigma number="solid 1px green" xml:lang="en" xml:id="id4"/> + <omega xml:lang="en-GB"> + <xi src="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <iota xml:lang="en-US"> + <omicron xml:lang="nb"> + <pi false="solid 1px green" xml:lang="en-GB" xml:id="id6"> + <any or="content"/> + <pi xml:lang="no"> + <lambda xml:lang="en" xml:id="id7"/> + <rho attr="this.nodeValue" xml:lang="en-GB"> + <xi> + <alpha class="123456789" xml:lang="nb"> + <kappa> + <beta xml:lang="en-US"> + <nu xml:lang="en-US"/> + <nu xml:id="id8"/> + <xi xml:id="id9"> + <zeta xml:lang="no-nb"> + <green>This text must be green</green> + </zeta> + </xi> + </beta> + </kappa> + </alpha> + </xi> + </rho> + </pi> + </pi> + </omicron> + </iota> + </xi> + </omega> + </mu> + </lambda> + </omega> + </tree> + </test> + <test> + <xpath>//phi[starts-with(concat(@class,"-"),"true-")][@xml:id="id1"]//beta[@xml:lang="no-nb"][@xml:id="id2"][not(child::node())][following-sibling::theta[@delete][following-sibling::rho[@title][@xml:id="id3"][not(following-sibling::*)]//iota[starts-with(concat(@title,"-"),"_blank-")][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[contains(concat(@data,"$"),"s-is-att-value$")][@xml:lang="no"][preceding-sibling::*[position() = 1]]//epsilon[contains(concat(@content,"$"),"lue$")][@xml:lang="en-GB"][@xml:id="id4"]//delta[starts-with(@desciption,"_blan")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::lambda[@and][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::mu[starts-with(concat(@data,"-"),"attribute-")][following-sibling::rho[contains(concat(@true,"$"),"ute value$")][@xml:id="id7"][following-sibling::psi[@desciption][@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]/tau[@attrib][@xml:lang="en-US"][not(child::node())][following-sibling::omicron[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[@xml:id="id9"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 3]][following-sibling::nu[preceding-sibling::*[position() = 4]][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <phi class="true" xml:id="id1"> + <beta xml:lang="no-nb" xml:id="id2"/> + <theta delete="solid 1px green"/> + <rho title="100%" xml:id="id3"> + <iota title="_blank"/> + <eta data="this-is-att-value" xml:lang="no"> + <epsilon content="attribute value" xml:lang="en-GB" xml:id="id4"> + <delta desciption="_blank" xml:id="id5"/> + <lambda and="100%" xml:id="id6"/> + <mu data="attribute-value"/> + <rho true="attribute value" xml:id="id7"/> + <psi desciption="_blank" xml:lang="en-GB" xml:id="id8"> + <tau attrib="false" xml:lang="en-US"/> + <omicron xml:lang="nb"/> + <lambda xml:id="id9"/> + <theta/> + <nu> + <green>This text must be green</green> + </nu> + </psi> + </epsilon> + </eta> + </rho> + </phi> + </tree> + </test> + <test> + <xpath>//nu[contains(concat(@or,"$"),"89$")]/iota[@desciption][@xml:lang="no"][@xml:id="id1"][not(child::node())][following-sibling::delta[contains(@attrib,"Value")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="en-US"]/gamma[not(preceding-sibling::*)][not(following-sibling::*)]//xi[@and][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::rho[contains(@attr,"%")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[contains(@class," val")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@delete][@xml:id="id3"][preceding-sibling::*[position() = 1]]//epsilon[contains(@true,"ue")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::tau[@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::gamma[@xml:lang="no-nb"][not(following-sibling::*)]//psi[starts-with(concat(@string,"-"),"another attribute value-")][@xml:lang="no"][not(preceding-sibling::*)]/pi[@att][@xml:lang="en-US"][not(preceding-sibling::*)]/chi[starts-with(concat(@object,"-"),"false-")][not(preceding-sibling::*)][following-sibling::omicron[@false="100%"][@xml:lang="no"][@xml:id="id6"][following-sibling::xi[@xml:id="id7"][following-sibling::lambda[not(following-sibling::*)]//*[not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:lang="en-US"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <nu or="123456789"> + <iota desciption="solid 1px green" xml:lang="no" xml:id="id1"/> + <delta attrib="this.nodeValue" xml:lang="en-US"/> + <chi xml:lang="en"/> + <theta xml:lang="en-US"> + <gamma> + <xi and="_blank" xml:lang="no"/> + <rho attr="100%" xml:lang="no"> + <eta class="attribute value" xml:id="id2"/> + <psi delete="another attribute value" xml:id="id3"> + <epsilon true="true" xml:lang="no"/> + <alpha xml:id="id4"/> + <tau xml:id="id5"/> + <gamma xml:lang="no-nb"> + <psi string="another attribute value" xml:lang="no"> + <pi att="false" xml:lang="en-US"> + <chi object="false"/> + <omicron false="100%" xml:lang="no" xml:id="id6"/> + <xi xml:id="id7"/> + <lambda> + <any/> + <chi xml:lang="en-US"> + <green>This text must be green</green> + </chi> + </lambda> + </pi> + </psi> + </gamma> + </psi> + </rho> + </gamma> + </theta> + </nu> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no"]/psi[@attr][@xml:id="id1"][following-sibling::*[position()=2]][following-sibling::eta[@delete][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::xi[@object][not(following-sibling::*)]/pi[@att][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[@abort][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:lang="no"> + <psi attr="attribute" xml:id="id1"/> + <eta delete="attribute"/> + <xi object="content"> + <pi att="solid 1px green" xml:id="id2"/> + <xi abort="this.nodeValue" xml:id="id3"> + <green>This text must be green</green> + </xi> + </xi> + </iota> + </tree> + </test> + <test> + <xpath>//upsilon//alpha[@content][@xml:id="id1"]//epsilon[contains(@attribute,"tent")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[@false="attribute value"][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::kappa[@attribute][@xml:lang="no"][not(following-sibling::*)]/xi[starts-with(concat(@true,"-"),"content-")][@xml:lang="no-nb"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:lang="en"][preceding-sibling::*[position() = 1]]//xi[@xml:id="id3"][not(following-sibling::*)]//lambda[starts-with(@attr,"another attribute valu")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]//gamma[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)]/rho[starts-with(concat(@src,"-"),"_blank-")][not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id6"]//omicron[@xml:lang="en-US"]/nu[@attribute][@xml:id="id7"][not(following-sibling::*)]//epsilon[contains(@src,"value")][@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::sigma[@desciption="123456789"][not(child::node())][following-sibling::chi[starts-with(@attribute,"attribute-value")][@xml:lang="en-US"]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <upsilon> + <alpha content="solid 1px green" xml:id="id1"> + <epsilon attribute="content" xml:lang="en-GB"> + <omega false="attribute value" xml:lang="en"/> + <kappa attribute="100%" xml:lang="no"> + <xi true="content" xml:lang="no-nb" xml:id="id2"/> + <epsilon xml:lang="en"> + <xi xml:id="id3"> + <lambda attr="another attribute value" xml:lang="en-US" xml:id="id4"> + <gamma xml:lang="no-nb" xml:id="id5"> + <rho src="_blank"/> + <alpha xml:id="id6"> + <omicron xml:lang="en-US"> + <nu attribute="attribute-value" xml:id="id7"> + <epsilon src="attribute-value" xml:lang="en-GB" xml:id="id8"/> + <sigma desciption="123456789"/> + <chi attribute="attribute-value" xml:lang="en-US"> + <green>This text must be green</green> + </chi> + </nu> + </omicron> + </alpha> + </gamma> + </lambda> + </xi> + </epsilon> + </kappa> + </epsilon> + </alpha> + </upsilon> + </tree> + </test> + <test> + <xpath>//beta[starts-with(@attrib,"f")][@xml:lang="no-nb"]//alpha[@data][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[starts-with(concat(@string,"-"),"solid 1px green-")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[starts-with(concat(@or,"-"),"attribute value-")][@xml:id="id2"]/theta[@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="nb"][@xml:id="id4"]/pi[@xml:lang="en"][@xml:id="id5"][not(following-sibling::*)]/alpha[starts-with(@string,"_")][@xml:lang="nb"][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::pi[@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[contains(@object,"lank")][not(following-sibling::*)]//zeta[contains(concat(@attribute,"$"),"ue$")][@xml:id="id8"][not(preceding-sibling::*)]/rho[starts-with(concat(@false,"-"),"content-")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="nb"][@xml:id="id9"]//mu[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@class][@xml:lang="no"]//omega[@xml:lang="nb"][not(child::node())][following-sibling::pi[@xml:id="id10"][not(child::node())][following-sibling::beta[starts-with(concat(@and,"-"),"100%-")][@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::omega[@xml:lang="en"][preceding-sibling::*[position() = 3]]/chi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::psi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@string="123456789"][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <beta attrib="false" xml:lang="no-nb"> + <alpha data="false" xml:id="id1"> + <omega string="solid 1px green" xml:lang="en"/> + <upsilon or="attribute value" xml:id="id2"> + <theta xml:lang="en-US" xml:id="id3"/> + <chi xml:lang="nb" xml:id="id4"> + <pi xml:lang="en" xml:id="id5"> + <alpha string="_blank" xml:lang="nb" xml:id="id6"/> + <pi xml:lang="en" xml:id="id7"/> + <omega object="_blank"> + <zeta attribute="true" xml:id="id8"> + <rho false="content" xml:lang="en-US"> + <mu xml:lang="nb" xml:id="id9"> + <mu xml:lang="en"/> + <beta class="_blank" xml:lang="no"> + <omega xml:lang="nb"/> + <pi xml:id="id10"/> + <beta and="100%" xml:lang="nb" xml:id="id11"/> + <omega xml:lang="en"> + <chi xml:lang="en"/> + <psi xml:lang="en-US"/> + <zeta string="123456789"> + <green>This text must be green</green> + </zeta> + </omega> + </beta> + </mu> + </rho> + </zeta> + </omega> + </pi> + </chi> + </upsilon> + </alpha> + </beta> + </tree> + </test> + <test> + <xpath>//epsilon[starts-with(concat(@false,"-"),"100%-")]/kappa[@xml:id="id1"][following-sibling::mu[@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 3]][not(following-sibling::*)]/alpha[not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::alpha or following-sibling::alpha)]/*[@xml:lang="en"][following-sibling::omega[starts-with(concat(@att,"-"),"100%-")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@attrib="attribute-value"][@xml:id="id3"][not(child::node())][following-sibling::iota[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::psi[starts-with(@att,"soli")][@xml:id="id4"][preceding-sibling::*[position() = 2]]/xi[@xml:id="id5"]//*[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::sigma[not(child::node())][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]]//tau[contains(@title,"is.nodeValue")][@xml:lang="en-GB"][not(preceding-sibling::*)]/pi[@xml:lang="no"][following-sibling::tau[@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[@xml:lang="no"]//alpha[not(following-sibling::*)]//epsilon[contains(@number,"e")]//tau[starts-with(concat(@token,"-"),"this-")][@xml:id="id9"][not(preceding-sibling::*)]/kappa[starts-with(concat(@name,"-"),"100%-")][not(preceding-sibling::*)][not(following-sibling::*)]]]][position() = 1]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <epsilon false="100%"> + <kappa xml:id="id1"/> + <mu xml:id="id2"/> + <zeta/> + <alpha> + <alpha> + <any xml:lang="en"/> + <omega att="100%" xml:lang="no"> + <any attrib="attribute-value" xml:id="id3"/> + <iota xml:lang="no-nb"/> + <psi att="solid 1px green" xml:id="id4"> + <xi xml:id="id5"> + <any xml:id="id6"/> + <sigma/> + <pi xml:lang="no-nb" xml:id="id7"> + <tau title="this.nodeValue" xml:lang="en-GB"> + <pi xml:lang="no"/> + <tau xml:lang="nb" xml:id="id8"/> + <upsilon xml:lang="no"> + <alpha> + <epsilon number="false"> + <tau token="this-is-att-value" xml:id="id9"> + <kappa name="100%"> + <green>This text must be green</green> + </kappa> + </tau> + </epsilon> + </alpha> + </upsilon> + </tau> + </pi> + </xi> + </psi> + </omega> + </alpha> + </alpha> + </epsilon> + </tree> + </test> + <test> + <xpath>//kappa[contains(@object,"ttrib")]//tau[@abort][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[contains(concat(@content,"$"),"een$")][following-sibling::mu[@object][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::iota[@xml:lang="en-US"]//psi[starts-with(@content,"123456")][@xml:id="id2"][not(preceding-sibling::*)]/omicron[@string][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]/chi[@content="_blank"][@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::gamma[@or="this.nodeValue"][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(following-sibling::gamma)][not(child::node())][following-sibling::mu[@name][@xml:lang="en-US"][@xml:id="id6"][not(child::node())][following-sibling::eta[@xml:id="id7"][not(following-sibling::*)]/phi][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa object="attribute"> + <tau abort="123456789" xml:id="id1"> + <tau content="solid 1px green"/> + <mu object="attribute value"/> + <psi/> + <iota xml:lang="en-US"> + <psi content="123456789" xml:id="id2"> + <omicron string="false" xml:lang="en-US" xml:id="id3"> + <chi content="_blank" xml:lang="nb" xml:id="id4"/> + <gamma or="this.nodeValue" xml:lang="en-GB" xml:id="id5"/> + <mu name="true" xml:lang="en-US" xml:id="id6"/> + <eta xml:id="id7"> + <phi> + <green>This text must be green</green> + </phi> + </eta> + </omicron> + </psi> + </iota> + </tau> + </kappa> + </tree> + </test> + <test> + <xpath>//beta[@attr="this.nodeValue"][@xml:lang="no-nb"]/theta[starts-with(@title,"100")]/omicron[@abort="true"][@xml:lang="en-GB"][not(child::node())][following-sibling::phi[@xml:id="id1"]/chi[contains(@attr,"u")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//sigma[@string="this-is-att-value"][not(following-sibling::*)]//epsilon[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[@name="content"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[starts-with(@string,"attribute")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)]//chi[@xml:lang="en-GB"][@xml:id="id7"][position() = 1]]]</xpath> + <tree> + <beta attr="this.nodeValue" xml:lang="no-nb"> + <theta title="100%"> + <omicron abort="true" xml:lang="en-GB"/> + <phi xml:id="id1"> + <chi attr="true" xml:lang="en-GB" xml:id="id2"/> + <nu xml:lang="no" xml:id="id3"> + <sigma string="this-is-att-value"> + <epsilon xml:id="id4"> + <epsilon name="content" xml:id="id5"> + <alpha string="attribute value" xml:lang="no-nb" xml:id="id6"> + <chi xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </chi> + </alpha> + </epsilon> + </epsilon> + </sigma> + </nu> + </phi> + </theta> + </beta> + </tree> + </test> + <test> + <xpath>//omicron/zeta[@xml:lang="en-US"][not(preceding-sibling::*)]/*[not(preceding-sibling::*)][not(following-sibling::*)]/mu[starts-with(concat(@false,"-"),"false-")][@xml:lang="nb"][not(following-sibling::*)]/beta[contains(concat(@and,"$"),"100%$")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@desciption][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[contains(@token,"nten")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::pi[contains(@token,"olid 1px ")][@xml:id="id3"][following-sibling::alpha[@name="this-is-att-value"][not(following-sibling::*)]//psi[@xml:lang="nb"][@xml:id="id4"]//epsilon[not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="no"][following-sibling::epsilon[@xml:lang="en"][@xml:id="id5"][following-sibling::epsilon[@object][@xml:lang="no-nb"][not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron> + <zeta xml:lang="en-US"> + <any> + <mu false="false" xml:lang="nb"> + <beta and="100%" xml:lang="en-US" xml:id="id1"/> + <pi desciption="this-is-att-value" xml:lang="en" xml:id="id2"> + <rho xml:lang="nb"> + <kappa token="content" xml:lang="nb"/> + <pi token="solid 1px green" xml:id="id3"/> + <alpha name="this-is-att-value"> + <psi xml:lang="nb" xml:id="id4"> + <epsilon/> + <nu xml:lang="no"/> + <epsilon xml:lang="en" xml:id="id5"/> + <epsilon object="another attribute value" xml:lang="no-nb"/> + <omicron xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </psi> + </alpha> + </rho> + </pi> + </mu> + </any> + </zeta> + </omicron> + </tree> + </test> + <test> + <xpath>//psi[@number][@xml:lang="en"]/xi[contains(@name,"id ")]/omega[starts-with(concat(@insert,"-"),"123456789-")][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@src][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::gamma[@xml:lang="no"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][following-sibling::mu[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::sigma[@attrib="_blank"][@xml:id="id3"][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi number="solid 1px green" xml:lang="en"> + <xi name="solid 1px green"> + <omega insert="123456789"/> + <psi xml:id="id1"/> + <delta src="123456789"/> + <gamma xml:lang="no"/> + <mu xml:lang="en-US" xml:id="id2"/> + <sigma attrib="_blank" xml:id="id3"> + <green>This text must be green</green> + </sigma> + </xi> + </psi> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]//beta[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]//lambda[not(preceding-sibling::*)][not(following-sibling::*)]/omicron[contains(concat(@desciption,"$"),"e$")][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//xi[@xml:lang="en-GB"]/nu[contains(concat(@abort,"$"),"e$")][@xml:id="id4"][not(following-sibling::*)]/nu[starts-with(@string,"this.n")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][following-sibling::omicron[preceding-sibling::*[position() = 2]]/gamma[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@class][@xml:lang="en-US"][@xml:id="id6"][following-sibling::*[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]//xi[@xml:id="id9"][not(preceding-sibling::*)]//omega[@name="_blank"][@xml:lang="no-nb"][@xml:id="id10"][not(following-sibling::*)]//pi[starts-with(@and,"solid 1px g")][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]]</xpath> + <tree> + <mu xml:id="id1"> + <beta xml:lang="en-US" xml:id="id2"> + <lambda> + <omicron desciption="this.nodeValue" xml:lang="no-nb" xml:id="id3"> + <xi xml:lang="en-GB"> + <nu abort="false" xml:id="id4"> + <nu string="this.nodeValue"/> + <omicron xml:lang="en-US"/> + <omicron> + <gamma xml:lang="nb" xml:id="id5"> + <mu class="attribute" xml:lang="en-US" xml:id="id6"/> + <any xml:lang="no" xml:id="id7"/> + <eta xml:lang="en-GB" xml:id="id8"> + <xi xml:id="id9"> + <omega name="_blank" xml:lang="no-nb" xml:id="id10"> + <pi and="solid 1px green"> + <green>This text must be green</green> + </pi> + </omega> + </xi> + </eta> + </gamma> + </omicron> + </nu> + </xi> + </omicron> + </lambda> + </beta> + </mu> + </tree> + </test> + <test> + <xpath>//rho[contains(concat(@desciption,"$"),"tribute value$")][@xml:lang="nb"]/alpha[contains(concat(@string,"$"),"e$")][@xml:lang="nb"][@xml:id="id1"][following-sibling::lambda[@name][@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::eta[@insert][@xml:id="id3"]/theta[@xml:id="id4"]//chi[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::eta[@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@xml:lang="nb"][not(following-sibling::*)]//zeta[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:id="id8"][not(following-sibling::*)]//psi[@xml:lang="nb"][@xml:id="id9"][following-sibling::omega[@false="attribute"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(@data,"e")][@xml:lang="no"][preceding-sibling::*[position() = 2]][following-sibling::phi[@number="another attribute value"][@xml:lang="en-US"][@xml:id="id10"][following-sibling::beta[@token][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::chi[@false][@xml:id="id11"][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <rho desciption="attribute value" xml:lang="nb"> + <alpha string="attribute-value" xml:lang="nb" xml:id="id1"/> + <lambda name="100%" xml:lang="nb" xml:id="id2"/> + <eta insert="_blank" xml:id="id3"> + <theta xml:id="id4"> + <chi xml:lang="no-nb" xml:id="id5"/> + <eta xml:id="id6"/> + <mu xml:lang="nb"> + <zeta xml:id="id7"> + <lambda xml:id="id8"> + <psi xml:lang="nb" xml:id="id9"/> + <omega false="attribute"/> + <delta data="attribute-value" xml:lang="no"/> + <phi number="another attribute value" xml:lang="en-US" xml:id="id10"/> + <beta token="attribute"/> + <chi false="attribute-value" xml:id="id11"> + <green>This text must be green</green> + </chi> + </lambda> + </zeta> + </mu> + </theta> + </eta> + </rho> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="en-GB"]/lambda[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::iota[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[@attr][@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]//eta[starts-with(concat(@desciption,"-"),"this-")][@xml:lang="no"][not(child::node())][following-sibling::*[@or="another attribute value"][not(child::node())][following-sibling::beta[contains(concat(@object,"$"),"other attribute value$")][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[starts-with(@string,"thi")][@xml:lang="nb"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::omicron[@attr][not(following-sibling::*)]/theta[@att][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::chi[@xml:lang="nb"][not(following-sibling::*)]//beta[not(preceding-sibling::*)]/nu[@or][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[starts-with(@delete,"conten")][not(preceding-sibling::iota)][not(child::node())][following-sibling::lambda[contains(concat(@attrib,"$"),"9$")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/phi[@xml:id="id7"][not(preceding-sibling::*)]/lambda[starts-with(@attrib,"conten")]/zeta[@xml:lang="en"]//lambda[starts-with(@content,"at")][@xml:lang="en-US"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <alpha xml:lang="en-GB"> + <lambda xml:lang="en" xml:id="id1"/> + <iota xml:id="id2"> + <rho attr="_blank" xml:lang="en-US" xml:id="id3"> + <eta desciption="this-is-att-value" xml:lang="no"/> + <any or="another attribute value"/> + <beta object="another attribute value" xml:lang="nb" xml:id="id4"/> + <omega string="this.nodeValue" xml:lang="nb"/> + <omicron attr="100%"> + <theta att="false" xml:lang="en"/> + <chi xml:lang="nb"> + <beta> + <nu or="this-is-att-value" xml:lang="no" xml:id="id5"> + <iota delete="content"/> + <lambda attrib="123456789" xml:lang="en"/> + <omicron xml:id="id6"> + <phi xml:id="id7"> + <lambda attrib="content"> + <zeta xml:lang="en"> + <lambda content="attribute" xml:lang="en-US"> + <green>This text must be green</green> + </lambda> + </zeta> + </lambda> + </phi> + </omicron> + </nu> + </beta> + </chi> + </omicron> + </rho> + </iota> + </alpha> + </tree> + </test> + <test> + <xpath>//omicron/chi[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@src][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::beta[starts-with(concat(@false,"-"),"this-")][preceding-sibling::*[position() = 2]]/phi[@string][@xml:id="id3"]//beta[contains(concat(@name,"$"),"r attribute value$")][@xml:lang="no-nb"][not(preceding-sibling::*)]//gamma[@att][following-sibling::beta[not(following-sibling::*)]//*[@number][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[contains(@class,"r")]/rho[@xml:id="id4"][not(child::node())][following-sibling::sigma[@insert][@xml:id="id5"][preceding-sibling::*[position() = 1]]/gamma[@xml:lang="nb"][@xml:id="id6"][not(child::node())][following-sibling::iota[@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[starts-with(@name,"100%")][not(following-sibling::*)]//epsilon[@xml:lang="no-nb"][not(preceding-sibling::*)]/theta[@xml:lang="nb"][not(child::node())][following-sibling::zeta[contains(@false,"bu")][@xml:id="id8"][not(following-sibling::*)]/nu[following-sibling::epsilon[starts-with(@attribute,"tr")]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omicron> + <chi xml:id="id1"/> + <tau src="_blank" xml:id="id2"/> + <beta false="this-is-att-value"> + <phi string="_blank" xml:id="id3"> + <beta name="another attribute value" xml:lang="no-nb"> + <gamma att="true"/> + <beta> + <any number="true"/> + <xi class="true"> + <rho xml:id="id4"/> + <sigma insert="attribute-value" xml:id="id5"> + <gamma xml:lang="nb" xml:id="id6"/> + <iota xml:lang="en" xml:id="id7"/> + <psi name="100%"> + <epsilon xml:lang="no-nb"> + <theta xml:lang="nb"/> + <zeta false="attribute-value" xml:id="id8"> + <nu/> + <epsilon attribute="true"> + <green>This text must be green</green> + </epsilon> + </zeta> + </epsilon> + </psi> + </sigma> + </xi> + </beta> + </beta> + </phi> + </beta> + </omicron> + </tree> + </test> + <test> + <xpath>//beta[@xml:id="id1"]/upsilon[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[@xml:id="id3"][following-sibling::chi[not(following-sibling::*)]/sigma[starts-with(@content,"12345678")][@xml:lang="en-GB"][@xml:id="id4"][following-sibling::lambda[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id6"][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]]/eta[following-sibling::omicron[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::eta[@insert="solid 1px green"][@xml:lang="no"][@xml:id="id7"][following-sibling::theta[@xml:id="id8"][preceding-sibling::*[position() = 4]]//zeta[@delete][not(preceding-sibling::*)][following-sibling::alpha[contains(@data,"ue")][not(child::node())][following-sibling::alpha[@xml:lang="no-nb"][not(following-sibling::*)]/kappa[@attr][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[starts-with(@token,"attr")][following-sibling::xi[@insert][@xml:lang="nb"][@xml:id="id9"][following-sibling::phi//alpha[starts-with(concat(@token,"-"),"content-")][@xml:lang="no"][@xml:id="id10"][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id11"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]]]]][position() = 1]][position() = 1]]]]][position() = 1]]]]</xpath> + <tree> + <beta xml:id="id1"> + <upsilon xml:lang="no" xml:id="id2"/> + <delta xml:id="id3"/> + <chi> + <sigma content="123456789" xml:lang="en-GB" xml:id="id4"/> + <lambda xml:lang="no-nb" xml:id="id5"/> + <delta xml:lang="en-GB" xml:id="id6"/> + <omega xml:lang="en-GB"> + <eta/> + <omicron xml:lang="nb"/> + <upsilon/> + <eta insert="solid 1px green" xml:lang="no" xml:id="id7"/> + <theta xml:id="id8"> + <zeta delete="this.nodeValue"/> + <alpha data="true"/> + <alpha xml:lang="no-nb"> + <kappa attr="100%"> + <zeta token="attribute"/> + <xi insert="another attribute value" xml:lang="nb" xml:id="id9"/> + <phi> + <alpha token="content" xml:lang="no" xml:id="id10"/> + <delta xml:lang="en-GB" xml:id="id11"> + <green>This text must be green</green> + </delta> + </phi> + </kappa> + </alpha> + </theta> + </omega> + </chi> + </beta> + </tree> + </test> + <test> + <xpath>//mu[@insert][@xml:lang="nb"]/chi[@title][@xml:id="id1"][not(preceding-sibling::*)]/sigma[@false][not(preceding-sibling::*)][not(following-sibling::*)]/chi[contains(@desciption,"1")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:lang="en"][not(following-sibling::*)]/beta[@attrib][not(following-sibling::*)]/epsilon[@xml:lang="no"][not(child::node())][following-sibling::mu[@xml:id="id3"]/rho[@xml:lang="no"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@title="attribute value"][not(following-sibling::*)]//theta[starts-with(concat(@token,"-"),"another attribute value-")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@attr="another attribute value"][@xml:lang="no"][not(preceding-sibling::*)]//omega[starts-with(@object,"another attribute value")][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)]//tau[not(preceding-sibling::*)][not(child::node())][following-sibling::iota[starts-with(@name,"attri")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 2]][following-sibling::beta[@xml:id="id7"][not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id8"][not(child::node())][following-sibling::gamma[@xml:id="id9"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//xi[following-sibling::lambda[contains(concat(@true,"$"),"n$")][@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <mu insert="_blank" xml:lang="nb"> + <chi title="attribute" xml:id="id1"> + <sigma false="attribute value"> + <chi desciption="100%" xml:lang="en" xml:id="id2"> + <gamma xml:lang="en"> + <beta attrib="attribute"> + <epsilon xml:lang="no"/> + <mu xml:id="id3"> + <rho xml:lang="no" xml:id="id4"/> + <psi> + <chi title="attribute value"> + <theta token="another attribute value" xml:id="id5"> + <phi attr="another attribute value" xml:lang="no"> + <omega object="another attribute value" xml:lang="en-GB" xml:id="id6"> + <tau/> + <iota name="attribute" xml:lang="en-US"/> + <upsilon/> + <beta xml:id="id7"/> + <sigma xml:lang="no-nb" xml:id="id8"/> + <gamma xml:id="id9"> + <xi/> + <lambda true="solid 1px green" xml:lang="en-US" xml:id="id10"> + <green>This text must be green</green> + </lambda> + </gamma> + </omega> + </phi> + </theta> + </chi> + </psi> + </mu> + </beta> + </gamma> + </chi> + </sigma> + </chi> + </mu> + </tree> + </test> + <test> + <xpath>//sigma[starts-with(concat(@src,"-"),"attribute-")]//zeta[@true][@xml:id="id1"][not(child::node())][following-sibling::psi[@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[contains(concat(@number,"$"),"s.nodeValue$")][@xml:id="id3"][preceding-sibling::*[position() = 2]]//mu[not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:lang="nb"][following-sibling::iota[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[@false="content"][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau[@xml:lang="en"][following-sibling::upsilon[@number="false"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]//pi[@xml:lang="nb"][@xml:id="id5"][following-sibling::*[position()=2]][following-sibling::epsilon[@delete="true"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::eta[@src="false"][@xml:lang="no-nb"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <sigma src="attribute"> + <zeta true="attribute" xml:id="id1"/> + <psi xml:lang="en" xml:id="id2"/> + <omega number="this.nodeValue" xml:id="id3"> + <mu> + <chi xml:lang="nb"/> + <iota/> + <gamma false="content" xml:lang="no"> + <tau xml:lang="en"/> + <upsilon number="false" xml:id="id4"/> + <xi xml:lang="en-GB"> + <pi xml:lang="nb" xml:id="id5"/> + <epsilon delete="true" xml:id="id6"/> + <eta src="false" xml:lang="no-nb"> + <green>This text must be green</green> + </eta> + </xi> + </gamma> + </mu> + </omega> + </sigma> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en-US"][@xml:id="id1"]//lambda[starts-with(@class,"att")][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 2]][following-sibling::alpha[@delete][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::iota[@xml:lang="en"][not(child::node())][following-sibling::chi[starts-with(concat(@or,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 5]][following-sibling::mu[@insert][@xml:id="id5"][preceding-sibling::*[position() = 6]]/nu[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::rho[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[starts-with(concat(@src,"-"),"100%-")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omicron[@insert="false"][@xml:id="id8"][following-sibling::iota[@xml:lang="no"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::iota)]]]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="en-US" xml:id="id1"> + <lambda class="attribute value"/> + <nu xml:id="id2"/> + <beta/> + <alpha delete="123456789" xml:id="id3"/> + <iota xml:lang="en"/> + <chi or="this.nodeValue" xml:lang="nb" xml:id="id4"/> + <mu insert="true" xml:id="id5"> + <nu xml:id="id6"/> + <rho xml:id="id7"/> + <any src="100%" xml:lang="en-US"> + <omicron insert="false" xml:id="id8"/> + <iota xml:lang="no" xml:id="id9"> + <green>This text must be green</green> + </iota> + </any> + </mu> + </kappa> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:id="id1"]//alpha[contains(concat(@string,"$"),"ttribute$")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:id="id3"]/phi[@xml:lang="no"][following-sibling::*[position()=4]][not(child::node())][following-sibling::beta[@xml:id="id4"][not(child::node())][following-sibling::phi[following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::omega[@xml:lang="en-GB"][not(following-sibling::*)]/pi[starts-with(@or,"_bl")][@xml:id="id6"][not(following-sibling::*)]//pi[contains(@title,"rue")][not(preceding-sibling::*)]/eta[@xml:lang="en-GB"][@xml:id="id7"]/omega[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[not(following-sibling::*)]/lambda[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[starts-with(concat(@src,"-"),"true-")][@xml:lang="no-nb"][@xml:id="id10"][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[contains(@attrib,"t")][@xml:id="id11"][not(following-sibling::*)]//theta[@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <epsilon xml:id="id1"> + <alpha string="attribute" xml:id="id2"/> + <omicron xml:id="id3"> + <phi xml:lang="no"/> + <beta xml:id="id4"/> + <phi/> + <chi xml:id="id5"/> + <omega xml:lang="en-GB"> + <pi or="_blank" xml:id="id6"> + <pi title="true"> + <eta xml:lang="en-GB" xml:id="id7"> + <omega xml:lang="en-GB" xml:id="id8"> + <kappa> + <lambda xml:id="id9"> + <delta src="true" xml:lang="no-nb" xml:id="id10"/> + <any attrib="content" xml:id="id11"> + <theta xml:id="id12"> + <green>This text must be green</green> + </theta> + </any> + </lambda> + </kappa> + </omega> + </eta> + </pi> + </pi> + </omega> + </omicron> + </epsilon> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]//mu[@object][@xml:lang="en"][not(following-sibling::*)]/mu[@xml:lang="en"][not(following-sibling::*)]/sigma[@xml:lang="no"][not(preceding-sibling::*)]//kappa[@desciption][@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::xi[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::alpha[contains(concat(@and,"$"),"lank$")][@xml:id="id4"]/theta[contains(concat(@true,"$"),"ribute$")][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]//chi[@string="attribute-value"][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=5]][following-sibling::psi[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::tau[@xml:lang="no-nb"][following-sibling::beta[starts-with(concat(@src,"-"),"false-")][@xml:lang="no-nb"][@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::lambda[@xml:id="id9"][preceding-sibling::*[position() = 5]][not(following-sibling::*)][not(preceding-sibling::lambda)]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <mu object="attribute value" xml:lang="en"> + <mu xml:lang="en"> + <sigma xml:lang="no"> + <kappa desciption="attribute value" xml:lang="en-GB" xml:id="id2"/> + <xi xml:lang="en-US" xml:id="id3"/> + <alpha and="_blank" xml:id="id4"> + <theta true="attribute" xml:lang="nb" xml:id="id5"> + <chi string="attribute-value" xml:lang="en-US"/> + <psi xml:id="id6"/> + <sigma xml:lang="no-nb" xml:id="id7"/> + <tau xml:lang="no-nb"/> + <beta src="false" xml:lang="no-nb" xml:id="id8"/> + <lambda xml:id="id9"> + <green>This text must be green</green> + </lambda> + </theta> + </alpha> + </sigma> + </mu> + </mu> + </phi> + </tree> + </test> + <test> + <xpath>//rho[@title="true"][@xml:lang="nb"][@xml:id="id1"]//phi[contains(concat(@false,"$"),"-value$")][@xml:id="id2"][not(following-sibling::*)]//chi[starts-with(@title,"_bl")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::kappa[@attr][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//eta[starts-with(@desciption,"fal")][@xml:id="id5"]/upsilon[starts-with(concat(@class,"-"),"another attribute value-")][@xml:lang="en"][following-sibling::zeta[contains(@data,"ute value")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 2]]//lambda[@xml:lang="en-US"][@xml:id="id7"][not(child::node())][following-sibling::*[contains(@attrib,"0%")][not(child::node())][following-sibling::beta[@number][@xml:lang="no-nb"][@xml:id="id8"][not(child::node())][following-sibling::nu[@xml:lang="no-nb"][@xml:id="id9"][preceding-sibling::*[position() = 3]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <rho title="true" xml:lang="nb" xml:id="id1"> + <phi false="attribute-value" xml:id="id2"> + <chi title="_blank" xml:lang="no"/> + <psi xml:lang="en-US" xml:id="id3"/> + <kappa attr="true" xml:id="id4"> + <eta desciption="false" xml:id="id5"> + <upsilon class="another attribute value" xml:lang="en"/> + <zeta data="another attribute value" xml:lang="en-US" xml:id="id6"/> + <pi> + <lambda xml:lang="en-US" xml:id="id7"/> + <any attrib="100%"/> + <beta number="attribute value" xml:lang="no-nb" xml:id="id8"/> + <nu xml:lang="no-nb" xml:id="id9"> + <green>This text must be green</green> + </nu> + </pi> + </eta> + </kappa> + </phi> + </rho> + </tree> + </test> + <test> + <xpath>//delta[contains(@title,"te")][@xml:id="id1"]//upsilon[@content][@xml:id="id2"][following-sibling::pi[@att][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[following-sibling::mu[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::mu)]/*[contains(@name,"lue")][not(preceding-sibling::*)]/omega[contains(@desciption,"%")][@xml:lang="en-US"][not(preceding-sibling::*)]/zeta[starts-with(concat(@attrib,"-"),"another attribute value-")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::pi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[starts-with(concat(@data,"-"),"attribute value-")][@xml:lang="nb"][@xml:id="id6"][following-sibling::*[@class][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@attr="another attribute value"][@xml:lang="en"][@xml:id="id7"]/xi[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)]//zeta[contains(@attribute,"se")][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@title="attribute"][@xml:lang="en"][@xml:id="id10"]/theta[starts-with(@content,"at")][@xml:id="id11"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:lang="nb"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <delta title="attribute" xml:id="id1"> + <upsilon content="attribute" xml:id="id2"/> + <pi att="attribute value" xml:lang="en-US" xml:id="id3"> + <chi/> + <mu xml:id="id4"> + <any name="this-is-att-value"> + <omega desciption="100%" xml:lang="en-US"> + <zeta attrib="another attribute value" xml:id="id5"/> + <pi xml:lang="en-US"> + <phi data="attribute value" xml:lang="nb" xml:id="id6"/> + <any class="_blank" xml:lang="en"> + <kappa attr="another attribute value" xml:lang="en" xml:id="id7"> + <xi src="this.nodeValue" xml:lang="en" xml:id="id8"> + <zeta attribute="false" xml:id="id9"/> + <delta title="attribute" xml:lang="en" xml:id="id10"> + <theta content="attribute-value" xml:id="id11"/> + <psi xml:lang="nb"> + <green>This text must be green</green> + </psi> + </delta> + </xi> + </kappa> + </any> + </pi> + </omega> + </any> + </mu> + </pi> + </delta> + </tree> + </test> + <test> + <xpath>//gamma[starts-with(concat(@attribute,"-"),"content-")][@xml:lang="en"][@xml:id="id1"]/tau[not(following-sibling::*)]/delta[contains(concat(@true,"$"),"reen$")][@xml:lang="en"][following-sibling::beta[@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::sigma[@string][@xml:lang="no"][@xml:id="id3"]/theta[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@insert][@xml:lang="no"][not(following-sibling::*)]/rho[@xml:lang="no-nb"][@xml:id="id5"]/kappa[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(concat(@desciption,"-"),"this.nodeValue-")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::beta[@att][@xml:id="id7"][preceding-sibling::*[position() = 1]]/rho[@xml:lang="no"][@xml:id="id8"][following-sibling::rho[starts-with(concat(@or,"-"),"false-")]/beta[@xml:lang="no-nb"][@xml:id="id9"][following-sibling::beta[@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <gamma attribute="content" xml:lang="en" xml:id="id1"> + <tau> + <delta true="solid 1px green" xml:lang="en"/> + <beta xml:id="id2"/> + <sigma string="solid 1px green" xml:lang="no" xml:id="id3"> + <theta xml:id="id4"/> + <phi insert="this-is-att-value" xml:lang="no"> + <rho xml:lang="no-nb" xml:id="id5"> + <kappa xml:id="id6"> + <beta desciption="this.nodeValue" xml:lang="en-US"/> + <beta att="attribute-value" xml:id="id7"> + <rho xml:lang="no" xml:id="id8"/> + <rho or="false"> + <beta xml:lang="no-nb" xml:id="id9"/> + <beta xml:id="id10"> + <green>This text must be green</green> + </beta> + </rho> + </beta> + </kappa> + </rho> + </phi> + </sigma> + </tau> + </gamma> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="no-nb"]//kappa[contains(@token,"1234567")][@xml:lang="en-GB"][not(preceding-sibling::*)]/alpha[@xml:lang="en"][not(following-sibling::*)]//epsilon[starts-with(@data,"tr")][@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[starts-with(concat(@and,"-"),"false-")][@xml:lang="en-US"][following-sibling::upsilon[not(following-sibling::*)]]]</xpath> + <tree> + <rho xml:lang="no-nb"> + <kappa token="123456789" xml:lang="en-GB"> + <alpha xml:lang="en"> + <epsilon data="true" xml:lang="nb" xml:id="id1"/> + <nu and="false" xml:lang="en-US"/> + <upsilon> + <green>This text must be green</green> + </upsilon> + </alpha> + </kappa> + </rho> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(concat(@src,"-"),"solid 1px green-")]//*[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)]//iota[@xml:lang="no-nb"]/phi[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:id="id2"][not(child::node())][following-sibling::theta[@xml:id="id3"][not(following-sibling::*)]//lambda[@class][@xml:lang="en-GB"][not(preceding-sibling::*)]/chi[@object][not(preceding-sibling::*)][not(following-sibling::*)]/*[starts-with(@token,"fa")]//phi[@xml:lang="en-GB"]/rho[contains(concat(@false,"$"),"id 1px green$")][not(following-sibling::rho)]/phi[@insert="another attribute value"][@xml:lang="no"][@xml:id="id4"][following-sibling::lambda[preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:lang="nb"][following-sibling::mu[@xml:id="id5"][preceding-sibling::*[position() = 3]]//lambda[starts-with(concat(@src,"-"),"false-")][@xml:lang="no"][@xml:id="id6"][not(child::node())][following-sibling::chi[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/nu[contains(concat(@string,"$"),"ttribute$")][@xml:id="id9"][not(child::node())][following-sibling::theta[contains(@true,"attribute-v")][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::nu[preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron src="solid 1px green"> + <any xml:lang="en" xml:id="id1"> + <iota xml:lang="no-nb"> + <phi src="this.nodeValue" xml:id="id2"/> + <theta xml:id="id3"> + <lambda class="100%" xml:lang="en-GB"> + <chi object="false"> + <any token="false"> + <phi xml:lang="en-GB"> + <rho false="solid 1px green"> + <phi insert="another attribute value" xml:lang="no" xml:id="id4"/> + <lambda/> + <lambda xml:lang="nb"/> + <mu xml:id="id5"> + <lambda src="false" xml:lang="no" xml:id="id6"/> + <chi xml:lang="no-nb" xml:id="id7"/> + <rho xml:lang="en" xml:id="id8"> + <nu string="attribute" xml:id="id9"/> + <theta true="attribute-value" xml:id="id10"/> + <nu> + <green>This text must be green</green> + </nu> + </rho> + </mu> + </rho> + </phi> + </any> + </chi> + </lambda> + </theta> + </iota> + </any> + </omicron> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="en-GB"][@xml:id="id1"]/omega[starts-with(@string,"c")][following-sibling::alpha[@desciption][@xml:lang="en"][@xml:id="id2"]/lambda[starts-with(concat(@number,"-"),"123456789-")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:lang="no-nb"][@xml:id="id4"][following-sibling::alpha[@delete][preceding-sibling::*[position() = 1]][following-sibling::beta[contains(@abort,"bute valu")][@xml:lang="nb"][@xml:id="id5"][following-sibling::xi[contains(concat(@class,"$"),"_blank$")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/chi[@xml:id="id6"]]]]][position() = 1]]</xpath> + <tree> + <theta xml:lang="en-GB" xml:id="id1"> + <omega string="content"/> + <alpha desciption="another attribute value" xml:lang="en" xml:id="id2"> + <lambda number="123456789" xml:id="id3"/> + <theta> + <mu xml:lang="no-nb" xml:id="id4"/> + <alpha delete="this-is-att-value"/> + <beta abort="another attribute value" xml:lang="nb" xml:id="id5"/> + <xi class="_blank"> + <chi xml:id="id6"> + <green>This text must be green</green> + </chi> + </xi> + </theta> + </alpha> + </theta> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(concat(@content,"-"),"true-")][@xml:lang="en-GB"][@xml:id="id1"]//theta[@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]]//rho[@xml:lang="en"][@xml:id="id3"][following-sibling::upsilon[contains(@desciption,"is-is-att-valu")][preceding-sibling::*[position() = 1]]//rho[@name][@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::pi[@string][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[@xml:lang="nb"][following-sibling::epsilon[@xml:lang="en-US"]]][position() = 1]]]</xpath> + <tree> + <zeta content="true" xml:lang="en-GB" xml:id="id1"> + <theta xml:lang="en-US" xml:id="id2"/> + <iota> + <rho xml:lang="en" xml:id="id3"/> + <upsilon desciption="this-is-att-value"> + <rho name="content" xml:lang="en-GB" xml:id="id4"/> + <pi string="123456789"> + <omega xml:lang="nb"/> + <epsilon xml:lang="en-US"> + <green>This text must be green</green> + </epsilon> + </pi> + </upsilon> + </iota> + </zeta> + </tree> + </test> + <test> + <xpath>//gamma[@xml:id="id1"]/theta[@xml:id="id2"][not(following-sibling::*)]//eta[contains(concat(@string,"$"),"00%$")][following-sibling::omega[starts-with(concat(@abort,"-"),"attribute-")][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@class][preceding-sibling::*[position() = 2]]//iota[@abort="this.nodeValue"][@xml:lang="en"][not(preceding-sibling::*)]/mu[starts-with(@insert,"attr")][@xml:lang="en-US"][following-sibling::omicron[@attr="_blank"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[not(child::node())][following-sibling::omega[@data="100%"][@xml:lang="no-nb"]//omega[@xml:lang="nb"][@xml:id="id4"]//xi[@xml:lang="en"][not(preceding-sibling::*)][not(preceding-sibling::xi)][not(child::node())][following-sibling::omega[starts-with(@abort,"100%")][preceding-sibling::*[position() = 1]]/tau[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::zeta[starts-with(@delete,"solid")][@xml:id="id5"][preceding-sibling::*[position() = 1]]/pi[@desciption="solid 1px green"][not(following-sibling::*)]/beta[@attribute="solid 1px green"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="nb"][following-sibling::iota[contains(@true,"true")][preceding-sibling::*[position() = 2]]//psi[contains(@delete,"ttribu")][not(preceding-sibling::*)][not(following-sibling::*)]//nu[not(preceding-sibling::*)][following-sibling::chi[@attr="attribute value"][following-sibling::iota[@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]]]]][position() = 1]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <gamma xml:id="id1"> + <theta xml:id="id2"> + <eta string="100%"/> + <omega abort="attribute-value" xml:id="id3"/> + <sigma class="another attribute value"> + <iota abort="this.nodeValue" xml:lang="en"> + <mu insert="attribute" xml:lang="en-US"/> + <omicron attr="_blank"/> + <theta/> + <omega data="100%" xml:lang="no-nb"> + <omega xml:lang="nb" xml:id="id4"> + <xi xml:lang="en"/> + <omega abort="100%"> + <tau xml:lang="nb"/> + <zeta delete="solid 1px green" xml:id="id5"> + <pi desciption="solid 1px green"> + <beta attribute="solid 1px green" xml:id="id6"/> + <xi xml:lang="nb"/> + <iota true="true"> + <psi delete="attribute-value"> + <nu/> + <chi attr="attribute value"/> + <iota xml:id="id7"> + <green>This text must be green</green> + </iota> + </psi> + </iota> + </pi> + </zeta> + </omega> + </omega> + </omega> + </iota> + </sigma> + </theta> + </gamma> + </tree> + </test> + <test> + <xpath>//*[starts-with(@number,"conten")][@xml:lang="nb"]/iota[@attr="123456789"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@data="attribute-value"][@xml:lang="no-nb"][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/nu[@xml:lang="no-nb"][not(preceding-sibling::*)]/psi[@xml:lang="en-US"][@xml:id="id1"][position() = 1]][position() = 1]]</xpath> + <tree> + <any number="content" xml:lang="nb"> + <iota attr="123456789"/> + <tau data="attribute-value" xml:lang="no-nb"/> + <rho xml:lang="no-nb"> + <nu xml:lang="no-nb"> + <psi xml:lang="en-US" xml:id="id1"> + <green>This text must be green</green> + </psi> + </nu> + </rho> + </any> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en"]/theta[not(following-sibling::*)]//nu[@delete][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[starts-with(@string,"_bl")][preceding-sibling::*[position() = 1]]/mu[@xml:id="id1"][not(preceding-sibling::*)]/beta[@xml:id="id2"]//upsilon[@xml:id="id3"][not(following-sibling::*)]/chi[contains(concat(@abort,"$"),"tribute-value$")][@xml:lang="en-GB"][@xml:id="id4"]/delta[@number][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[not(following-sibling::*)]//epsilon[@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="no"][preceding-sibling::*[position() = 1]]/tau[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@content][@xml:lang="en"][preceding-sibling::*[position() = 1]]//zeta[@and][@xml:id="id7"][following-sibling::mu[@insert="solid 1px green"][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[starts-with(@object,"10")][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <upsilon xml:lang="en"> + <theta> + <nu delete="attribute-value" xml:lang="no-nb"/> + <zeta string="_blank"> + <mu xml:id="id1"> + <beta xml:id="id2"> + <upsilon xml:id="id3"> + <chi abort="attribute-value" xml:lang="en-GB" xml:id="id4"> + <delta number="content"/> + <nu> + <epsilon xml:id="id5"/> + <nu xml:lang="no"> + <tau xml:id="id6"/> + <theta content="content" xml:lang="en"> + <zeta and="content" xml:id="id7"/> + <mu insert="solid 1px green" xml:lang="en"> + <xi object="100%"> + <green>This text must be green</green> + </xi> + </mu> + </theta> + </nu> + </nu> + </chi> + </upsilon> + </beta> + </mu> + </zeta> + </theta> + </upsilon> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en"][@xml:id="id1"]//omicron[not(preceding-sibling::*)][not(following-sibling::*)]//theta[@xml:lang="no-nb"]/delta[@xml:id="id2"]/phi[starts-with(@or,"another attribute value")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::rho[@xml:id="id5"][preceding-sibling::*[position() = 3]][not(preceding-sibling::rho)][following-sibling::upsilon[@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::omicron[contains(concat(@attr,"$"),"ttribute value$")][@xml:lang="en-US"]//phi[@xml:id="id7"][following-sibling::*[position()=3]][not(child::node())][following-sibling::gamma[@name][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[contains(@data,"ank")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[not(following-sibling::*)]//tau[@xml:lang="en-GB"][not(preceding-sibling::*)]/chi[following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[contains(@or,"blank")][@xml:lang="nb"]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <phi xml:lang="en" xml:id="id1"> + <omicron> + <theta xml:lang="no-nb"> + <delta xml:id="id2"> + <phi or="another attribute value" xml:lang="en"/> + <chi xml:lang="en-GB" xml:id="id3"/> + <omega xml:lang="no" xml:id="id4"/> + <rho xml:id="id5"/> + <upsilon xml:id="id6"/> + <omicron attr="attribute value" xml:lang="en-US"> + <phi xml:id="id7"/> + <gamma name="this.nodeValue" xml:lang="en"/> + <gamma data="_blank" xml:lang="en-GB"/> + <upsilon> + <tau xml:lang="en-GB"> + <chi/> + <pi or="_blank" xml:lang="nb"> + <green>This text must be green</green> + </pi> + </tau> + </upsilon> + </omicron> + </delta> + </theta> + </omicron> + </phi> + </tree> + </test> + <test> + <xpath>//theta[starts-with(concat(@delete,"-"),"another attribute value-")][@xml:lang="en"][@xml:id="id1"]//psi//beta[not(preceding-sibling::*)]/delta[not(preceding-sibling::*)]//lambda[starts-with(@class,"1")][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[contains(concat(@false,"$"),"e$")][@xml:id="id2"][not(preceding-sibling::*)]//omega[@name][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[contains(concat(@content,"$"),"attribute$")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//psi[@name="attribute"][@xml:id="id3"]//theta[contains(@or,"0%")]/xi[@xml:lang="no-nb"][@xml:id="id4"]//kappa[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[contains(@or,"solid 1px gre")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::chi)]/theta[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:lang="en"][preceding-sibling::*[position() = 1]]/psi[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[contains(concat(@attrib,"$"),"e$")][@xml:id="id7"][not(following-sibling::*)]/tau[@xml:lang="no-nb"]/beta[@xml:id="id8"][following-sibling::omega[contains(concat(@data,"$"),"lue$")][preceding-sibling::*[position() = 1]][following-sibling::epsilon[@xml:lang="en-US"][@xml:id="id9"]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <theta delete="another attribute value" xml:lang="en" xml:id="id1"> + <psi> + <beta> + <delta> + <lambda class="100%"> + <alpha false="true" xml:id="id2"> + <omega name="true" xml:lang="no"/> + <iota/> + <iota content="attribute"> + <psi name="attribute" xml:id="id3"> + <theta or="100%"> + <xi xml:lang="no-nb" xml:id="id4"> + <kappa xml:lang="en-US" xml:id="id5"> + <chi or="solid 1px green" xml:lang="en-GB"> + <theta xml:lang="nb"/> + <theta xml:lang="en"> + <psi xml:id="id6"> + <rho attrib="attribute value" xml:id="id7"> + <tau xml:lang="no-nb"> + <beta xml:id="id8"/> + <omega data="this.nodeValue"/> + <epsilon xml:lang="en-US" xml:id="id9"> + <green>This text must be green</green> + </epsilon> + </tau> + </rho> + </psi> + </theta> + </chi> + </kappa> + </xi> + </theta> + </psi> + </iota> + </alpha> + </lambda> + </delta> + </beta> + </psi> + </theta> + </tree> + </test> + <test> + <xpath>//eta[contains(@number,"deValue")][@xml:id="id1"]/delta[contains(@content,"ue")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::alpha[contains(@attrib,"0%")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/tau[@attr="attribute value"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::eta/lambda[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[not(preceding-sibling::*)][position() = 1]]]]</xpath> + <tree> + <eta number="this.nodeValue" xml:id="id1"> + <delta content="true" xml:lang="no" xml:id="id2"/> + <alpha attrib="100%"/> + <eta xml:lang="en" xml:id="id3"> + <tau attr="attribute value" xml:id="id4"/> + <eta> + <lambda xml:id="id5"> + <iota> + <green>This text must be green</green> + </iota> + </lambda> + </eta> + </eta> + </eta> + </tree> + </test> + <test> + <xpath>//kappa[@attr]/gamma[contains(concat(@content,"$"),"tribute value$")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[starts-with(@att,"f")]/xi[@token][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@src][preceding-sibling::*[position() = 2]][not(following-sibling::xi)]/kappa[@and][@xml:lang="en-GB"][not(child::node())][following-sibling::upsilon[@xml:lang="en"]//rho[@att="another attribute value"][@xml:lang="en"][not(preceding-sibling::*)]/beta[not(preceding-sibling::*)][not(following-sibling::*)]//nu[not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@att][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@xml:lang="en-US"][not(preceding-sibling::*)]/mu[@xml:id="id3"]/delta[@object][@xml:lang="en-GB"][not(following-sibling::*)]//gamma[starts-with(@attr,"attribu")][following-sibling::iota[@xml:id="id4"][following-sibling::phi[@or][@xml:id="id5"][not(following-sibling::*)]//sigma[not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::lambda[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//kappa[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::upsilon[contains(@data,"b")][@xml:lang="en-US"][@xml:id="id6"][not(child::node())][following-sibling::tau[@and="100%"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]]][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa attr="this-is-att-value"> + <gamma content="attribute value" xml:id="id1"> + <tau att="false"> + <xi token="attribute" xml:lang="en-GB"/> + <psi xml:id="id2"/> + <xi src="another attribute value"> + <kappa and="solid 1px green" xml:lang="en-GB"/> + <upsilon xml:lang="en"> + <rho att="another attribute value" xml:lang="en"> + <beta> + <nu/> + <mu att="attribute" xml:lang="en-US"> + <any xml:lang="en-US"> + <mu xml:id="id3"> + <delta object="attribute" xml:lang="en-GB"> + <gamma attr="attribute-value"/> + <iota xml:id="id4"/> + <phi or="attribute value" xml:id="id5"> + <sigma/> + <kappa xml:lang="nb"/> + <lambda> + <kappa xml:lang="en-GB"/> + <upsilon data="attribute-value" xml:lang="en-US" xml:id="id6"/> + <tau and="100%" xml:id="id7"> + <green>This text must be green</green> + </tau> + </lambda> + </phi> + </delta> + </mu> + </any> + </mu> + </beta> + </rho> + </upsilon> + </xi> + </tau> + </gamma> + </kappa> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no"]/beta[@false="solid 1px green"][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::omicron[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[contains(concat(@string,"$"),"tent$")][@xml:lang="en-GB"][not(preceding-sibling::*)]/nu[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@abort][@xml:lang="nb"][following-sibling::*[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[not(following-sibling::*)]/delta[@name="this-is-att-value"][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@insert][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[contains(@number,"n")][@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:id="id6"]/*[@xml:lang="en"]//upsilon[contains(concat(@delete,"$"),"ntent$")][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[@xml:id="id8"][not(following-sibling::*)]//omega[@object="false"][following-sibling::*[position()=1]][following-sibling::kappa[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[contains(concat(@title,"$"),"nodeValue$")][@xml:id="id9"][not(following-sibling::*)]//beta[starts-with(@title,"th")][not(preceding-sibling::*)][not(preceding-sibling::beta)][not(child::node())][following-sibling::rho[@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 1]]//upsilon[@token][@xml:id="id11"]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="no"> + <beta false="solid 1px green" xml:lang="en-GB" xml:id="id1"/> + <omicron> + <tau string="content" xml:lang="en-GB"> + <nu xml:lang="nb" xml:id="id2"> + <mu abort="attribute value" xml:lang="nb"/> + <any> + <chi> + <delta name="this-is-att-value" xml:lang="no-nb" xml:id="id3"> + <mu insert="attribute" xml:lang="nb" xml:id="id4"> + <kappa number="solid 1px green" xml:id="id5"/> + <theta xml:id="id6"> + <any xml:lang="en"> + <upsilon delete="content" xml:id="id7"/> + <phi xml:id="id8"> + <omega object="false"/> + <kappa xml:lang="en-US"> + <pi title="this.nodeValue" xml:id="id9"> + <beta title="this-is-att-value"/> + <rho xml:lang="no" xml:id="id10"> + <upsilon token="this.nodeValue" xml:id="id11"> + <green>This text must be green</green> + </upsilon> + </rho> + </pi> + </kappa> + </phi> + </any> + </theta> + </mu> + </delta> + </chi> + </any> + </nu> + </tau> + </omicron> + </kappa> + </tree> + </test> + <test> + <xpath>//gamma[@attribute][@xml:lang="no-nb"]/omega[not(preceding-sibling::*)]//xi[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(preceding-sibling::xi)][following-sibling::rho[contains(concat(@attribute,"$"),"e$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau/omicron[@true][@xml:lang="no"][not(following-sibling::*)]//pi[starts-with(concat(@attr,"-"),"content-")][@xml:lang="nb"][not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <gamma attribute="100%" xml:lang="no-nb"> + <omega> + <xi xml:lang="en" xml:id="id1"/> + <rho attribute="false"/> + <tau> + <omicron true="content" xml:lang="no"> + <pi attr="content" xml:lang="nb"> + <green>This text must be green</green> + </pi> + </omicron> + </tau> + </omega> + </gamma> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no-nb"]/psi[not(preceding-sibling::*)]//epsilon[not(preceding-sibling::*)][not(following-sibling::*)]//rho[starts-with(concat(@or,"-"),"100%-")][following-sibling::alpha[contains(@object,"green")][@xml:lang="en-GB"][not(child::node())][following-sibling::beta[@xml:id="id1"][preceding-sibling::*[position() = 2]][following-sibling::omega[@xml:id="id2"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/omega[contains(@data,"e val")][@xml:lang="en"]//alpha[contains(concat(@desciption,"$"),"9$")]//rho[@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::mu[starts-with(@data,"attribute valu")][@xml:lang="en-US"][@xml:id="id5"]//delta[starts-with(@content,"thi")][not(following-sibling::*)]//omega[@desciption][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[@data][not(child::node())][following-sibling::phi/kappa[starts-with(concat(@desciption,"-"),"this-")][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(@string,"a")][@xml:id="id7"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <tau xml:lang="no-nb"> + <psi> + <epsilon> + <rho or="100%"/> + <alpha object="solid 1px green" xml:lang="en-GB"/> + <beta xml:id="id1"/> + <omega xml:id="id2"/> + <omicron xml:lang="en-US" xml:id="id3"> + <omega data="attribute value" xml:lang="en"> + <alpha desciption="123456789"> + <rho xml:lang="no-nb" xml:id="id4"/> + <mu data="attribute value" xml:lang="en-US" xml:id="id5"> + <delta content="this-is-att-value"> + <omega desciption="this.nodeValue"/> + <eta data="100%"/> + <phi> + <kappa desciption="this-is-att-value" xml:id="id6"/> + <mu string="another attribute value" xml:id="id7"> + <green>This text must be green</green> + </mu> + </phi> + </delta> + </mu> + </alpha> + </omega> + </omicron> + </epsilon> + </psi> + </tau> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@name,"-"),"content-")][@xml:lang="en-US"]/alpha[contains(@number,"a")][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::lambda[@object][preceding-sibling::*[position() = 1]]//chi[@and][@xml:id="id2"][not(preceding-sibling::*)]//alpha[@xml:id="id3"][not(preceding-sibling::*)]//xi[@true][@xml:id="id4"][not(child::node())][following-sibling::pi[@false][preceding-sibling::*[position() = 1]]/rho[@xml:id="id5"][not(child::node())][following-sibling::psi[starts-with(@title,"12345678")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]]</xpath> + <tree> + <delta name="content" xml:lang="en-US"> + <alpha number="false" xml:id="id1"/> + <lambda object="attribute-value"> + <chi and="content" xml:id="id2"> + <alpha xml:id="id3"> + <xi true="content" xml:id="id4"/> + <pi false="123456789"> + <rho xml:id="id5"/> + <psi title="123456789"> + <green>This text must be green</green> + </psi> + </pi> + </alpha> + </chi> + </lambda> + </delta> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="en-GB"][@xml:id="id1"]//pi[contains(@att,"e")][@xml:lang="no"][@xml:id="id2"][not(following-sibling::pi)][following-sibling::eta[@attrib="false"][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::eta[@xml:lang="no"][not(child::node())][following-sibling::theta[@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 3]][following-sibling::theta/gamma[@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@name][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(preceding-sibling::omicron or following-sibling::omicron)][following-sibling::kappa[@name][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/delta[not(following-sibling::*)]/pi[@attribute="true"][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)]/beta[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]/lambda[@title="content"][@xml:id="id8"][following-sibling::epsilon[@abort="attribute value"][not(following-sibling::*)]//epsilon[@data="this.nodeValue"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en"][@xml:id="id10"][not(child::node())][following-sibling::omicron[@xml:id="id11"]/kappa[contains(@title,"lue")][@xml:id="id12"][not(preceding-sibling::*)][following-sibling::phi[@xml:lang="no-nb"][not(preceding-sibling::phi)][not(child::node())][following-sibling::beta[contains(concat(@string,"$"),"ue$")][@xml:id="id13"][following-sibling::*[position()=1]][following-sibling::zeta[starts-with(concat(@src,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id14"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]][position() = 1]]]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omicron xml:lang="en-GB" xml:id="id1"> + <pi att="true" xml:lang="no" xml:id="id2"/> + <eta attrib="false" xml:lang="no-nb" xml:id="id3"/> + <eta xml:lang="no"/> + <theta xml:lang="no-nb" xml:id="id4"/> + <theta> + <gamma xml:id="id5"/> + <omicron name="true" xml:lang="en-GB"/> + <kappa name="attribute"> + <delta> + <pi attribute="true" xml:lang="en" xml:id="id6"> + <beta xml:lang="en-GB" xml:id="id7"> + <lambda title="content" xml:id="id8"/> + <epsilon abort="attribute value"> + <epsilon data="this.nodeValue" xml:id="id9"/> + <omicron xml:lang="en" xml:id="id10"/> + <omicron xml:id="id11"> + <kappa title="attribute value" xml:id="id12"/> + <phi xml:lang="no-nb"/> + <beta string="attribute value" xml:id="id13"/> + <zeta src="attribute" xml:lang="en-US" xml:id="id14"> + <green>This text must be green</green> + </zeta> + </omicron> + </epsilon> + </beta> + </pi> + </delta> + </kappa> + </theta> + </omicron> + </tree> + </test> + <test> + <xpath>//epsilon[contains(concat(@attr,"$"),"reen$")][@xml:lang="en-GB"]//phi[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(preceding-sibling::phi)][not(child::node())][following-sibling::lambda[starts-with(@insert,"another attribute ")][@xml:lang="en"][preceding-sibling::*[position() = 1]]//iota[contains(@or,"bute-value")][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::iota[@xml:id="id2"]/kappa[@attr]/kappa[@xml:id="id3"][not(child::node())][following-sibling::eta[starts-with(concat(@true,"-"),"this.nodeValue-")][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::chi[@string][preceding-sibling::*[position() = 2]][not(preceding-sibling::chi)][following-sibling::theta[@xml:id="id5"][preceding-sibling::*[position() = 3]]//omicron[@insert][@xml:lang="en-US"][@xml:id="id6"][not(child::node())][following-sibling::psi[@xml:id="id7"][preceding-sibling::*[position() = 1]]//*[@xml:lang="no-nb"][not(following-sibling::*)]//tau[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)]/sigma[contains(concat(@false,"$"),"value$")][@xml:lang="en-GB"]//alpha[@class][not(child::node())][following-sibling::mu[contains(concat(@attrib,"$"),"blank$")][@xml:lang="no"][@xml:id="id9"][not(child::node())][following-sibling::tau[@xml:id="id10"][not(following-sibling::*)]/theta[starts-with(@attr,"attrib")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@xml:lang="en-US"][not(child::node())][following-sibling::gamma[@content][@xml:id="id11"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon attr="solid 1px green" xml:lang="en-GB"> + <phi/> + <lambda insert="another attribute value" xml:lang="en"> + <iota or="attribute-value" xml:id="id1"/> + <mu/> + <iota xml:id="id2"> + <kappa attr="content"> + <kappa xml:id="id3"/> + <eta true="this.nodeValue" xml:id="id4"/> + <chi string="100%"/> + <theta xml:id="id5"> + <omicron insert="this-is-att-value" xml:lang="en-US" xml:id="id6"/> + <psi xml:id="id7"> + <any xml:lang="no-nb"> + <tau xml:lang="en-GB" xml:id="id8"> + <sigma false="attribute-value" xml:lang="en-GB"> + <alpha class="attribute"/> + <mu attrib="_blank" xml:lang="no" xml:id="id9"/> + <tau xml:id="id10"> + <theta attr="attribute value" xml:lang="no-nb"> + <any xml:lang="en-US"/> + <gamma content="solid 1px green" xml:id="id11"> + <green>This text must be green</green> + </gamma> + </theta> + </tau> + </sigma> + </tau> + </any> + </psi> + </theta> + </kappa> + </iota> + </lambda> + </epsilon> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="nb"][@xml:id="id1"]//omicron[starts-with(@token,"1")][following-sibling::theta[contains(concat(@content,"$")," value$")][@xml:lang="en"]/beta[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:id="id3"][not(following-sibling::*)]//mu[@xml:lang="en-GB"][not(preceding-sibling::*)]/delta[@xml:lang="en"][not(preceding-sibling::*)]/beta[starts-with(concat(@attribute,"-"),"this-")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[not(child::node())][following-sibling::gamma[@xml:lang="en-US"][not(following-sibling::*)]//iota[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::beta[@content="true"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <rho xml:lang="nb" xml:id="id1"> + <omicron token="123456789"/> + <theta content="another attribute value" xml:lang="en"> + <beta xml:lang="en-US" xml:id="id2"/> + <tau xml:id="id3"> + <mu xml:lang="en-GB"> + <delta xml:lang="en"> + <beta attribute="this-is-att-value" xml:lang="en-US" xml:id="id4"/> + <mu/> + <gamma xml:lang="en-US"> + <iota xml:id="id5"/> + <beta content="true"> + <green>This text must be green</green> + </beta> + </gamma> + </delta> + </mu> + </tau> + </theta> + </rho> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(@data,"attribute value")][@xml:lang="en-GB"][@xml:id="id1"]//omega[@xml:id="id2"][following-sibling::theta[not(preceding-sibling::theta)]/gamma[@class][@xml:id="id3"][not(preceding-sibling::*)]/beta[contains(@attr,"value")][@xml:lang="en"][not(preceding-sibling::*)]//sigma[contains(concat(@object,"$"),"ttribute value$")][@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=4]][not(child::node())][following-sibling::omega[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::omega[contains(@object,"ru")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[@xml:lang="en-US"][@xml:id="id6"][following-sibling::upsilon[@xml:lang="en-US"][preceding-sibling::*[position() = 4]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha data="attribute value" xml:lang="en-GB" xml:id="id1"> + <omega xml:id="id2"/> + <theta> + <gamma class="content" xml:id="id3"> + <beta attr="this-is-att-value" xml:lang="en"> + <sigma object="attribute value" xml:lang="en" xml:id="id4"/> + <omega xml:lang="no" xml:id="id5"/> + <omega object="true" xml:lang="no-nb"/> + <omega xml:lang="en-US" xml:id="id6"/> + <upsilon xml:lang="en-US"> + <green>This text must be green</green> + </upsilon> + </beta> + </gamma> + </theta> + </alpha> + </tree> + </test> + <test> + <xpath>//lambda[contains(@object,"u")]//omicron[not(preceding-sibling::*)][following-sibling::gamma[starts-with(concat(@att,"-"),"another attribute value-")][@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[starts-with(@or,"attribute-")][@xml:lang="nb"][not(child::node())][following-sibling::pi[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::iota[@xml:id="id3"][preceding-sibling::*[position() = 2]]//sigma[@xml:id="id4"][not(following-sibling::*)]/theta[starts-with(@src,"another attri")][@xml:id="id5"][following-sibling::kappa[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::eta[contains(@true,"1")][@xml:lang="en-GB"][@xml:id="id8"][not(child::node())][following-sibling::chi[@xml:id="id9"][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda object="attribute-value"> + <omicron/> + <gamma att="another attribute value" xml:lang="en-GB" xml:id="id1"> + <epsilon or="attribute-value" xml:lang="nb"/> + <pi xml:lang="nb" xml:id="id2"/> + <iota xml:id="id3"> + <sigma xml:id="id4"> + <theta src="another attribute value" xml:id="id5"/> + <kappa xml:id="id6"/> + <delta xml:lang="no-nb" xml:id="id7"/> + <eta true="100%" xml:lang="en-GB" xml:id="id8"/> + <chi xml:id="id9"> + <green>This text must be green</green> + </chi> + </sigma> + </iota> + </gamma> + </lambda> + </tree> + </test> + <test> + <xpath>//sigma/iota[starts-with(concat(@data,"-"),"solid 1px green-")][@xml:lang="en"]/kappa[@and="false"][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@string="solid 1px green"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::psi)]/upsilon[starts-with(concat(@false,"-"),"_blank-")][not(preceding-sibling::*)]//pi[contains(concat(@attribute,"$"),"tent$")][not(following-sibling::*)]/alpha[not(following-sibling::*)]/kappa[starts-with(concat(@false,"-"),"this-")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@attr="123456789"][@xml:id="id2"][not(following-sibling::*)]/upsilon[contains(@or,"attrib")][@xml:lang="nb"][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][following-sibling::kappa[contains(concat(@name,"$"),"px green$")][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::rho[@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]/gamma[starts-with(@desciption,"_blan")][@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[following-sibling::epsilon[contains(@attribute,"tribute-value")][@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]//beta[contains(@src,"ue")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::beta)]//alpha[starts-with(@attr,"fals")][not(preceding-sibling::*)]/mu[following-sibling::gamma[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::iota[@xml:lang="no"][@xml:id="id8"][following-sibling::alpha[contains(@attr,"nodeVa")][@xml:lang="en-US"][@xml:id="id9"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <sigma> + <iota data="solid 1px green" xml:lang="en"> + <kappa and="false" xml:lang="en-GB"> + <psi string="solid 1px green"> + <upsilon false="_blank"> + <pi attribute="content"> + <alpha> + <kappa false="this-is-att-value" xml:id="id1"/> + <xi attr="123456789" xml:id="id2"> + <upsilon or="attribute value" xml:lang="nb"/> + <delta xml:lang="no-nb"/> + <kappa name="solid 1px green" xml:id="id3"/> + <rho xml:lang="nb" xml:id="id4"> + <gamma desciption="_blank" xml:lang="no-nb" xml:id="id5"/> + <upsilon/> + <epsilon attribute="attribute-value" xml:lang="en-US" xml:id="id6"> + <beta src="true" xml:lang="no" xml:id="id7"> + <alpha attr="false"> + <mu/> + <gamma/> + <pi/> + <iota xml:lang="no" xml:id="id8"/> + <alpha attr="this.nodeValue" xml:lang="en-US" xml:id="id9"> + <green>This text must be green</green> + </alpha> + </alpha> + </beta> + </epsilon> + </rho> + </xi> + </alpha> + </pi> + </upsilon> + </psi> + </kappa> + </iota> + </sigma> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="no"][@xml:id="id1"]//zeta[contains(@data,"another attri")][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@name][not(preceding-sibling::*)][following-sibling::tau[following-sibling::omicron[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::rho[starts-with(concat(@or,"-"),"100%-")][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 3]][following-sibling::upsilon[preceding-sibling::*[position() = 4]][not(following-sibling::*)]/omega[not(preceding-sibling::*)]//eta[@xml:lang="no"]//theta[@token][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/omicron[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@xml:lang="en-US"][@xml:id="id4"]/mu[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[contains(@object,"456789")][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@xml:lang="nb"][not(preceding-sibling::*)]/lambda[@and][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:lang="no"][not(following-sibling::eta)]/nu[contains(@abort,"attribute value")][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="no"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <chi xml:lang="no" xml:id="id1"> + <zeta data="another attribute value"> + <sigma name="content"/> + <tau/> + <omicron xml:lang="nb"/> + <rho or="100%" xml:lang="no" xml:id="id2"/> + <upsilon> + <omega> + <eta xml:lang="no"> + <theta token="another attribute value" xml:lang="en-US"> + <lambda xml:lang="en" xml:id="id3"> + <omicron/> + <xi xml:lang="en-US" xml:id="id4"> + <mu xml:id="id5"> + <chi object="123456789"> + <pi xml:lang="nb"> + <lambda and="attribute" xml:lang="no"/> + <eta xml:lang="no"> + <nu abort="another attribute value"> + <delta xml:lang="no"> + <green>This text must be green</green> + </delta> + </nu> + </eta> + </pi> + </chi> + </mu> + </xi> + </lambda> + </theta> + </eta> + </omega> + </upsilon> + </zeta> + </chi> + </tree> + </test> + <test> + <xpath>//phi[contains(@abort,"o")]/iota[@xml:id="id1"]/delta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@xml:id="id3"][following-sibling::upsilon[@string][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 2]]//*[@xml:id="id4"][following-sibling::sigma[@xml:lang="no"][@xml:id="id5"]/eta[starts-with(concat(@content,"-"),"attribute value-")][@xml:id="id6"]][position() = 1]][position() = 1]]]</xpath> + <tree> + <phi abort="content"> + <iota xml:id="id1"> + <delta xml:lang="no"/> + <epsilon xml:id="id2"> + <beta xml:id="id3"/> + <upsilon string="attribute-value" xml:lang="en-GB"/> + <chi> + <any xml:id="id4"/> + <sigma xml:lang="no" xml:id="id5"> + <eta content="attribute value" xml:id="id6"> + <green>This text must be green</green> + </eta> + </sigma> + </chi> + </epsilon> + </iota> + </phi> + </tree> + </test> + <test> + <xpath>//sigma//rho[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:id="id1"][preceding-sibling::*[position() = 1]]//nu[@attribute="_blank"][@xml:id="id2"]//tau[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/delta//gamma[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]</xpath> + <tree> + <sigma> + <rho xml:lang="nb"/> + <pi xml:id="id1"> + <nu attribute="_blank" xml:id="id2"> + <tau xml:lang="no-nb" xml:id="id3"> + <delta> + <gamma content="attribute" xml:lang="no-nb"> + <green>This text must be green</green> + </gamma> + </delta> + </tau> + </nu> + </pi> + </sigma> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:id="id1"]/nu[starts-with(@content,"f")]//xi[starts-with(@abort,"1")][not(child::node())][following-sibling::mu[@desciption="_blank"][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::*[@xml:lang="nb"][not(child::node())][following-sibling::eta[@xml:lang="no-nb"]][position() = 1]][position() = 1]]</xpath> + <tree> + <upsilon xml:id="id1"> + <nu content="false"> + <xi abort="123456789"/> + <mu desciption="_blank" xml:lang="en-US"/> + <any xml:lang="nb"/> + <eta xml:lang="no-nb"> + <green>This text must be green</green> + </eta> + </nu> + </upsilon> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(concat(@and,"-"),"this-")]/rho[starts-with(concat(@or,"-"),"this-")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::psi[contains(@and,"ute-value")][@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//epsilon[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[contains(@src,"lse")][@xml:id="id2"][following-sibling::nu[@xml:id="id3"][not(following-sibling::*)]/sigma[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@string][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]/delta[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@token="100%"][@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[starts-with(concat(@class,"-"),"another attribute value-")][@xml:id="id6"][not(preceding-sibling::*)]//psi[@xml:id="id7"][following-sibling::chi[starts-with(concat(@name,"-"),"attribute-")][@xml:lang="no"][preceding-sibling::*[position() = 1]]/chi[@xml:lang="nb"][not(following-sibling::*)]/rho[@title][not(preceding-sibling::*)]/omicron[@string][@xml:lang="en"][not(following-sibling::*)]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <zeta and="this-is-att-value"> + <rho or="this-is-att-value" xml:lang="en"/> + <xi xml:lang="en"/> + <psi and="attribute-value" xml:lang="no-nb" xml:id="id1"> + <epsilon xml:lang="no-nb"> + <lambda src="false" xml:id="id2"/> + <nu xml:id="id3"> + <sigma xml:lang="no-nb"> + <theta string="false" xml:lang="no" xml:id="id4"> + <delta xml:lang="en-US"/> + <upsilon token="100%" xml:lang="nb" xml:id="id5"> + <chi class="another attribute value" xml:id="id6"> + <psi xml:id="id7"/> + <chi name="attribute-value" xml:lang="no"> + <chi xml:lang="nb"> + <rho title="attribute-value"> + <omicron string="content" xml:lang="en"> + <green>This text must be green</green> + </omicron> + </rho> + </chi> + </chi> + </chi> + </upsilon> + </theta> + </sigma> + </nu> + </epsilon> + </psi> + </zeta> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="no"][@xml:id="id1"]/gamma[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::chi[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[@xml:id="id2"][not(preceding-sibling::*)]/phi[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::delta[@class="123456789"][@xml:lang="no-nb"][not(child::node())][following-sibling::rho[@xml:lang="en-US"][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 3]]/tau[@desciption][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="en-GB"]/beta[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(preceding-sibling::beta)][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[starts-with(concat(@title,"-"),"false-")][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::eta[starts-with(concat(@title,"-"),"false-")][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omicron[@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::tau[@xml:lang="no"][@xml:id="id8"][not(child::node())][following-sibling::gamma[contains(concat(@name,"$"),"value$")][@xml:lang="nb"][preceding-sibling::*[position() = 6]]//lambda[starts-with(@delete,"100%")][@xml:lang="nb"][@xml:id="id9"][not(child::node())][following-sibling::chi[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <pi xml:lang="no" xml:id="id1"> + <gamma xml:lang="en-US"/> + <chi xml:lang="no"> + <nu xml:id="id2"> + <phi xml:lang="no" xml:id="id3"/> + <delta class="123456789" xml:lang="no-nb"/> + <rho xml:lang="en-US"/> + <iota> + <tau desciption="attribute" xml:id="id4"/> + <theta xml:lang="en-GB"> + <beta xml:lang="en-GB" xml:id="id5"/> + <gamma/> + <omega title="false" xml:lang="en-GB" xml:id="id6"/> + <eta title="false" xml:lang="en-GB"/> + <omicron xml:lang="en" xml:id="id7"/> + <tau xml:lang="no" xml:id="id8"/> + <gamma name="another attribute value" xml:lang="nb"> + <lambda delete="100%" xml:lang="nb" xml:id="id9"/> + <chi xml:lang="en"> + <green>This text must be green</green> + </chi> + </gamma> + </theta> + </iota> + </nu> + </chi> + </pi> + </tree> + </test> + <test> + <xpath>//kappa[starts-with(concat(@desciption,"-"),"this.nodeValue-")][@xml:lang="nb"]//rho[@attribute="100%"][@xml:lang="en-GB"][following-sibling::delta[contains(@attrib,"c")][@xml:lang="en-US"][following-sibling::zeta[contains(@delete,"gre")][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[not(following-sibling::*)]/phi[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@xml:lang="nb"][not(following-sibling::*)]/phi[contains(concat(@string,"$"),"ibute value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@xml:id="id2"]/tau[starts-with(concat(@attribute,"-"),"solid 1px green-")][@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::tau[@xml:lang="en-GB"][not(following-sibling::*)]//delta[@xml:lang="en-GB"][following-sibling::chi[@xml:lang="en"][@xml:id="id3"][following-sibling::psi[contains(concat(@and,"$"),"e$")]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <kappa desciption="this.nodeValue" xml:lang="nb"> + <rho attribute="100%" xml:lang="en-GB"/> + <delta attrib="content" xml:lang="en-US"/> + <zeta delete="solid 1px green"/> + <gamma> + <phi xml:lang="en-US" xml:id="id1"> + <any xml:lang="nb"> + <phi string="attribute value" xml:lang="no-nb"> + <beta xml:id="id2"> + <tau attribute="solid 1px green" xml:lang="no"/> + <tau xml:lang="en-GB"> + <delta xml:lang="en-GB"/> + <chi xml:lang="en" xml:id="id3"/> + <psi and="this-is-att-value"> + <green>This text must be green</green> + </psi> + </tau> + </beta> + </phi> + </any> + </phi> + </gamma> + </kappa> + </tree> + </test> + <test> + <xpath>//pi[@title]/xi[@data][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[contains(@content,"r")][@xml:lang="nb"][not(preceding-sibling::*)]/kappa[@xml:lang="en"][following-sibling::gamma[@or="another attribute value"][@xml:id="id2"][not(following-sibling::*)]//eta[not(following-sibling::*)]//tau[starts-with(@desciption,"attribute")][@xml:id="id3"][following-sibling::iota[starts-with(@content,"_")][@xml:lang="no-nb"][@xml:id="id4"][following-sibling::omicron[@src="another attribute value"][@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//phi[@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)]//kappa[starts-with(@desciption,"this.n")][@xml:id="id7"]//lambda[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <pi title="_blank"> + <xi data="content" xml:id="id1"> + <kappa content="true" xml:lang="nb"> + <kappa xml:lang="en"/> + <gamma or="another attribute value" xml:id="id2"> + <eta> + <tau desciption="attribute value" xml:id="id3"/> + <iota content="_blank" xml:lang="no-nb" xml:id="id4"/> + <omicron src="another attribute value" xml:lang="en" xml:id="id5"> + <phi xml:lang="en" xml:id="id6"> + <kappa desciption="this.nodeValue" xml:id="id7"> + <lambda xml:lang="en-GB" xml:id="id8"> + <green>This text must be green</green> + </lambda> + </kappa> + </phi> + </omicron> + </eta> + </gamma> + </kappa> + </xi> + </pi> + </tree> + </test> + <test> + <xpath>//omicron[@xml:id="id1"]//iota[starts-with(@attr,"this-is-att-")][@xml:id="id2"][not(following-sibling::*)]/beta[@string][@xml:lang="no-nb"][not(child::node())][following-sibling::omega[@or][@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//pi[not(following-sibling::*)]/nu[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)]//tau[@xml:id="id5"][not(following-sibling::*)]//theta[@src][@xml:lang="en"][following-sibling::xi[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(preceding-sibling::xi)][not(child::node())][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/rho[starts-with(concat(@false,"-"),"false-")][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)]//phi[@attribute][@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]//omega[starts-with(concat(@abort,"-"),"attribute-")][@xml:lang="en-US"][following-sibling::*[position()=2]][following-sibling::lambda[@attrib="_blank"][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:id="id9"][preceding-sibling::*[position() = 2]]]][position() = 1]]]]</xpath> + <tree> + <omicron xml:id="id1"> + <iota attr="this-is-att-value" xml:id="id2"> + <beta string="content" xml:lang="no-nb"/> + <omega or="this-is-att-value" xml:lang="en-GB" xml:id="id3"> + <pi> + <nu xml:lang="nb" xml:id="id4"> + <tau xml:id="id5"> + <theta src="solid 1px green" xml:lang="en"/> + <xi xml:lang="en"/> + <xi xml:lang="en-GB" xml:id="id6"> + <rho false="false" xml:lang="en-GB" xml:id="id7"> + <phi attribute="attribute value" xml:lang="en-GB" xml:id="id8"> + <omega abort="attribute" xml:lang="en-US"/> + <lambda attrib="_blank"/> + <nu xml:id="id9"> + <green>This text must be green</green> + </nu> + </phi> + </rho> + </xi> + </tau> + </nu> + </pi> + </omega> + </iota> + </omicron> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no"]//theta[@xml:id="id1"][not(following-sibling::*)]/upsilon[@xml:id="id2"][not(preceding-sibling::*)]//*[@attribute][@xml:lang="no"]/eta[contains(concat(@string,"$"),"bute-value$")][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@title][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::alpha[@token][@xml:lang="en-US"][@xml:id="id5"][following-sibling::phi[contains(concat(@or,"$"),"e$")][@xml:lang="en"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::chi[@number="123456789"][@xml:lang="no-nb"][following-sibling::epsilon[starts-with(@name,"_blank")][@xml:id="id6"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//omega[@string][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="no-nb"]//omega[@xml:lang="no"][following-sibling::*[position()=3]][not(child::node())][following-sibling::*[@attr][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[contains(@abort,"tr")][@xml:lang="en"][@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::chi[starts-with(concat(@true,"-"),"attribute value-")][@xml:lang="en-GB"][not(following-sibling::*)]//pi[@xml:lang="en-US"][@xml:id="id10"][not(following-sibling::*)][not(following-sibling::pi)]/eta[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::kappa[@data][@xml:id="id11"][not(following-sibling::*)]/sigma[@attribute][not(preceding-sibling::*)][following-sibling::mu[@object][@xml:id="id12"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="no"][not(following-sibling::*)]//delta[@xml:lang="en-GB"][@xml:id="id13"][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]][position() = 1]]]][position() = 1]]]]][position() = 1]]]]]</xpath> + <tree> + <tau xml:lang="no"> + <theta xml:id="id1"> + <upsilon xml:id="id2"> + <any attribute="this-is-att-value" xml:lang="no"> + <eta string="attribute-value" xml:id="id3"/> + <mu title="attribute-value" xml:id="id4"/> + <alpha token="123456789" xml:lang="en-US" xml:id="id5"/> + <phi or="this-is-att-value" xml:lang="en"/> + <chi number="123456789" xml:lang="no-nb"/> + <epsilon name="_blank" xml:id="id6"> + <omega string="this.nodeValue" xml:id="id7"/> + <omicron xml:lang="no-nb"> + <omega xml:lang="no"/> + <any attr="another attribute value" xml:lang="en-GB" xml:id="id8"/> + <theta abort="another attribute value" xml:lang="en" xml:id="id9"/> + <chi true="attribute value" xml:lang="en-GB"> + <pi xml:lang="en-US" xml:id="id10"> + <eta/> + <kappa data="solid 1px green" xml:id="id11"> + <sigma attribute="content"/> + <mu object="100%" xml:id="id12"/> + <theta xml:lang="no"> + <delta xml:lang="en-GB" xml:id="id13"/> + <zeta> + <green>This text must be green</green> + </zeta> + </theta> + </kappa> + </pi> + </chi> + </omicron> + </epsilon> + </any> + </upsilon> + </theta> + </tau> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no"][@xml:id="id1"]/rho[@attrib="this-is-att-value"][@xml:id="id2"][not(preceding-sibling::*)][not(preceding-sibling::rho)][following-sibling::lambda[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@xml:id="id3"][not(child::node())][following-sibling::zeta[starts-with(@content,"true")][@xml:id="id4"]/pi[contains(concat(@attr,"$"),"0%$")][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::iota[@and][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::chi[@xml:lang="nb"][following-sibling::*[position()=3]][not(child::node())][following-sibling::upsilon[starts-with(@desciption,"another attr")][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][following-sibling::eta[starts-with(@number,"this-is-att-valu")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::chi[preceding-sibling::*[position() = 5]]//omega[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)]/upsilon[starts-with(@desciption,"fals")][following-sibling::delta[starts-with(@data,"this.nodeVa")][@xml:lang="no-nb"][@xml:id="id8"][not(following-sibling::*)]//epsilon[@content="false"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::epsilon)]/sigma[contains(@desciption,"9")][@xml:lang="nb"][not(preceding-sibling::*)]//rho[@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[starts-with(concat(@attribute,"-"),"false-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]//delta[@xml:lang="en-GB"][not(following-sibling::delta)][following-sibling::theta[@or="attribute"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[starts-with(@abort,"this.node")][@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@xml:id="id11"][preceding-sibling::*[position() = 3]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi xml:lang="no" xml:id="id1"> + <rho attrib="this-is-att-value" xml:id="id2"/> + <lambda> + <beta xml:id="id3"/> + <zeta content="true" xml:id="id4"> + <pi attr="100%" xml:lang="nb" xml:id="id5"/> + <iota and="solid 1px green"/> + <chi xml:lang="nb"/> + <upsilon desciption="another attribute value" xml:lang="en-GB"/> + <eta number="this-is-att-value" xml:lang="en-US" xml:id="id6"/> + <chi> + <omega xml:lang="no" xml:id="id7"> + <upsilon desciption="false"/> + <delta data="this.nodeValue" xml:lang="no-nb" xml:id="id8"> + <epsilon content="false"> + <sigma desciption="123456789" xml:lang="nb"> + <rho xml:id="id9"/> + <omicron attribute="false" xml:lang="nb"> + <delta xml:lang="en-GB"/> + <theta or="attribute"/> + <psi abort="this.nodeValue" xml:id="id10"/> + <upsilon xml:id="id11"> + <green>This text must be green</green> + </upsilon> + </omicron> + </sigma> + </epsilon> + </delta> + </omega> + </chi> + </zeta> + </lambda> + </psi> + </tree> + </test> + <test> + <xpath>//nu[contains(concat(@abort,"$"),"blank$")][@xml:lang="en-US"]/nu[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::chi[following-sibling::epsilon[@xml:id="id2"][preceding-sibling::*[position() = 2]]/lambda[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::rho[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[contains(concat(@attribute,"$"),"ank$")][@xml:lang="nb"][@xml:id="id6"][not(child::node())][following-sibling::eta[@delete][preceding-sibling::*[position() = 3]]/beta[@xml:lang="no-nb"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=5]][following-sibling::phi[@content][@xml:id="id8"][following-sibling::nu[following-sibling::zeta[@xml:lang="no-nb"][@xml:id="id9"][following-sibling::delta[@xml:id="id10"][following-sibling::zeta[@xml:lang="en"][@xml:id="id11"][preceding-sibling::*[position() = 5]]]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu abort="_blank" xml:lang="en-US"> + <nu xml:id="id1"/> + <chi/> + <epsilon xml:id="id2"> + <lambda xml:id="id3"> + <tau xml:lang="no" xml:id="id4"/> + <rho xml:id="id5"/> + <beta attribute="_blank" xml:lang="nb" xml:id="id6"/> + <eta delete="123456789"> + <beta xml:lang="no-nb" xml:id="id7"/> + <phi content="_blank" xml:id="id8"/> + <nu/> + <zeta xml:lang="no-nb" xml:id="id9"/> + <delta xml:id="id10"/> + <zeta xml:lang="en" xml:id="id11"> + <green>This text must be green</green> + </zeta> + </eta> + </lambda> + </epsilon> + </nu> + </tree> + </test> + <test> + <xpath>//beta[starts-with(@and,"this-is-at")][@xml:lang="nb"][@xml:id="id1"]/psi[@token][@xml:lang="en-US"][@xml:id="id2"]/tau[@xml:lang="en-GB"][not(following-sibling::*)]/pi[@xml:lang="en-US"][following-sibling::alpha[contains(@content,"tr")][@xml:id="id3"][preceding-sibling::*[position() = 1]]//pi[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::*[contains(concat(@true,"$"),"lue$")][@xml:lang="en-GB"][not(following-sibling::*)]/iota[contains(concat(@number,"$"),"e$")][@xml:lang="en-GB"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="nb"][@xml:id="id6"]/beta[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@xml:lang="nb"][@xml:id="id7"][not(child::node())][following-sibling::epsilon[@content="123456789"][@xml:id="id8"][not(following-sibling::*)]/beta[contains(concat(@and,"$"),"e$")][@xml:lang="no"]/nu[@xml:id="id9"][not(following-sibling::*)]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta and="this-is-att-value" xml:lang="nb" xml:id="id1"> + <psi token="false" xml:lang="en-US" xml:id="id2"> + <tau xml:lang="en-GB"> + <pi xml:lang="en-US"/> + <alpha content="attribute-value" xml:id="id3"> + <pi xml:lang="en-US" xml:id="id4"/> + <any true="attribute value" xml:lang="en-GB"> + <iota number="another attribute value" xml:lang="en-GB" xml:id="id5"/> + <delta xml:lang="nb" xml:id="id6"> + <beta xml:lang="no"> + <sigma xml:lang="nb" xml:id="id7"/> + <epsilon content="123456789" xml:id="id8"> + <beta and="true" xml:lang="no"> + <nu xml:id="id9"> + <green>This text must be green</green> + </nu> + </beta> + </epsilon> + </beta> + </delta> + </any> + </alpha> + </tau> + </psi> + </beta> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no"]/theta[following-sibling::zeta[@src="this.nodeValue"][@xml:lang="nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::psi[@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/chi[not(child::node())][following-sibling::phi[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota xml:lang="no"> + <theta/> + <zeta src="this.nodeValue" xml:lang="nb" xml:id="id1"/> + <psi xml:lang="no"> + <chi/> + <phi xml:id="id2"> + <green>This text must be green</green> + </phi> + </psi> + </iota> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@object,"$"),"en$")][@xml:id="id1"]//omega[not(preceding-sibling::*)]//sigma[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::gamma[@insert="content"][preceding-sibling::*[position() = 1]]//sigma[@xml:lang="en"]/alpha[@xml:id="id3"]//zeta[@xml:lang="no"][@xml:id="id4"][following-sibling::omega[@xml:id="id5"][not(following-sibling::*)]/xi[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[@xml:id="id6"][not(following-sibling::*)]//epsilon[contains(concat(@false,"$"),"e$")][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[starts-with(concat(@and,"-"),"solid 1px green-")][@xml:lang="en"][not(following-sibling::*)]//phi[starts-with(@token,"th")][@xml:lang="en-US"][following-sibling::*[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[@number="true"][@xml:id="id8"][not(child::node())][following-sibling::zeta[starts-with(@data,"so")][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota object="solid 1px green" xml:id="id1"> + <omega> + <sigma xml:id="id2"/> + <gamma insert="content"> + <sigma xml:lang="en"> + <alpha xml:id="id3"> + <zeta xml:lang="no" xml:id="id4"/> + <omega xml:id="id5"> + <xi xml:lang="nb"/> + <theta xml:lang="en-US"> + <nu xml:id="id6"> + <epsilon false="true" xml:id="id7"> + <iota and="solid 1px green" xml:lang="en"> + <phi token="this.nodeValue" xml:lang="en-US"/> + <any xml:lang="en-US"/> + <upsilon number="true" xml:id="id8"/> + <zeta data="solid 1px green"> + <green>This text must be green</green> + </zeta> + </iota> + </epsilon> + </nu> + </theta> + </omega> + </alpha> + </sigma> + </gamma> + </omega> + </iota> + </tree> + </test> + <test> + <xpath>//eta[starts-with(concat(@object,"-"),"attribute value-")][@xml:lang="nb"]//omicron[@xml:lang="en-US"][@xml:id="id1"]/pi[@att="true"][@xml:id="id2"]/omega[@att="123456789"][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::phi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::tau[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/iota[@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[@title="_blank"][not(following-sibling::*)]]][position() = 1]]</xpath> + <tree> + <eta object="attribute value" xml:lang="nb"> + <omicron xml:lang="en-US" xml:id="id1"> + <pi att="true" xml:id="id2"> + <omega att="123456789" xml:lang="en-GB" xml:id="id3"/> + <phi xml:lang="no-nb"/> + <tau> + <iota xml:lang="no-nb"/> + <sigma title="_blank"> + <green>This text must be green</green> + </sigma> + </tau> + </pi> + </omicron> + </eta> + </tree> + </test> + <test> + <xpath>//*/upsilon[@att="123456789"][@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)]/rho[@xml:id="id2"][following-sibling::epsilon[starts-with(concat(@abort,"-"),"100%-")][@xml:lang="en-GB"][following-sibling::iota[@xml:lang="en"][@xml:id="id3"]//theta[contains(concat(@desciption,"$")," 1px green$")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::xi[contains(concat(@desciption,"$"),"content$")][@xml:lang="no-nb"][not(child::node())][following-sibling::delta[contains(@attribute,"s-is-a")][@xml:lang="no-nb"]//xi[@data][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=6]][following-sibling::mu[@attribute="123456789"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::epsilon[@insert="this.nodeValue"][@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 3]][following-sibling::psi[@xml:id="id8"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=3]][not(child::node())][following-sibling::mu[contains(@title,"789")][@xml:id="id9"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::xi[@string="123456789"][not(child::node())][following-sibling::beta[@xml:lang="en-GB"][preceding-sibling::*[position() = 7]]/upsilon[@src="attribute value"][@xml:id="id10"][not(child::node())][following-sibling::eta[contains(concat(@attribute,"$"),"rue$")]//gamma[@object][@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[contains(concat(@delete,"$"),"9$")][@xml:id="id12"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]][position() = 1]]][position() = 1]]]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <any> + <upsilon att="123456789" xml:lang="nb" xml:id="id1"> + <rho xml:id="id2"/> + <epsilon abort="100%" xml:lang="en-GB"/> + <iota xml:lang="en" xml:id="id3"> + <theta desciption="solid 1px green" xml:lang="en" xml:id="id4"/> + <theta xml:lang="en-GB"/> + <xi desciption="content" xml:lang="no-nb"/> + <delta attribute="this-is-att-value" xml:lang="no-nb"> + <xi data="attribute-value" xml:id="id5"/> + <delta xml:lang="en-GB"/> + <mu attribute="123456789" xml:id="id6"/> + <epsilon insert="this.nodeValue" xml:lang="no-nb" xml:id="id7"/> + <psi xml:id="id8"/> + <mu title="123456789" xml:id="id9"/> + <xi string="123456789"/> + <beta xml:lang="en-GB"> + <upsilon src="attribute value" xml:id="id10"/> + <eta attribute="true"> + <gamma object="_blank" xml:id="id11"/> + <gamma delete="123456789" xml:id="id12"> + <green>This text must be green</green> + </gamma> + </eta> + </beta> + </delta> + </iota> + </upsilon> + </any> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]/epsilon[@class="false"][@xml:lang="no-nb"][@xml:id="id2"][following-sibling::nu[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[contains(concat(@attrib,"$"),"alue$")][@xml:lang="en-US"]//tau[@xml:id="id3"][not(following-sibling::*)]//beta[@insert="100%"][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]/iota[@xml:lang="no"][@xml:id="id5"][not(following-sibling::*)]/phi[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[not(following-sibling::*)]//pi[@insert][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@xml:id="id7"][not(following-sibling::*)]//zeta[starts-with(@src,"attribu")][@xml:lang="nb"][not(following-sibling::*)]]]</xpath> + <tree> + <mu xml:id="id1"> + <epsilon class="false" xml:lang="no-nb" xml:id="id2"/> + <nu xml:lang="no-nb"> + <sigma attrib="another attribute value" xml:lang="en-US"> + <tau xml:id="id3"> + <beta insert="100%" xml:lang="no-nb" xml:id="id4"> + <iota xml:lang="no" xml:id="id5"> + <phi xml:id="id6"/> + <gamma> + <pi insert="_blank" xml:lang="no"> + <upsilon xml:id="id7"> + <zeta src="attribute-value" xml:lang="nb"> + <green>This text must be green</green> + </zeta> + </upsilon> + </pi> + </gamma> + </iota> + </beta> + </tau> + </sigma> + </nu> + </mu> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no-nb"]//epsilon[@xml:lang="en"][@xml:id="id1"][not(following-sibling::*)]/alpha[@title="_blank"][@xml:lang="en-US"][@xml:id="id2"][following-sibling::omicron[starts-with(@object,"another a")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/xi[starts-with(@attr,"this.nodeVa")][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[starts-with(@string,"12")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]]]</xpath> + <tree> + <beta xml:lang="no-nb"> + <epsilon xml:lang="en" xml:id="id1"> + <alpha title="_blank" xml:lang="en-US" xml:id="id2"/> + <omicron object="another attribute value" xml:lang="en-US"> + <xi attr="this.nodeValue" xml:lang="en-US" xml:id="id3"/> + <phi string="123456789" xml:lang="no-nb"> + <green>This text must be green</green> + </phi> + </omicron> + </epsilon> + </beta> + </tree> + </test> + <test> + <xpath>//eta[@attrib][@xml:id="id1"]/zeta[@xml:lang="en-GB"][not(child::node())][following-sibling::delta[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//theta[contains(@attrib,"een")][@xml:id="id3"]/alpha[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@name][@xml:lang="no-nb"][@xml:id="id5"][not(following-sibling::*)]//xi[starts-with(concat(@att,"-"),"true-")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[contains(concat(@abort,"$"),"3456789$")][@xml:id="id7"][not(following-sibling::*)]//phi[starts-with(@att,"this-is-att-value")][following-sibling::*[position()=2]][following-sibling::*[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::xi[@title="true"][not(following-sibling::*)]/chi[not(preceding-sibling::*)]/omicron[starts-with(concat(@true,"-"),"attribute-")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[contains(concat(@src,"$"),"23456789$")][@xml:id="id9"]//lambda[not(preceding-sibling::*)]//delta[@xml:lang="nb"][@xml:id="id10"][not(child::node())][following-sibling::lambda[@xml:lang="en"]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <eta attrib="true" xml:id="id1"> + <zeta xml:lang="en-GB"/> + <delta xml:lang="en" xml:id="id2"> + <theta attrib="solid 1px green" xml:id="id3"> + <alpha xml:lang="en-US"> + <eta xml:lang="no"/> + <psi xml:lang="no" xml:id="id4"/> + <rho name="attribute value" xml:lang="no-nb" xml:id="id5"> + <xi att="true" xml:lang="no-nb" xml:id="id6"> + <kappa abort="123456789" xml:id="id7"> + <phi att="this-is-att-value"/> + <any xml:lang="en-GB" xml:id="id8"/> + <xi title="true"> + <chi> + <omicron true="attribute" xml:lang="en"/> + <tau src="123456789" xml:id="id9"> + <lambda> + <delta xml:lang="nb" xml:id="id10"/> + <lambda xml:lang="en"> + <green>This text must be green</green> + </lambda> + </lambda> + </tau> + </chi> + </xi> + </kappa> + </xi> + </rho> + </alpha> + </theta> + </delta> + </eta> + </tree> + </test> + <test> + <xpath>//tau[@content][@xml:id="id1"]/beta[@xml:lang="en-GB"][not(following-sibling::*)]/upsilon[starts-with(concat(@desciption,"-"),"this-")][@xml:id="id2"]//upsilon[@xml:id="id3"]/xi[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@content][@xml:id="id5"]//*[@xml:lang="nb"][not(preceding-sibling::*)]/psi[contains(@class,"al")][@xml:lang="en"][@xml:id="id6"]/gamma[@insert="100%"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[starts-with(@insert,"attribute-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::tau[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//kappa[@content][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[contains(@attrib,"789")][following-sibling::kappa[contains(concat(@object,"$"),"att-value$")][@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::alpha[@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(following-sibling::alpha)]/xi[following-sibling::*[position()=2]][not(preceding-sibling::xi)][not(child::node())][following-sibling::alpha[@name="_blank"][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//lambda[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::mu[contains(concat(@src,"$"),"s-is-att-value$")][@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)]/nu[starts-with(@token,"this.nod")][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@true][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::omicron[starts-with(concat(@or,"-"),"_blank-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@xml:lang="nb"][@xml:id="id12"][not(following-sibling::*)]][position() = 1]]]]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <tau content="false" xml:id="id1"> + <beta xml:lang="en-GB"> + <upsilon desciption="this-is-att-value" xml:id="id2"> + <upsilon xml:id="id3"> + <xi xml:lang="en" xml:id="id4"/> + <xi content="attribute value" xml:id="id5"> + <any xml:lang="nb"> + <psi class="this.nodeValue" xml:lang="en" xml:id="id6"> + <gamma insert="100%"/> + <epsilon insert="attribute-value" xml:lang="en"/> + <tau> + <kappa content="another attribute value" xml:lang="nb"> + <eta attrib="123456789"/> + <kappa object="this-is-att-value" xml:lang="no-nb"/> + <alpha xml:id="id7"> + <xi/> + <alpha name="_blank" xml:lang="en-GB"/> + <zeta xml:lang="en-GB" xml:id="id8"> + <lambda/> + <mu src="this-is-att-value" xml:lang="en" xml:id="id9"> + <nu token="this.nodeValue" xml:id="id10"> + <kappa true="this.nodeValue" xml:id="id11"/> + <omicron or="_blank"/> + <iota xml:lang="nb" xml:id="id12"> + <green>This text must be green</green> + </iota> + </nu> + </mu> + </zeta> + </alpha> + </kappa> + </tau> + </psi> + </any> + </xi> + </upsilon> + </upsilon> + </beta> + </tau> + </tree> + </test> + <test> + <xpath>//pi[@xml:id="id1"]/mu[@xml:lang="en"]/beta[starts-with(concat(@or,"-"),"123456789-")][@xml:lang="no"][not(following-sibling::*)]/alpha[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@title][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::epsilon[@false="attribute value"][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omega[not(preceding-sibling::*)][not(child::node())][following-sibling::iota[following-sibling::*[position()=5]][not(child::node())][following-sibling::zeta[@name="123456789"][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::xi[contains(concat(@true,"$"),"nk$")][@xml:id="id4"][preceding-sibling::*[position() = 3]][following-sibling::eta[@xml:lang="no"][preceding-sibling::*[position() = 4]][following-sibling::xi[@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::sigma[contains(@insert,"alue")][@xml:lang="en"][preceding-sibling::*[position() = 6]]/iota[@attr][@xml:lang="no"][@xml:id="id6"][not(following-sibling::*)]//upsilon[contains(concat(@abort,"$"),"ttribute-value$")][not(preceding-sibling::*)]//kappa[starts-with(@or,"_blan")][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[contains(concat(@src,"$"),"ue$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//*[starts-with(@number,"100%")][not(child::node())][following-sibling::omicron//chi[contains(@title,"ru")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omega[@xml:id="id7"]][position() = 1]]]][position() = 1]]]]]]][position() = 1]]</xpath> + <tree> + <pi xml:id="id1"> + <mu xml:lang="en"> + <beta or="123456789" xml:lang="no"> + <alpha xml:lang="en-GB" xml:id="id2"> + <omicron title="attribute" xml:lang="en-GB"/> + <epsilon false="attribute value"/> + <eta> + <omega/> + <iota/> + <zeta name="123456789" xml:lang="no" xml:id="id3"/> + <xi true="_blank" xml:id="id4"/> + <eta xml:lang="no"/> + <xi xml:id="id5"/> + <sigma insert="another attribute value" xml:lang="en"> + <iota attr="this-is-att-value" xml:lang="no" xml:id="id6"> + <upsilon abort="attribute-value"> + <kappa or="_blank"/> + <omega src="this.nodeValue" xml:lang="en-GB"> + <any number="100%"/> + <omicron> + <chi title="true" xml:lang="nb"/> + <omega xml:id="id7"> + <green>This text must be green</green> + </omega> + </omicron> + </omega> + </upsilon> + </iota> + </sigma> + </eta> + </alpha> + </beta> + </mu> + </pi> + </tree> + </test> + <test> + <xpath>//rho[@data="123456789"][@xml:lang="no"]//upsilon[@xml:id="id1"]/omega[not(preceding-sibling::*)][not(following-sibling::*)]//pi[starts-with(concat(@abort,"-"),"this-")][@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]//pi[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//chi[not(following-sibling::*)]</xpath> + <tree> + <rho data="123456789" xml:lang="no"> + <upsilon xml:id="id1"> + <omega> + <pi abort="this-is-att-value" xml:lang="en-US" xml:id="id2"> + <pi xml:lang="no-nb" xml:id="id3"> + <chi> + <green>This text must be green</green> + </chi> + </pi> + </pi> + </omega> + </upsilon> + </rho> + </tree> + </test> + <test> + <xpath>//omega[@and="another attribute value"][@xml:lang="no-nb"][@xml:id="id1"]/omega[not(preceding-sibling::*)][not(following-sibling::*)]//beta[@attr="this.nodeValue"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[following-sibling::*[position()=6]][following-sibling::iota[@xml:id="id3"][following-sibling::*[position()=5]][not(child::node())][following-sibling::tau[@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::psi[following-sibling::rho[@xml:lang="nb"][@xml:id="id5"][following-sibling::kappa[starts-with(@insert,"100")][@xml:lang="no-nb"][not(child::node())][following-sibling::lambda[@delete][@xml:lang="en"][preceding-sibling::*[position() = 7]]/omicron[starts-with(concat(@content,"-"),"this.nodeValue-")][@xml:lang="en-GB"][not(following-sibling::*)]//nu[@true][@xml:lang="no-nb"][not(following-sibling::*)]/sigma[@xml:lang="no-nb"][@xml:id="id6"][not(following-sibling::*)]//sigma[not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@title][@xml:id="id8"]//nu[@xml:id="id9"]/omicron[contains(concat(@insert,"$"),"eValue$")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:lang="nb"][not(preceding-sibling::*)]//pi[not(preceding-sibling::*)][not(following-sibling::*)]]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega and="another attribute value" xml:lang="no-nb" xml:id="id1"> + <omega> + <beta attr="this.nodeValue" xml:id="id2"/> + <omega/> + <iota xml:id="id3"/> + <tau xml:id="id4"/> + <psi/> + <rho xml:lang="nb" xml:id="id5"/> + <kappa insert="100%" xml:lang="no-nb"/> + <lambda delete="false" xml:lang="en"> + <omicron content="this.nodeValue" xml:lang="en-GB"> + <nu true="another attribute value" xml:lang="no-nb"> + <sigma xml:lang="no-nb" xml:id="id6"> + <sigma/> + <psi xml:lang="en-GB"/> + <iota xml:id="id7"/> + <psi title="solid 1px green" xml:id="id8"> + <nu xml:id="id9"> + <omicron insert="this.nodeValue" xml:lang="en-GB"> + <chi xml:lang="nb"> + <pi> + <green>This text must be green</green> + </pi> + </chi> + </omicron> + </nu> + </psi> + </sigma> + </nu> + </omicron> + </lambda> + </omega> + </omega> + </tree> + </test> + <test> + <xpath>//iota[contains(@number,"ue")]//mu[not(following-sibling::*)]//chi[following-sibling::nu[contains(@and,"00")][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[@src="123456789"][not(following-sibling::delta)][following-sibling::tau[@content][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//sigma[@title][@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/*[@xml:lang="en-GB"][not(following-sibling::*)][not(preceding-sibling::any)]//zeta[@src][not(following-sibling::*)]//chi[starts-with(concat(@src,"-"),"solid 1px green-")][@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::delta[contains(@title,"nt")][@xml:id="id5"][not(child::node())][following-sibling::omicron//upsilon[@true][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[@object]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota number="this-is-att-value"> + <mu> + <chi/> + <nu and="100%" xml:id="id1"> + <delta src="123456789"/> + <tau content="attribute" xml:lang="no" xml:id="id2"> + <sigma title="this-is-att-value" xml:lang="en-US" xml:id="id3"> + <any xml:lang="en-GB"> + <zeta src="this-is-att-value"> + <chi src="solid 1px green" xml:lang="en" xml:id="id4"/> + <delta title="content" xml:id="id5"/> + <omicron> + <upsilon true="true" xml:lang="no-nb"/> + <lambda xml:lang="en-US" xml:id="id6"> + <psi object="solid 1px green"> + <green>This text must be green</green> + </psi> + </lambda> + </omicron> + </zeta> + </any> + </sigma> + </tau> + </nu> + </mu> + </iota> + </tree> + </test> + <test> + <xpath>//omega/rho[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[@xml:lang="en-GB"][following-sibling::iota[not(following-sibling::*)]//omicron[@xml:id="id2"][not(following-sibling::*)]/eta[starts-with(concat(@true,"-"),"this-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[not(preceding-sibling::*)]//tau[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][position() = 1]]]</xpath> + <tree> + <omega> + <rho xml:id="id1"> + <pi xml:lang="en-GB"/> + <iota> + <omicron xml:id="id2"> + <eta true="this-is-att-value" xml:lang="en-GB"/> + <lambda xml:id="id3"> + <xi> + <tau xml:lang="en" xml:id="id4"> + <green>This text must be green</green> + </tau> + </xi> + </lambda> + </omicron> + </iota> + </rho> + </omega> + </tree> + </test> + <test> + <xpath>//rho[@name="this-is-att-value"]/pi[@object][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::delta[starts-with(concat(@src,"-"),"solid 1px green-")][@xml:lang="en-GB"]//tau[@xml:lang="no-nb"][@xml:id="id2"]//nu[@class="123456789"][@xml:id="id3"][not(child::node())][following-sibling::psi[@xml:lang="en-US"][not(preceding-sibling::psi)][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/mu[@xml:lang="en-US"][not(preceding-sibling::*)]//phi[contains(concat(@src,"$"),"ribute value$")][@xml:id="id4"][not(preceding-sibling::*)]//*[@xml:lang="en"][not(preceding-sibling::*)]/zeta[starts-with(@name,"attr")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@xml:lang="no"][@xml:id="id5"]//delta[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@desciption="123456789"][@xml:lang="en"][preceding-sibling::*[position() = 1]]//epsilon[@attr][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::gamma[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]/zeta/phi[not(following-sibling::*)]//rho[@title="_blank"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[starts-with(concat(@name,"-"),"this-")][@xml:id="id8"][not(child::node())][following-sibling::psi[starts-with(@attrib,"solid 1px green")][@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 1]]//tau[starts-with(@and,"another attribu")][position() = 1]]]][position() = 1]]]]]</xpath> + <tree> + <rho name="this-is-att-value"> + <pi object="attribute-value" xml:id="id1"/> + <delta src="solid 1px green" xml:lang="en-GB"> + <tau xml:lang="no-nb" xml:id="id2"> + <nu class="123456789" xml:id="id3"/> + <psi xml:lang="en-US"/> + <beta> + <mu xml:lang="en-US"> + <phi src="attribute value" xml:id="id4"> + <any xml:lang="en"> + <zeta name="attribute-value" xml:lang="en-GB"/> + <omega xml:lang="no" xml:id="id5"> + <delta xml:id="id6"/> + <any desciption="123456789" xml:lang="en"> + <epsilon attr="attribute" xml:lang="en-GB" xml:id="id7"/> + <gamma xml:lang="no-nb"> + <zeta> + <phi> + <rho title="_blank" xml:lang="no-nb"> + <delta name="this-is-att-value" xml:id="id8"/> + <psi attrib="solid 1px green" xml:lang="nb" xml:id="id9"> + <tau and="another attribute value"> + <green>This text must be green</green> + </tau> + </psi> + </rho> + </phi> + </zeta> + </gamma> + </any> + </omega> + </any> + </phi> + </mu> + </beta> + </tau> + </delta> + </rho> + </tree> + </test> + <test> + <xpath>//tau[@xml:id="id1"]/zeta[@xml:lang="nb"]//upsilon[not(preceding-sibling::*)][not(child::node())][following-sibling::delta[contains(@data,"e")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//theta[following-sibling::*[position()=5]][following-sibling::kappa[starts-with(@src,"conten")][@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::eta[contains(concat(@title,"$"),"23456789$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::mu[starts-with(concat(@attrib,"-"),"123456789-")][@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=2]][following-sibling::zeta[contains(concat(@attribute,"$"),"-is-att-value$")][@xml:id="id4"][preceding-sibling::*[position() = 4]][following-sibling::gamma[@title="123456789"][not(following-sibling::*)]//iota[starts-with(concat(@attr,"-"),"100%-")]//kappa[@object][@xml:lang="en"][following-sibling::*[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omega[@string][@xml:lang="no"][@xml:id="id6"][not(following-sibling::omega)][position() = 1]]]]]]]]</xpath> + <tree> + <tau xml:id="id1"> + <zeta xml:lang="nb"> + <upsilon/> + <delta data="true"> + <theta/> + <kappa src="content" xml:lang="en-GB" xml:id="id2"/> + <eta title="123456789" xml:lang="en-GB"/> + <mu attrib="123456789" xml:lang="en-US" xml:id="id3"/> + <zeta attribute="this-is-att-value" xml:id="id4"/> + <gamma title="123456789"> + <iota attr="100%"> + <kappa object="true" xml:lang="en"/> + <any xml:lang="no-nb" xml:id="id5"> + <omega string="true" xml:lang="no" xml:id="id6"> + <green>This text must be green</green> + </omega> + </any> + </iota> + </gamma> + </delta> + </zeta> + </tau> + </tree> + </test> + <test> + <xpath>//alpha[contains(concat(@object,"$"),"ibute value$")][@xml:lang="nb"][@xml:id="id1"]//delta[not(preceding-sibling::*)]//omicron[not(preceding-sibling::*)][not(following-sibling::*)]//nu[not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@name="solid 1px green"][@xml:id="id2"][following-sibling::lambda[@delete="solid 1px green"][@xml:id="id3"][not(child::node())][following-sibling::delta[preceding-sibling::*[position() = 2]][following-sibling::theta[contains(@att,"onte")][@xml:lang="no"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::chi[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 4]]/omega[@xml:id="id5"][not(child::node())][following-sibling::upsilon[@xml:id="id6"][not(following-sibling::*)]//nu[@title][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::omicron[starts-with(@object,"this-is-att-valu")][preceding-sibling::*[position() = 1]]/beta[@abort][@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@src][@xml:lang="no"][not(following-sibling::*)]//chi[@xml:lang="no-nb"][following-sibling::iota[starts-with(@number,"12345678")][@xml:lang="no"][@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:id="id10"][not(child::node())][following-sibling::omicron[@string][preceding-sibling::*[position() = 3]][not(following-sibling::omicron)][following-sibling::nu[@xml:lang="en-US"][@xml:id="id11"][not(following-sibling::*)]/gamma[@class][@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@xml:lang="no-nb"][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <alpha object="another attribute value" xml:lang="nb" xml:id="id1"> + <delta> + <omicron> + <nu> + <alpha name="solid 1px green" xml:id="id2"/> + <lambda delete="solid 1px green" xml:id="id3"/> + <delta/> + <theta att="content" xml:lang="no"/> + <chi xml:lang="no" xml:id="id4"> + <omega xml:id="id5"/> + <upsilon xml:id="id6"> + <nu title="another attribute value" xml:lang="en-GB" xml:id="id7"/> + <omicron object="this-is-att-value"> + <beta abort="100%" xml:lang="no-nb" xml:id="id8"> + <eta src="attribute value" xml:lang="no"> + <chi xml:lang="no-nb"/> + <iota number="123456789" xml:lang="no" xml:id="id9"/> + <omicron xml:id="id10"/> + <omicron string="100%"/> + <nu xml:lang="en-US" xml:id="id11"> + <gamma class="content" xml:id="id12"> + <psi xml:lang="no-nb"> + <green>This text must be green</green> + </psi> + </gamma> + </nu> + </eta> + </beta> + </omicron> + </upsilon> + </chi> + </nu> + </omicron> + </delta> + </alpha> + </tree> + </test> + <test> + <xpath>//kappa[@data][@xml:lang="en-GB"]//lambda[starts-with(@insert,"_blan")][@xml:lang="no"][not(preceding-sibling::*)]/sigma[not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[contains(@token,"e")][@xml:lang="no"]/epsilon[starts-with(@or,"cont")][not(preceding-sibling::*)]/delta[@xml:lang="en-US"][not(preceding-sibling::*)]/xi[@object][not(preceding-sibling::*)][following-sibling::beta[contains(@true,"e")][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::delta[starts-with(concat(@object,"-"),"_blank-")][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::iota[contains(concat(@and,"$"),"e value$")][@xml:lang="no"][preceding-sibling::*[position() = 3]][following-sibling::zeta[@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::theta[preceding-sibling::*[position() = 5]]/sigma[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[contains(@object,"123456789")][@xml:id="id5"][not(following-sibling::*)][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <kappa data="solid 1px green" xml:lang="en-GB"> + <lambda insert="_blank" xml:lang="no"> + <sigma> + <epsilon token="true" xml:lang="no"> + <epsilon or="content"> + <delta xml:lang="en-US"> + <xi object="attribute value"/> + <beta true="attribute" xml:id="id1"/> + <delta object="_blank" xml:lang="no-nb" xml:id="id2"/> + <iota and="attribute value" xml:lang="no"/> + <zeta xml:lang="en-US" xml:id="id3"/> + <theta> + <sigma xml:lang="no-nb" xml:id="id4"> + <sigma xml:lang="no"> + <omicron object="123456789" xml:id="id5"> + <green>This text must be green</green> + </omicron> + </sigma> + </sigma> + </theta> + </delta> + </epsilon> + </epsilon> + </sigma> + </lambda> + </kappa> + </tree> + </test> + <test> + <xpath>//delta[@xml:id="id1"]/nu[@xml:id="id2"][not(following-sibling::*)]//omicron[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="en"][@xml:id="id4"][following-sibling::gamma[not(following-sibling::*)]//rho[starts-with(concat(@string,"-"),"this-")][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:lang="no"][@xml:id="id6"][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::omega[contains(concat(@object,"$"),"nk$")][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(following-sibling::omega)]/rho[not(child::node())][following-sibling::phi[@att="false"][@xml:lang="en"][@xml:id="id7"][following-sibling::pi[@xml:id="id8"]/zeta[contains(concat(@object,"$"),"e$")][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)]//kappa[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@true][@xml:lang="en-US"][not(child::node())][following-sibling::psi[@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(preceding-sibling::psi)][following-sibling::epsilon[not(child::node())][following-sibling::omega[contains(concat(@string,"$"),"100%$")][not(following-sibling::*)]]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta xml:id="id1"> + <nu xml:id="id2"> + <omicron xml:id="id3"/> + <tau xml:lang="en" xml:id="id4"/> + <gamma> + <rho string="this-is-att-value" xml:lang="en" xml:id="id5"> + <lambda xml:lang="no" xml:id="id6"/> + <chi xml:lang="en-GB"/> + <omega object="_blank"> + <rho/> + <phi att="false" xml:lang="en" xml:id="id7"/> + <pi xml:id="id8"> + <zeta object="false" xml:lang="no" xml:id="id9"> + <kappa xml:lang="en-US"> + <theta true="solid 1px green" xml:lang="en-US"/> + <psi xml:lang="en-US" xml:id="id10"/> + <epsilon/> + <omega string="100%"> + <green>This text must be green</green> + </omega> + </kappa> + </zeta> + </pi> + </omega> + </rho> + </gamma> + </nu> + </delta> + </tree> + </test> + <test> + <xpath>//tau[starts-with(@delete,"_blank")][@xml:lang="no-nb"][@xml:id="id1"]//*[contains(concat(@title,"$"),"tt-value$")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)]//nu/tau[@attribute][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::iota[contains(@title,"e")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/epsilon[not(preceding-sibling::*)][not(following-sibling::*)]/zeta[contains(@attribute,"t")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[contains(concat(@att,"$"),"rue$")][@xml:id="id5"][not(child::node())][following-sibling::omega[starts-with(@attrib,"10")][@xml:lang="en-GB"][not(child::node())][following-sibling::*[not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 4]]/phi[contains(@false,"lid 1px")][following-sibling::mu[@class][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::alpha[starts-with(concat(@and,"-"),"attribute-")][@xml:id="id6"][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <tau delete="_blank" xml:lang="no-nb" xml:id="id1"> + <any title="this-is-att-value" xml:lang="en-GB" xml:id="id2"> + <nu> + <tau attribute="_blank" xml:lang="en" xml:id="id3"/> + <iota title="false" xml:lang="nb"> + <epsilon> + <zeta attribute="content" xml:lang="en-GB" xml:id="id4"/> + <theta att="true" xml:id="id5"/> + <omega attrib="100%" xml:lang="en-GB"/> + <any/> + <omicron> + <phi false="solid 1px green"/> + <mu class="this.nodeValue" xml:lang="en"/> + <alpha and="attribute" xml:id="id6"> + <green>This text must be green</green> + </alpha> + </omicron> + </epsilon> + </iota> + </nu> + </any> + </tau> + </tree> + </test> + <test> + <xpath>//alpha//mu[@content][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::phi[@token][not(child::node())][following-sibling::pi[@attr][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::alpha[contains(@content,"e")][@xml:lang="en-US"][@xml:id="id2"]/zeta[@xml:id="id3"][not(following-sibling::*)]//kappa[contains(concat(@title,"$"),"ttribute value$")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::delta[starts-with(concat(@desciption,"-"),"attribute-")][preceding-sibling::*[position() = 1]][following-sibling::chi[contains(concat(@token,"$"),"alue$")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@attr][@xml:lang="en-US"][preceding-sibling::*[position() = 3]]/omicron[contains(concat(@and,"$"),"blank$")][@xml:lang="no-nb"][@xml:id="id5"][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha> + <mu content="100%" xml:id="id1"/> + <phi token="solid 1px green"/> + <pi attr="this.nodeValue" xml:lang="en-US"/> + <alpha content="false" xml:lang="en-US" xml:id="id2"> + <zeta xml:id="id3"> + <kappa title="attribute value" xml:lang="no" xml:id="id4"/> + <delta desciption="attribute-value"/> + <chi token="attribute value"/> + <psi attr="this-is-att-value" xml:lang="en-US"> + <omicron and="_blank" xml:lang="no-nb" xml:id="id5"> + <green>This text must be green</green> + </omicron> + </psi> + </zeta> + </alpha> + </alpha> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:id="id1"]//omicron[@true][@xml:lang="en-GB"][not(following-sibling::*)]//alpha[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]//theta[@string="solid 1px green"][@xml:lang="nb"][@xml:id="id3"][not(child::node())][following-sibling::beta[@desciption][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[@attr][following-sibling::pi[@xml:lang="en"][preceding-sibling::*[position() = 3]]/psi[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::gamma[@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::psi[@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::lambda[@xml:id="id8"][preceding-sibling::*[position() = 3]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <upsilon xml:id="id1"> + <omicron true="content" xml:lang="en-GB"> + <alpha xml:lang="nb" xml:id="id2"> + <theta string="solid 1px green" xml:lang="nb" xml:id="id3"/> + <beta desciption="_blank" xml:lang="nb" xml:id="id4"/> + <phi attr="true"/> + <pi xml:lang="en"> + <psi xml:lang="en-US" xml:id="id5"/> + <gamma xml:id="id6"/> + <psi xml:id="id7"/> + <lambda xml:id="id8"> + <green>This text must be green</green> + </lambda> + </pi> + </alpha> + </omicron> + </upsilon> + </tree> + </test> + <test> + <xpath>//iota//omega[contains(@src,"ibute value")][@xml:lang="no-nb"][@xml:id="id1"][not(child::node())][following-sibling::gamma[@xml:id="id2"][preceding-sibling::*[position() = 1]]/epsilon//omega[@xml:lang="no"]//nu/lambda[@object="content"][@xml:id="id3"][not(following-sibling::*)]//omega[@xml:lang="en"][not(child::node())][following-sibling::eta[starts-with(concat(@number,"-"),"solid 1px green-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::rho[@delete][@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]][position() = 1]]]</xpath> + <tree> + <iota> + <omega src="another attribute value" xml:lang="no-nb" xml:id="id1"/> + <gamma xml:id="id2"> + <epsilon> + <omega xml:lang="no"> + <nu> + <lambda object="content" xml:id="id3"> + <omega xml:lang="en"/> + <eta number="solid 1px green"/> + <delta token="attribute" xml:lang="en-US" xml:id="id4"/> + <rho delete="attribute value" xml:lang="no"> + <green>This text must be green</green> + </rho> + </lambda> + </nu> + </omega> + </epsilon> + </gamma> + </iota> + </tree> + </test> + <test> + <xpath>//upsilon[contains(@insert,"alue")][@xml:lang="no"][@xml:id="id1"]/alpha[@token][@xml:lang="nb"][@xml:id="id2"]/*[@xml:lang="en-GB"][not(following-sibling::*)]/mu[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]//pi[contains(concat(@object,"$"),"ribute-value$")][@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]/mu[@or][@xml:lang="en-GB"][@xml:id="id5"][following-sibling::sigma[@token][preceding-sibling::*[position() = 1]]/beta[@xml:lang="no"]/delta[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::delta[starts-with(concat(@delete,"-"),"another attribute value-")][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::pi[following-sibling::*[position()=1]][following-sibling::epsilon[contains(concat(@string,"$"),"tribute$")][@xml:id="id7"][preceding-sibling::*[position() = 3]]//theta[contains(concat(@false,"$"),"een$")]//*[@name="_blank"][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <upsilon insert="this-is-att-value" xml:lang="no" xml:id="id1"> + <alpha token="false" xml:lang="nb" xml:id="id2"> + <any xml:lang="en-GB"> + <mu xml:lang="en-US" xml:id="id3"> + <pi object="attribute-value" xml:lang="no-nb" xml:id="id4"> + <mu or="content" xml:lang="en-GB" xml:id="id5"/> + <sigma token="false"> + <beta xml:lang="no"> + <delta/> + <delta delete="another attribute value" xml:id="id6"/> + <pi/> + <epsilon string="attribute" xml:id="id7"> + <theta false="solid 1px green"> + <any name="_blank"> + <green>This text must be green</green> + </any> + </theta> + </epsilon> + </beta> + </sigma> + </pi> + </mu> + </any> + </alpha> + </upsilon> + </tree> + </test> + <test> + <xpath>//chi[contains(concat(@insert,"$"),"ttribute$")][@xml:lang="nb"][@xml:id="id1"]//delta[@xml:id="id2"][not(preceding-sibling::*)]/beta[@insert][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/chi[@xml:lang="nb"][@xml:id="id4"][following-sibling::delta[following-sibling::*[position()=3]][following-sibling::*[@false][@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::theta[@xml:lang="no"][not(child::node())][following-sibling::beta[@xml:id="id6"][preceding-sibling::*[position() = 4]]//rho[@xml:id="id7"][not(preceding-sibling::*)][not(parent::*/*[position()=2])][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi insert="attribute" xml:lang="nb" xml:id="id1"> + <delta xml:id="id2"> + <beta insert="another attribute value" xml:lang="no-nb" xml:id="id3"> + <chi xml:lang="nb" xml:id="id4"/> + <delta/> + <any false="attribute" xml:lang="en-US" xml:id="id5"/> + <theta xml:lang="no"/> + <beta xml:id="id6"> + <rho xml:id="id7"> + <green>This text must be green</green> + </rho> + </beta> + </beta> + </delta> + </chi> + </tree> + </test> + <test> + <xpath>//psi[@data][@xml:lang="en-US"]//iota[@xml:lang="nb"][not(following-sibling::*)]//*[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[@title][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="en"][preceding-sibling::*[position() = 1]]//iota[@title][not(preceding-sibling::*)]//sigma[not(preceding-sibling::*)]//iota[@desciption="_blank"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::lambda[starts-with(@abort,"attrib")][@xml:id="id5"][not(following-sibling::*)]/omega[@content][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::omicron[@abort="content"][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]][position() = 1]]</xpath> + <tree> + <psi data="attribute-value" xml:lang="en-US"> + <iota xml:lang="nb"> + <any xml:id="id1"/> + <delta xml:id="id2"> + <eta title="attribute-value"> + <upsilon xml:id="id3"/> + <rho xml:lang="en"> + <iota title="100%"> + <sigma> + <iota desciption="_blank" xml:id="id4"/> + <lambda abort="attribute value" xml:id="id5"> + <omega content="this.nodeValue" xml:lang="en-GB"/> + <omicron abort="content" xml:lang="en"> + <green>This text must be green</green> + </omicron> + </lambda> + </sigma> + </iota> + </rho> + </eta> + </delta> + </iota> + </psi> + </tree> + </test> + <test> + <xpath>//eta[@false="123456789"][@xml:lang="no-nb"][@xml:id="id1"]/zeta[@xml:id="id2"][not(preceding-sibling::*)]/gamma[@xml:id="id3"]//beta[starts-with(@title,"attr")][following-sibling::xi[contains(@att,"on")][@xml:id="id4"][not(child::node())][following-sibling::sigma[@and][@xml:id="id5"][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/xi[not(following-sibling::*)]/omicron[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta false="123456789" xml:lang="no-nb" xml:id="id1"> + <zeta xml:id="id2"> + <gamma xml:id="id3"> + <beta title="attribute"/> + <xi att="content" xml:id="id4"/> + <sigma and="this-is-att-value" xml:id="id5"/> + <zeta xml:lang="en-GB" xml:id="id6"> + <xi> + <omicron> + <green>This text must be green</green> + </omicron> + </xi> + </zeta> + </gamma> + </zeta> + </eta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]//psi[not(preceding-sibling::*)]/pi[not(preceding-sibling::*)]//nu[contains(@src,"ode")][@xml:id="id2"][not(following-sibling::*)]//delta[@xml:lang="en-US"][not(preceding-sibling::delta)][following-sibling::iota[starts-with(concat(@desciption,"-"),"100%-")][@xml:lang="en-US"][@xml:id="id3"][following-sibling::xi[@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:lang="nb"][preceding-sibling::*[position() = 3]]/gamma[@string="attribute value"][@xml:lang="en"][not(preceding-sibling::*)]//theta[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]/eta[@abort][@xml:id="id5"][following-sibling::*[position()=4]][not(child::node())][following-sibling::omicron[@false="this.nodeValue"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:lang="nb"][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@xml:lang="nb"][following-sibling::pi[@delete][@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//xi[starts-with(concat(@number,"-"),"_blank-")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <sigma xml:id="id1"> + <psi> + <pi> + <nu src="this.nodeValue" xml:id="id2"> + <delta xml:lang="en-US"/> + <iota desciption="100%" xml:lang="en-US" xml:id="id3"/> + <xi xml:lang="en"/> + <omicron xml:lang="nb"> + <gamma string="attribute value" xml:lang="en"> + <theta xml:lang="no-nb" xml:id="id4"> + <eta abort="attribute" xml:id="id5"/> + <omicron false="this.nodeValue"/> + <omicron xml:lang="nb" xml:id="id6"/> + <iota xml:lang="nb"/> + <pi delete="this-is-att-value" xml:lang="no" xml:id="id7"> + <xi number="_blank"> + <green>This text must be green</green> + </xi> + </pi> + </theta> + </gamma> + </omicron> + </nu> + </pi> + </psi> + </sigma> + </tree> + </test> + <test> + <xpath>//lambda//kappa[@xml:lang="no-nb"][@xml:id="id1"][not(child::node())][following-sibling::omega[@xml:lang="no"][following-sibling::*[position()=7]][following-sibling::zeta[@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::omicron[contains(concat(@title,"$"),"0%$")][@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::delta[@object][@xml:id="id4"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::iota[@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::beta[@xml:id="id6"][following-sibling::upsilon[@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 7]][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 8]]/kappa[@and][@xml:id="id8"][following-sibling::beta[@class]//mu[following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@attribute][@xml:lang="no-nb"][@xml:id="id9"][following-sibling::delta[@class][@xml:lang="no"][preceding-sibling::*[position() = 2]]//gamma[starts-with(@object,"soli")][@xml:lang="no-nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[contains(concat(@and,"$"),"nt$")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//tau[@class]/nu/epsilon[@or="content"][@xml:lang="no-nb"][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <lambda> + <kappa xml:lang="no-nb" xml:id="id1"/> + <omega xml:lang="no"/> + <zeta xml:lang="nb" xml:id="id2"/> + <omicron title="100%" xml:lang="en-GB" xml:id="id3"/> + <delta object="this.nodeValue" xml:id="id4"/> + <iota xml:lang="en-US" xml:id="id5"/> + <beta xml:id="id6"/> + <upsilon xml:lang="en" xml:id="id7"/> + <sigma> + <kappa and="this-is-att-value" xml:id="id8"/> + <beta class="content"> + <mu/> + <mu attribute="solid 1px green" xml:lang="no-nb" xml:id="id9"/> + <delta class="false" xml:lang="no"> + <gamma object="solid 1px green" xml:lang="no-nb" xml:id="id10"> + <theta xml:id="id11"/> + <zeta and="content" xml:lang="en-US"> + <tau class="100%"> + <nu> + <epsilon or="content" xml:lang="no-nb"> + <green>This text must be green</green> + </epsilon> + </nu> + </tau> + </zeta> + </gamma> + </delta> + </beta> + </sigma> + </lambda> + </tree> + </test> + <test> + <xpath>//psi[contains(@attribute,"alue")][@xml:id="id1"]//eta[@class="content"][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::zeta[@object][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[contains(@title,"0%")][@xml:lang="no"][@xml:id="id2"]//nu[starts-with(concat(@string,"-"),"100%-")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[contains(concat(@att,"$"),"e$")][@xml:lang="no"][@xml:id="id4"]/omega[starts-with(@content,"attribute-va")][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)]/beta[@xml:lang="nb"][not(preceding-sibling::*)]/tau[@delete="_blank"][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[not(child::node())][following-sibling::alpha[@attr][following-sibling::*[position()=3]][following-sibling::pi[starts-with(concat(@attrib,"-"),"false-")][@xml:lang="no-nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:id="id7"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <psi attribute="this.nodeValue" xml:id="id1"> + <eta class="content" xml:lang="no"/> + <zeta object="attribute"> + <chi title="100%" xml:lang="no" xml:id="id2"> + <nu string="100%" xml:id="id3"> + <iota att="attribute-value" xml:lang="no" xml:id="id4"> + <omega content="attribute-value" xml:lang="en-US" xml:id="id5"> + <beta xml:lang="nb"> + <tau delete="_blank" xml:lang="en-GB" xml:id="id6"/> + <gamma/> + <alpha attr="solid 1px green"/> + <pi attrib="false" xml:lang="no-nb"/> + <iota xml:lang="no"/> + <lambda xml:id="id7"> + <green>This text must be green</green> + </lambda> + </beta> + </omega> + </iota> + </nu> + </chi> + </zeta> + </psi> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(@name,"true")][@xml:lang="en-GB"][@xml:id="id1"]/mu[starts-with(@src,"_blank")][not(preceding-sibling::mu)][following-sibling::mu[@xml:lang="nb"][not(following-sibling::*)]/tau[@delete="content"][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::phi[preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][following-sibling::chi[@xml:lang="no-nb"][following-sibling::*[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::theta[@true][@xml:id="id3"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::sigma[contains(@desciption,"deVal")][@xml:lang="no-nb"][following-sibling::iota[@xml:id="id4"]/epsilon[@attr][@xml:lang="en"][not(preceding-sibling::*)]//nu[not(following-sibling::*)]//delta[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::psi[@xml:id="id6"][preceding-sibling::*[position() = 1]]/gamma[@xml:lang="en-GB"]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <upsilon name="true" xml:lang="en-GB" xml:id="id1"> + <mu src="_blank"/> + <mu xml:lang="nb"> + <tau delete="content" xml:lang="no-nb"/> + <phi/> + <chi xml:lang="no-nb"/> + <any xml:lang="nb" xml:id="id2"/> + <theta true="another attribute value" xml:id="id3"/> + <sigma desciption="this.nodeValue" xml:lang="no-nb"/> + <iota xml:id="id4"> + <epsilon attr="this.nodeValue" xml:lang="en"> + <nu> + <delta xml:id="id5"/> + <psi xml:id="id6"> + <gamma xml:lang="en-GB"> + <green>This text must be green</green> + </gamma> + </psi> + </nu> + </epsilon> + </iota> + </mu> + </upsilon> + </tree> + </test> + <test> + <xpath>//omega[@false][@xml:id="id1"]/omicron[@xml:lang="nb"][@xml:id="id2"]//alpha[@attr][@xml:lang="no"]//lambda[@att][@xml:lang="nb"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[starts-with(concat(@true,"-"),"attribute-")][@xml:id="id4"][preceding-sibling::*[position() = 1]]/eta[contains(@or,"e")][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@xml:lang="no"][not(following-sibling::*)]//tau[not(preceding-sibling::*)]/lambda[@src][@xml:lang="nb"][following-sibling::eta[contains(concat(@false,"$"),"e$")][@xml:id="id5"][not(following-sibling::*)]]]</xpath> + <tree> + <omega false="content" xml:id="id1"> + <omicron xml:lang="nb" xml:id="id2"> + <alpha attr="content" xml:lang="no"> + <lambda att="_blank" xml:lang="nb" xml:id="id3"/> + <omicron true="attribute-value" xml:id="id4"> + <eta or="attribute"> + <kappa xml:lang="no"> + <tau> + <lambda src="another attribute value" xml:lang="nb"/> + <eta false="this-is-att-value" xml:id="id5"> + <green>This text must be green</green> + </eta> + </tau> + </kappa> + </eta> + </omicron> + </alpha> + </omicron> + </omega> + </tree> + </test> + <test> + <xpath>//eta[@xml:id="id1"]/eta[@string][not(preceding-sibling::*)]//tau[@xml:id="id2"][not(child::node())][following-sibling::omicron[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=6]][not(child::node())][following-sibling::alpha[starts-with(concat(@class,"-"),"this-")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::phi[starts-with(concat(@desciption,"-"),"this.nodeValue-")][preceding-sibling::*[position() = 3]][following-sibling::*[position()=4]][following-sibling::phi[@and][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::iota[contains(concat(@number,"$"),"nk$")][@xml:lang="no"][preceding-sibling::*[position() = 5]][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 6]][not(child::node())][following-sibling::*[@and][@xml:lang="en-US"][preceding-sibling::*[position() = 7]][not(following-sibling::*)]/iota[not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id5"][following-sibling::theta[@name][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[@attrib][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::eta[@name][@xml:lang="en-US"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::tau[starts-with(@data,"another attribute")][@xml:lang="no"][@xml:id="id6"][not(following-sibling::*)]/mu[not(preceding-sibling::*)][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[@xml:lang="en-US"][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <eta xml:id="id1"> + <eta string="123456789"> + <tau xml:id="id2"/> + <omicron xml:lang="en"/> + <alpha class="this-is-att-value" xml:lang="no" xml:id="id3"/> + <phi desciption="this.nodeValue"/> + <phi and="attribute" xml:lang="no" xml:id="id4"/> + <iota number="_blank" xml:lang="no"/> + <omega xml:lang="en-GB"/> + <any and="100%" xml:lang="en-US"> + <iota/> + <iota xml:id="id5"/> + <theta name="content"/> + <iota attrib="this.nodeValue"/> + <eta name="solid 1px green" xml:lang="en-US"/> + <tau data="another attribute value" xml:lang="no" xml:id="id6"> + <mu/> + <rho> + <iota xml:lang="en-US"> + <green>This text must be green</green> + </iota> + </rho> + </tau> + </any> + </eta> + </eta> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="nb"][@xml:id="id1"]//theta[starts-with(concat(@false,"-"),"solid 1px green-")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@xml:lang="en"][not(child::node())][following-sibling::gamma[@src][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[@xml:lang="en-GB"][not(child::node())][following-sibling::rho[following-sibling::gamma[@xml:lang="en"][preceding-sibling::*[position() = 2]]/kappa[starts-with(@data,"this-is-a")][@xml:lang="en-US"][@xml:id="id4"]//kappa[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@name][not(preceding-sibling::*)][following-sibling::nu[@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::delta[@token][@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 2]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:lang="nb" xml:id="id1"> + <theta false="solid 1px green" xml:id="id2"> + <nu xml:lang="en"/> + <gamma src="content" xml:id="id3"> + <sigma xml:lang="en-GB"/> + <rho/> + <gamma xml:lang="en"> + <kappa data="this-is-att-value" xml:lang="en-US" xml:id="id4"> + <kappa xml:lang="en"> + <sigma name="content"/> + <nu xml:id="id5"/> + <delta token="true" xml:lang="nb" xml:id="id6"> + <green>This text must be green</green> + </delta> + </kappa> + </kappa> + </gamma> + </gamma> + </theta> + </iota> + </tree> + </test> + <test> + <xpath>//theta/omega[starts-with(@abort,"fal")][not(following-sibling::*)]//rho[@xml:lang="en-GB"][following-sibling::*[position()=4]][following-sibling::sigma[@name="100%"][@xml:lang="en"][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::phi[@xml:lang="en"][@xml:id="id1"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::upsilon[@xml:id="id2"][preceding-sibling::*[position() = 4]][not(following-sibling::*)][not(preceding-sibling::upsilon)]//kappa[@xml:id="id3"][following-sibling::beta[contains(concat(@string,"$"),"ontent$")][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@data="true"][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//lambda[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="nb"][not(following-sibling::*)]//delta[starts-with(concat(@data,"-"),"true-")][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::gamma[@xml:id="id7"][following-sibling::pi[starts-with(@content,"12")][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/rho[@xml:lang="en-GB"][@xml:id="id9"]/kappa[@xml:lang="no-nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]]]]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <theta> + <omega abort="false"> + <rho xml:lang="en-GB"/> + <sigma name="100%" xml:lang="en"/> + <rho xml:lang="en-GB"/> + <phi xml:lang="en" xml:id="id1"/> + <upsilon xml:id="id2"> + <kappa xml:id="id3"/> + <beta string="content" xml:id="id4"/> + <theta data="true" xml:lang="en-GB"> + <lambda xml:lang="no-nb" xml:id="id5"/> + <xi xml:lang="nb"> + <delta data="true" xml:id="id6"> + <tau xml:lang="en"/> + <gamma xml:id="id7"/> + <pi content="123456789" xml:lang="no-nb"/> + <eta xml:lang="en-GB" xml:id="id8"> + <rho xml:lang="en-GB" xml:id="id9"> + <kappa xml:lang="no-nb" xml:id="id10"> + <green>This text must be green</green> + </kappa> + </rho> + </eta> + </delta> + </xi> + </theta> + </upsilon> + </omega> + </theta> + </tree> + </test> + <test> + <xpath>//delta[@xml:id="id1"]/pi[contains(concat(@att,"$"),"e$")][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[not(preceding-sibling::*)][not(parent::*/*[position()=2])]/zeta[starts-with(concat(@attr,"-"),"123456789-")][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[@xml:id="id4"][not(following-sibling::*)]//nu[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[starts-with(concat(@false,"-"),"solid 1px green-")][@xml:lang="no"][@xml:id="id5"]//gamma[@or][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[starts-with(concat(@true,"-"),"this.nodeValue-")][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <delta xml:id="id1"> + <pi att="true"/> + <kappa xml:id="id2"> + <pi> + <zeta attr="123456789" xml:lang="en-US" xml:id="id3"> + <gamma xml:id="id4"> + <nu xml:lang="en-GB"/> + <upsilon false="solid 1px green" xml:lang="no" xml:id="id5"> + <gamma or="true"/> + <nu true="this.nodeValue" xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </nu> + </upsilon> + </gamma> + </zeta> + </pi> + </kappa> + </delta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]//eta[contains(concat(@content,"$"),"olid 1px green$")][@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::epsilon[@data][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[starts-with(concat(@content,"-"),"true-")][@xml:id="id3"]//nu[@xml:lang="no-nb"][not(child::node())][following-sibling::omega[@attr="123456789"][@xml:lang="en-GB"][not(child::node())][following-sibling::pi[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="no"][not(following-sibling::*)]//zeta[@xml:id="id5"][not(following-sibling::*)]/lambda[@name][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::*[@content][preceding-sibling::*[position() = 2]][not(following-sibling::any)]//epsilon[@attr][@xml:id="id6"][not(child::node())][following-sibling::nu[contains(concat(@attr,"$"),"_blank$")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::nu)]/*[starts-with(concat(@false,"-"),"attribute value-")][@xml:lang="en-GB"][not(preceding-sibling::*)]//eta[starts-with(@src,"thi")][@xml:lang="nb"][not(preceding-sibling::*)]/sigma[@xml:lang="en"][not(child::node())][following-sibling::pi[contains(concat(@attribute,"$"),"bute$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:id="id8"][preceding-sibling::*[position() = 2]]//epsilon[not(preceding-sibling::*)]//rho[contains(concat(@title,"$"),"true$")][@xml:id="id9"][not(following-sibling::*)]/epsilon[@xml:lang="en-GB"][@xml:id="id10"][following-sibling::pi[@xml:id="id11"]/epsilon[@xml:id="id12"]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma xml:id="id1"> + <eta content="solid 1px green" xml:lang="no" xml:id="id2"/> + <epsilon data="another attribute value" xml:lang="nb"/> + <delta content="true" xml:id="id3"> + <nu xml:lang="no-nb"/> + <omega attr="123456789" xml:lang="en-GB"/> + <pi xml:id="id4"/> + <lambda xml:lang="no"> + <zeta xml:id="id5"> + <lambda name="another attribute value"/> + <epsilon xml:lang="no-nb"/> + <any content="another attribute value"> + <epsilon attr="solid 1px green" xml:id="id6"/> + <nu attr="_blank" xml:lang="no" xml:id="id7"> + <any false="attribute value" xml:lang="en-GB"> + <eta src="this-is-att-value" xml:lang="nb"> + <sigma xml:lang="en"/> + <pi attribute="attribute"/> + <lambda xml:id="id8"> + <epsilon> + <rho title="true" xml:id="id9"> + <epsilon xml:lang="en-GB" xml:id="id10"/> + <pi xml:id="id11"> + <epsilon xml:id="id12"> + <green>This text must be green</green> + </epsilon> + </pi> + </rho> + </epsilon> + </lambda> + </eta> + </any> + </nu> + </any> + </zeta> + </lambda> + </delta> + </sigma> + </tree> + </test> + <test> + <xpath>//delta[contains(concat(@att,"$")," 1px green$")][@xml:lang="no"][@xml:id="id1"]/omicron[@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@delete][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[@xml:lang="nb"][not(parent::*/*[position()=2])]/kappa[contains(@desciption,"deV")][not(preceding-sibling::*)][following-sibling::rho[contains(concat(@object,"$"),"nk$")][preceding-sibling::*[position() = 1]][following-sibling::theta[@true="_blank"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/theta[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][position() = 1]]]]</xpath> + <tree> + <delta att="solid 1px green" xml:lang="no" xml:id="id1"> + <omicron xml:lang="en"/> + <mu delete="this.nodeValue" xml:id="id2"> + <epsilon xml:lang="nb"> + <kappa desciption="this.nodeValue"/> + <rho object="_blank"/> + <theta true="_blank"> + <theta xml:lang="nb" xml:id="id3"> + <green>This text must be green</green> + </theta> + </theta> + </epsilon> + </mu> + </delta> + </tree> + </test> + <test> + <xpath>//beta[contains(@delete,"lue")]/nu[not(preceding-sibling::*)]/delta[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[contains(concat(@att,"$"),".nodeValue$")][following-sibling::psi[@xml:id="id2"]//tau[@xml:lang="nb"]/rho[starts-with(concat(@token,"-"),"true-")][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 1]]//upsilon[@name="attribute value"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[starts-with(concat(@attribute,"-"),"_blank-")][not(following-sibling::*)]//xi[contains(@and,"ttribute ")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][following-sibling::iota[starts-with(@and,"100")][@xml:lang="en"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]//tau[@number][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@xml:lang="en-GB"][not(child::node())][following-sibling::iota[@and][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[@xml:id="id5"]/phi[starts-with(concat(@title,"-"),"_blank-")][@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id7"][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta delete="attribute value"> + <nu> + <delta xml:id="id1"> + <psi att="this.nodeValue"/> + <psi xml:id="id2"> + <tau xml:lang="nb"> + <rho token="true"/> + <kappa> + <upsilon name="attribute value"/> + <xi attribute="_blank"> + <xi and="another attribute value" xml:lang="no"/> + <nu xml:lang="en-GB"/> + <iota and="100%" xml:lang="en"/> + <nu xml:lang="en-GB" xml:id="id3"> + <tau number="solid 1px green" xml:lang="no-nb" xml:id="id4"> + <omicron xml:lang="en-GB"/> + <iota and="this.nodeValue" xml:lang="no"/> + <tau xml:id="id5"> + <phi title="_blank" xml:lang="nb" xml:id="id6"/> + <alpha xml:id="id7"> + <green>This text must be green</green> + </alpha> + </tau> + </tau> + </nu> + </xi> + </kappa> + </tau> + </psi> + </delta> + </nu> + </beta> + </tree> + </test> + <test> + <xpath>//gamma[@or][@xml:lang="en"]//nu[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[starts-with(concat(@object,"-"),"solid 1px green-")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[contains(concat(@string,"$")," green$")][following-sibling::kappa[@xml:lang="nb"][@xml:id="id3"][following-sibling::eta[starts-with(@token,"another")][@xml:id="id4"][following-sibling::*[position()=3]][following-sibling::nu[contains(@false,"te-value")][preceding-sibling::*[position() = 3]][following-sibling::iota[preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::epsilon[contains(@attr,"olid 1px gre")][@xml:id="id5"][preceding-sibling::*[position() = 5]]/zeta[@true][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[contains(@abort,"t")][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[@xml:id="id7"][following-sibling::omicron[@src][preceding-sibling::*[position() = 1]]//alpha[starts-with(concat(@title,"-"),"content-")][@xml:id="id8"][not(following-sibling::*)]//iota[@abort][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:lang="no-nb"][@xml:id="id9"][not(following-sibling::*)]/alpha[starts-with(@string,"attribut")][@xml:lang="no-nb"][@xml:id="id10"]/kappa[not(child::node())][following-sibling::alpha[starts-with(@class,"123456789")][@xml:id="id11"]]]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <gamma or="false" xml:lang="en"> + <nu xml:lang="en-GB" xml:id="id1"> + <sigma object="solid 1px green" xml:lang="no-nb" xml:id="id2"> + <sigma string="solid 1px green"/> + <kappa xml:lang="nb" xml:id="id3"/> + <eta token="another attribute value" xml:id="id4"/> + <nu false="attribute-value"/> + <iota/> + <epsilon attr="solid 1px green" xml:id="id5"> + <zeta true="attribute-value"/> + <alpha abort="true" xml:id="id6"> + <xi xml:id="id7"/> + <omicron src="true"> + <alpha title="content" xml:id="id8"> + <iota abort="attribute"> + <upsilon xml:lang="no-nb" xml:id="id9"> + <alpha string="attribute" xml:lang="no-nb" xml:id="id10"> + <kappa/> + <alpha class="123456789" xml:id="id11"> + <green>This text must be green</green> + </alpha> + </alpha> + </upsilon> + </iota> + </alpha> + </omicron> + </alpha> + </epsilon> + </sigma> + </nu> + </gamma> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]/zeta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::kappa[starts-with(@and,"another att")][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/phi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:id="id5"][following-sibling::psi[starts-with(concat(@token,"-"),"attribute-")][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::iota[following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[contains(concat(@content,"$"),"3456789$")][@xml:id="id7"][preceding-sibling::*[position() = 4]][following-sibling::rho[@xml:id="id8"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha xml:id="id1"> + <zeta xml:id="id2"/> + <xi xml:lang="nb" xml:id="id3"/> + <kappa and="another attribute value" xml:lang="nb" xml:id="id4"> + <phi xml:lang="no-nb"/> + <tau xml:id="id5"/> + <psi token="attribute" xml:id="id6"/> + <iota/> + <tau content="123456789" xml:id="id7"/> + <rho xml:id="id8"> + <green>This text must be green</green> + </rho> + </kappa> + </alpha> + </tree> + </test> + <test> + <xpath>//eta[@attr="100%"][@xml:lang="en"]/chi[@string="attribute-value"][@xml:id="id1"][not(following-sibling::*)]/epsilon[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::gamma[contains(@attrib,"ttribut")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 2]]//nu[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@data][@xml:lang="no-nb"][not(following-sibling::*)]/xi[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]//xi[@xml:id="id3"][not(following-sibling::*)]/nu[contains(concat(@name,"$"),"true$")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta attr="100%" xml:lang="en"> + <chi string="attribute-value" xml:id="id1"> + <epsilon xml:lang="nb"/> + <gamma attrib="attribute" xml:lang="en"/> + <pi> + <nu xml:lang="nb"> + <iota xml:lang="nb"/> + <tau xml:lang="no"/> + <kappa data="attribute value" xml:lang="no-nb"> + <xi xml:lang="nb"/> + <lambda xml:lang="no" xml:id="id2"> + <xi xml:id="id3"> + <nu name="true" xml:lang="en-GB"> + <green>This text must be green</green> + </nu> + </xi> + </lambda> + </kappa> + </nu> + </pi> + </chi> + </eta> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="no-nb"]//theta[following-sibling::mu[starts-with(concat(@attr,"-"),"attribute-")][@xml:id="id1"][following-sibling::kappa[@xml:id="id2"][not(following-sibling::*)]//theta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//*[contains(concat(@data,"$"),"100%$")][@xml:id="id3"][not(child::node())][following-sibling::delta[@true="123456789"][preceding-sibling::*[position() = 1]]//epsilon[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::zeta/psi[@xml:lang="en-GB"]/kappa[not(preceding-sibling::*)][not(preceding-sibling::kappa)][not(child::node())][following-sibling::nu[starts-with(@abort,"_blan")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[contains(@false,"t")][not(preceding-sibling::*)][not(following-sibling::*)]/chi[following-sibling::omicron[@number="false"][preceding-sibling::*[position() = 1]]/tau[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omega[@class][@xml:lang="en"]//chi[@or][following-sibling::*[position()=1]][following-sibling::eta[@xml:lang="no-nb"][@xml:id="id5"][not(following-sibling::*)]//kappa[starts-with(concat(@or,"-"),"100%-")][@xml:id="id6"]//beta[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][position() = 1]]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="no-nb"> + <theta/> + <mu attr="attribute-value" xml:id="id1"/> + <kappa xml:id="id2"> + <theta xml:lang="en-GB"> + <any data="100%" xml:id="id3"/> + <delta true="123456789"> + <epsilon xml:lang="en-GB" xml:id="id4"/> + <zeta> + <psi xml:lang="en-GB"> + <kappa/> + <nu abort="_blank"> + <lambda false="content"> + <chi/> + <omicron number="false"> + <tau xml:lang="en"/> + <omega class="true" xml:lang="en"> + <chi or="123456789"/> + <eta xml:lang="no-nb" xml:id="id5"> + <kappa or="100%" xml:id="id6"> + <beta xml:lang="no" xml:id="id7"> + <green>This text must be green</green> + </beta> + </kappa> + </eta> + </omega> + </omicron> + </lambda> + </nu> + </psi> + </zeta> + </delta> + </theta> + </kappa> + </phi> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="no-nb"][@xml:id="id1"]//epsilon[@xml:lang="en-GB"][not(following-sibling::*)]//upsilon[contains(@or,"f")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::tau[@object="123456789"][@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[starts-with(concat(@delete,"-"),"123456789-")][@xml:lang="en"]//pi[starts-with(concat(@string,"-"),"false-")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@number][@xml:lang="en-GB"][@xml:id="id4"][not(following-sibling::*)]/nu[contains(concat(@class,"$"),"green$")][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[starts-with(@abort,"tr")][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[starts-with(@src,"at")][@xml:id="id7"][preceding-sibling::*[position() = 2]]/delta[contains(@or,"ute valu")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::upsilon[@object][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/kappa//theta[not(following-sibling::*)]//theta[@xml:lang="no"][not(preceding-sibling::*)]/epsilon[@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[contains(@attrib,"e")][@xml:id="id10"][following-sibling::lambda[preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 2]][following-sibling::iota[not(child::node())][following-sibling::nu[@delete][preceding-sibling::*[position() = 4]][position() = 1]][position() = 1]]]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <lambda xml:lang="no-nb" xml:id="id1"> + <epsilon xml:lang="en-GB"> + <upsilon or="false" xml:lang="en-US"/> + <tau object="123456789" xml:lang="nb" xml:id="id2"/> + <any delete="123456789" xml:lang="en"> + <pi string="false" xml:id="id3"/> + <alpha number="100%" xml:lang="en-GB" xml:id="id4"> + <nu class="solid 1px green"> + <eta xml:id="id5"> + <nu abort="true" xml:id="id6"/> + <mu xml:lang="no"/> + <delta src="attribute value" xml:id="id7"> + <delta or="attribute value" xml:lang="en-US"/> + <upsilon object="attribute-value" xml:id="id8"> + <kappa> + <theta> + <theta xml:lang="no"> + <epsilon xml:lang="no" xml:id="id9"> + <gamma attrib="attribute value" xml:id="id10"/> + <lambda/> + <kappa/> + <iota/> + <nu delete="false"> + <green>This text must be green</green> + </nu> + </epsilon> + </theta> + </theta> + </kappa> + </upsilon> + </delta> + </eta> + </nu> + </alpha> + </any> + </epsilon> + </lambda> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="en-GB"][@xml:id="id1"]//gamma[@xml:id="id2"][not(preceding-sibling::*)]//kappa[@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]/nu[@name="123456789"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@att][following-sibling::gamma[@att][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[starts-with(@or,"attribute")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]//gamma[@xml:id="id5"]//theta[@xml:id="id6"][not(preceding-sibling::*)]/rho[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::nu[starts-with(@content,"another attribute value")][preceding-sibling::*[position() = 1]]/upsilon[@true="100%"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta//alpha[@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id9"][not(following-sibling::*)]//theta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[starts-with(@class,"fal")][@xml:id="id10"][not(preceding-sibling::*)]//alpha[contains(concat(@src,"$"),"alse$")][@xml:id="id11"][following-sibling::tau[@xml:lang="no"][@xml:id="id12"]/omega[not(following-sibling::*)]//alpha[contains(concat(@attribute,"$"),"content$")][@xml:lang="en"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <psi xml:lang="en-GB" xml:id="id1"> + <gamma xml:id="id2"> + <kappa xml:lang="no" xml:id="id3"> + <nu name="123456789"> + <theta att="attribute-value"/> + <gamma att="_blank" xml:lang="no" xml:id="id4"/> + <alpha or="attribute" xml:lang="en-GB"> + <gamma xml:id="id5"> + <theta xml:id="id6"> + <rho xml:id="id7"/> + <nu content="another attribute value"> + <upsilon true="100%" xml:lang="no-nb"/> + <delta> + <alpha xml:id="id8"/> + <sigma xml:lang="en-US" xml:id="id9"> + <theta xml:lang="no-nb"> + <omicron class="false" xml:id="id10"> + <alpha src="false" xml:id="id11"/> + <tau xml:lang="no" xml:id="id12"> + <omega> + <alpha attribute="content" xml:lang="en"> + <green>This text must be green</green> + </alpha> + </omega> + </tau> + </omicron> + </theta> + </sigma> + </delta> + </nu> + </theta> + </gamma> + </alpha> + </nu> + </kappa> + </gamma> + </psi> + </tree> + </test> + <test> + <xpath>//gamma[@xml:lang="nb"][@xml:id="id1"]//epsilon[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)]//nu[@and="false"][not(preceding-sibling::*)][following-sibling::chi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[@attr][following-sibling::*[position()=2]][following-sibling::chi[@src="_blank"][not(child::node())][following-sibling::chi[@xml:lang="en-US"][preceding-sibling::*[position() = 2]]/chi[@insert="content"][@xml:lang="no"][@xml:id="id3"]]][position() = 1]]</xpath> + <tree> + <gamma xml:lang="nb" xml:id="id1"> + <epsilon xml:lang="no-nb" xml:id="id2"> + <nu and="false"/> + <chi> + <nu attr="_blank"/> + <chi src="_blank"/> + <chi xml:lang="en-US"> + <chi insert="content" xml:lang="no" xml:id="id3"> + <green>This text must be green</green> + </chi> + </chi> + </chi> + </epsilon> + </gamma> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="nb"][@xml:id="id1"]//beta[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[not(preceding-sibling::*)][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:lang="en"][not(child::node())][following-sibling::beta[@token][@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//delta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[contains(concat(@abort,"$"),"e$")][@xml:lang="nb"]/epsilon[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::psi[starts-with(@desciption,"tr")][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::tau[starts-with(@object,"attribute")][@xml:id="id5"][preceding-sibling::*[position() = 3]]//omicron[@or][@xml:lang="no-nb"][not(preceding-sibling::*)][not(preceding-sibling::omicron)]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu xml:lang="nb" xml:id="id1"> + <beta xml:lang="en" xml:id="id2"/> + <sigma xml:lang="en-GB"> + <kappa/> + <any/> + <mu xml:lang="en"/> + <beta token="another attribute value" xml:lang="no"> + <delta xml:lang="en-GB"> + <rho abort="attribute value" xml:lang="nb"> + <epsilon xml:lang="en-GB"/> + <beta xml:id="id3"/> + <psi desciption="true" xml:lang="en-GB" xml:id="id4"/> + <tau object="attribute-value" xml:id="id5"> + <omicron or="this-is-att-value" xml:lang="no-nb"> + <green>This text must be green</green> + </omicron> + </tau> + </rho> + </delta> + </beta> + </sigma> + </nu> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="no"][@xml:id="id1"]/pi[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::tau[@insert][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[@abort="_blank"][@xml:lang="no"][not(child::node())][following-sibling::chi[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 3]][following-sibling::epsilon[contains(@true,"another attribute")][not(following-sibling::*)]//sigma[@xml:id="id4"][not(child::node())][following-sibling::lambda[preceding-sibling::*[position() = 1]]//rho[not(preceding-sibling::*)][following-sibling::phi[@xml:id="id5"][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id6"]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha xml:lang="no" xml:id="id1"> + <pi xml:lang="no-nb" xml:id="id2"/> + <tau insert="123456789" xml:lang="no-nb"/> + <eta abort="_blank" xml:lang="no"/> + <chi xml:lang="en-US" xml:id="id3"/> + <epsilon true="another attribute value"> + <sigma xml:id="id4"/> + <lambda> + <rho/> + <phi xml:id="id5"/> + <omicron xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </lambda> + </epsilon> + </alpha> + </tree> + </test> + <test> + <xpath>//phi/epsilon[@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]//iota[@xml:id="id2"][not(following-sibling::*)]/beta[@attrib][@xml:id="id3"][not(preceding-sibling::*)]//lambda[@data="attribute"][@xml:lang="nb"][not(preceding-sibling::*)]/epsilon[starts-with(concat(@string,"-"),"false-")][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)]/xi[@or][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[starts-with(concat(@content,"-"),"123456789-")][@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//kappa[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[contains(@att,"10")][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="no"][@xml:id="id7"]/upsilon[@content][@xml:lang="no-nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[@and="100%"][following-sibling::*[position()=1]][following-sibling::nu[preceding-sibling::*[position() = 2]]/omicron[@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@name="this-is-att-value"][@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)]/nu[contains(concat(@and,"$"),"te value$")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:id="id10"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]</xpath> + <tree> + <phi> + <epsilon xml:lang="en-GB" xml:id="id1"> + <iota xml:id="id2"> + <beta attrib="100%" xml:id="id3"> + <lambda data="attribute" xml:lang="nb"> + <epsilon string="false" xml:lang="nb" xml:id="id4"> + <xi or="_blank"> + <lambda content="123456789" xml:lang="no"/> + <epsilon xml:lang="nb" xml:id="id5"> + <kappa xml:id="id6"> + <psi att="100%"/> + <iota xml:lang="no" xml:id="id7"> + <upsilon content="content" xml:lang="no-nb"/> + <beta and="100%"/> + <nu> + <omicron xml:lang="no-nb" xml:id="id8"> + <theta name="this-is-att-value" xml:lang="en" xml:id="id9"> + <nu and="attribute value" xml:lang="en-GB"> + <beta xml:id="id10"> + <green>This text must be green</green> + </beta> + </nu> + </theta> + </omicron> + </nu> + </iota> + </kappa> + </epsilon> + </xi> + </epsilon> + </lambda> + </beta> + </iota> + </epsilon> + </phi> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@attribute,"$"),"9$")][@xml:lang="nb"]//xi[@xml:id="id1"][following-sibling::*[position()=5]][not(child::node())][following-sibling::pi[@xml:lang="en"][not(child::node())][following-sibling::upsilon[@xml:lang="en"][following-sibling::iota[contains(@title,"lue")][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::theta[starts-with(concat(@attribute,"-"),"attribute-")][@xml:id="id2"][preceding-sibling::*[position() = 4]][following-sibling::omega[contains(@delete,"9")][@xml:lang="en"][not(following-sibling::*)]/tau[@xml:lang="no"][not(preceding-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <beta attribute="123456789" xml:lang="nb"> + <xi xml:id="id1"/> + <pi xml:lang="en"/> + <upsilon xml:lang="en"/> + <iota title="this.nodeValue"/> + <theta attribute="attribute-value" xml:id="id2"/> + <omega delete="123456789" xml:lang="en"> + <tau xml:lang="no"> + <green>This text must be green</green> + </tau> + </omega> + </beta> + </tree> + </test> + <test> + <xpath>//lambda[starts-with(concat(@name,"-"),"true-")]//beta[@xml:lang="en"][@xml:id="id1"][following-sibling::nu[contains(concat(@data,"$"),"attribute value$")][@xml:lang="no-nb"]//upsilon[contains(@number,"alue")][following-sibling::delta[@xml:lang="nb"][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id2"][following-sibling::chi[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][following-sibling::epsilon[@attribute][@xml:id="id3"][preceding-sibling::*[position() = 4]][following-sibling::kappa[@abort="123456789"][@xml:lang="no-nb"][not(following-sibling::*)]//omega[@xml:lang="nb"][following-sibling::epsilon[not(following-sibling::*)]//omicron[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::pi//lambda[not(following-sibling::*)]]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <lambda name="true"> + <beta xml:lang="en" xml:id="id1"/> + <nu data="attribute value" xml:lang="no-nb"> + <upsilon number="attribute-value"/> + <delta xml:lang="nb"/> + <delta xml:lang="no-nb" xml:id="id2"/> + <chi xml:lang="en-GB"/> + <epsilon attribute="solid 1px green" xml:id="id3"/> + <kappa abort="123456789" xml:lang="no-nb"> + <omega xml:lang="nb"/> + <epsilon> + <omicron xml:lang="en"/> + <pi> + <lambda> + <green>This text must be green</green> + </lambda> + </pi> + </epsilon> + </kappa> + </nu> + </lambda> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en"][@xml:id="id1"]/kappa[@token][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]//iota[following-sibling::*[position()=1]][following-sibling::pi[@class][@xml:lang="nb"]/iota[starts-with(concat(@attribute,"-"),"content-")][@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/zeta[@xml:lang="en"][not(child::node())][following-sibling::epsilon[@content][not(following-sibling::*)]//lambda[@xml:id="id4"]/lambda[@name][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="nb"]/xi[@xml:id="id5"][not(following-sibling::*)]/iota[starts-with(@src,"100")][@xml:id="id6"][not(following-sibling::*)]/rho[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@insert][@xml:lang="no-nb"][@xml:id="id8"][not(child::node())][following-sibling::omicron[starts-with(concat(@name,"-"),"solid 1px green-")][@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="en" xml:id="id1"> + <kappa token="attribute" xml:lang="nb"/> + <upsilon xml:lang="en-GB" xml:id="id2"> + <iota/> + <pi class="false" xml:lang="nb"> + <iota attribute="content" xml:lang="en" xml:id="id3"> + <zeta xml:lang="en"/> + <epsilon content="123456789"> + <lambda xml:id="id4"> + <lambda name="100%"/> + <theta xml:lang="nb"> + <xi xml:id="id5"> + <iota src="100%" xml:id="id6"> + <rho xml:lang="en-US" xml:id="id7"> + <nu insert="this.nodeValue" xml:lang="no-nb" xml:id="id8"/> + <omicron name="solid 1px green" xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </omicron> + </rho> + </iota> + </xi> + </theta> + </lambda> + </epsilon> + </iota> + </pi> + </upsilon> + </phi> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]//iota[contains(concat(@number,"$"),"odeValue$")][@xml:id="id2"]//iota[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@content][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[following-sibling::rho[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::iota[following-sibling::theta[@true][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 4]][following-sibling::xi[starts-with(concat(@content,"-"),"solid 1px green-")][@xml:lang="en-US"][not(child::node())][following-sibling::rho[contains(@content,"%")][@xml:id="id5"][not(child::node())][following-sibling::upsilon[@abort][@xml:id="id6"][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <sigma xml:id="id1"> + <iota number="this.nodeValue" xml:id="id2"> + <iota xml:id="id3"> + <iota content="attribute-value"/> + <delta/> + <rho xml:lang="en-US"/> + <iota/> + <theta true="_blank" xml:lang="nb" xml:id="id4"/> + <xi content="solid 1px green" xml:lang="en-US"/> + <rho content="100%" xml:id="id5"/> + <upsilon abort="false" xml:id="id6"> + <green>This text must be green</green> + </upsilon> + </iota> + </iota> + </sigma> + </tree> + </test> + <test> + <xpath>//iota[starts-with(concat(@or,"-"),"attribute value-")][@xml:id="id1"]/beta[not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:id="id2"]//nu[contains(@class,"e ")][@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//upsilon[not(following-sibling::*)]/tau[@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]//xi[@att="true"][@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@xml:lang="no"][@xml:id="id6"][position() = 1]]</xpath> + <tree> + <iota or="attribute value" xml:id="id1"> + <beta/> + <lambda xml:id="id2"> + <nu class="attribute value" xml:lang="no" xml:id="id3"> + <upsilon> + <tau xml:lang="no" xml:id="id4"> + <xi att="true" xml:lang="no-nb" xml:id="id5"> + <rho xml:lang="no" xml:id="id6"> + <green>This text must be green</green> + </rho> + </xi> + </tau> + </upsilon> + </nu> + </lambda> + </iota> + </tree> + </test> + <test> + <xpath>//mu//alpha[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::theta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@title][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=4]][not(preceding-sibling::rho)][following-sibling::gamma[contains(concat(@att,"$"),"ute$")][@xml:lang="no-nb"][not(child::node())][following-sibling::tau[contains(@object,"b")][@xml:lang="en-US"][preceding-sibling::*[position() = 4]][following-sibling::zeta[@class][@xml:id="id4"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 6]][not(following-sibling::*)]//lambda[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <mu> + <alpha xml:id="id1"/> + <theta xml:id="id2"/> + <rho title="solid 1px green" xml:lang="no" xml:id="id3"/> + <gamma att="attribute" xml:lang="no-nb"/> + <tau object="_blank" xml:lang="en-US"/> + <zeta class="attribute" xml:id="id4"/> + <omicron xml:lang="en-GB" xml:id="id5"> + <lambda xml:lang="nb"> + <green>This text must be green</green> + </lambda> + </omicron> + </mu> + </tree> + </test> + <test> + <xpath>//chi/tau[starts-with(@or,"this.nodeValu")][@xml:id="id1"][not(following-sibling::*)]//delta[contains(concat(@number,"$"),"ribute$")][@xml:lang="no-nb"]//alpha[@xml:id="id2"][not(child::node())][following-sibling::nu[starts-with(@false,"attribu")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[@false="attribute-value"][not(preceding-sibling::*)]//mu[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[starts-with(@false,"123")][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]/zeta[contains(concat(@and,"$"),"ontent$")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:lang="nb"][@xml:id="id6"]/delta[@title][@xml:lang="en"][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@true][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <chi> + <tau or="this.nodeValue" xml:id="id1"> + <delta number="attribute" xml:lang="no-nb"> + <alpha xml:id="id2"/> + <nu false="attribute-value" xml:lang="no" xml:id="id3"> + <zeta false="attribute-value"> + <mu xml:lang="en" xml:id="id4"/> + <phi false="123456789" xml:lang="nb" xml:id="id5"> + <zeta and="content" xml:lang="en"/> + <alpha xml:lang="nb" xml:id="id6"> + <delta title="attribute" xml:lang="en"/> + <delta xml:lang="no-nb"> + <alpha xml:lang="en-US" xml:id="id7"/> + <psi true="_blank" xml:lang="en-GB"> + <green>This text must be green</green> + </psi> + </delta> + </alpha> + </phi> + </zeta> + </nu> + </delta> + </tau> + </chi> + </tree> + </test> + <test> + <xpath>//mu[contains(concat(@attrib,"$"),"nk$")][@xml:id="id1"]/omicron[following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[starts-with(@token,"another attribute va")]//upsilon[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]/omega[@abort][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@content][not(following-sibling::*)]/zeta[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]//gamma[contains(@true,"is-is-att-val")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[not(following-sibling::*)]//omicron[contains(@attr,"ue")][@xml:lang="no-nb"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu attrib="_blank" xml:id="id1"> + <omicron/> + <iota token="another attribute value"> + <upsilon xml:lang="en" xml:id="id2"> + <omega abort="this-is-att-value"> + <delta xml:lang="en-GB"/> + <gamma content="attribute"> + <zeta xml:lang="en-US" xml:id="id3"> + <gamma true="this-is-att-value" xml:lang="en"/> + <sigma> + <omicron attr="true" xml:lang="no-nb"> + <green>This text must be green</green> + </omicron> + </sigma> + </zeta> + </gamma> + </omega> + </upsilon> + </iota> + </mu> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(concat(@desciption,"-"),"this.nodeValue-")]//chi[contains(concat(@attrib,"$"),"789$")][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:lang="no"][not(following-sibling::*)]/eta[not(child::node())][following-sibling::chi[@and][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[@title][@xml:lang="en-GB"][not(child::node())][following-sibling::beta[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]]</xpath> + <tree> + <zeta desciption="this.nodeValue"> + <chi attrib="123456789" xml:id="id1"/> + <alpha xml:lang="no"> + <eta/> + <chi and="another attribute value"> + <eta title="_blank" xml:lang="en-GB"/> + <beta xml:lang="no"> + <green>This text must be green</green> + </beta> + </chi> + </alpha> + </zeta> + </tree> + </test> + <test> + <xpath>//lambda[@att][@xml:lang="en-GB"]/delta[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)]/upsilon[@token][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::delta[starts-with(concat(@att,"-"),"_blank-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/beta[starts-with(concat(@attrib,"-"),"attribute value-")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[@xml:id="id4"][following-sibling::rho[not(following-sibling::*)]/eta[contains(@object,"d 1")][following-sibling::sigma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[contains(concat(@att,"$"),"ank$")][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[@xml:lang="en-US"]//nu[@title][@xml:lang="en"][not(preceding-sibling::*)]/gamma[@delete][@xml:lang="en"][not(following-sibling::*)][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <lambda att="attribute" xml:lang="en-GB"> + <delta xml:lang="en-GB" xml:id="id1"> + <upsilon token="_blank" xml:lang="en-US" xml:id="id2"/> + <delta att="_blank" xml:lang="nb"> + <beta attrib="attribute value" xml:id="id3"/> + <tau xml:id="id4"/> + <rho> + <eta object="solid 1px green"/> + <sigma> + <iota/> + <nu/> + <phi att="_blank" xml:lang="en-GB" xml:id="id5"> + <alpha xml:lang="en-US"> + <nu title="attribute value" xml:lang="en"> + <gamma delete="this-is-att-value" xml:lang="en"> + <green>This text must be green</green> + </gamma> + </nu> + </alpha> + </phi> + </sigma> + </rho> + </delta> + </delta> + </lambda> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="no-nb"][@xml:id="id1"]//chi[@abort][@xml:lang="nb"][@xml:id="id2"][following-sibling::psi[@false][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::theta[@attrib="attribute-value"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[not(child::node())][following-sibling::upsilon[not(following-sibling::*)]/phi[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::epsilon[contains(concat(@abort,"$"),"e$")][not(following-sibling::*)]//delta[@xml:id="id4"][not(following-sibling::*)]//xi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::theta[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omega[contains(@src,"-valu")][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::*[@xml:lang="no-nb"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="en-US"][@xml:id="id8"]/zeta[@attribute][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@attr="attribute-value"][@xml:id="id10"][not(following-sibling::*)]//alpha[@xml:lang="no"]/zeta[@xml:lang="no"][not(following-sibling::*)]/zeta[@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)]//tau[contains(concat(@true,"$"),"3456789$")][@xml:id="id12"][not(following-sibling::*)]/pi[@xml:lang="nb"][following-sibling::iota[@xml:id="id13"]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <epsilon xml:lang="no-nb" xml:id="id1"> + <chi abort="false" xml:lang="nb" xml:id="id2"/> + <psi false="_blank" xml:lang="no-nb"/> + <theta attrib="attribute-value"/> + <upsilon/> + <upsilon> + <phi xml:id="id3"/> + <delta/> + <any xml:lang="en"/> + <epsilon abort="true"> + <delta xml:id="id4"> + <xi xml:lang="no-nb"/> + <theta xml:lang="no-nb" xml:id="id5"> + <omega src="attribute-value" xml:id="id6"/> + <any xml:lang="no-nb" xml:id="id7"/> + <xi xml:lang="en-US" xml:id="id8"> + <zeta attribute="another attribute value" xml:id="id9"/> + <chi attr="attribute-value" xml:id="id10"> + <alpha xml:lang="no"> + <zeta xml:lang="no"> + <zeta xml:lang="no-nb" xml:id="id11"> + <tau true="123456789" xml:id="id12"> + <pi xml:lang="nb"/> + <iota xml:id="id13"> + <green>This text must be green</green> + </iota> + </tau> + </zeta> + </zeta> + </alpha> + </chi> + </xi> + </theta> + </delta> + </epsilon> + </upsilon> + </epsilon> + </tree> + </test> + <test> + <xpath>//nu[contains(concat(@or,"$"),"reen$")][@xml:id="id1"]//epsilon[@xml:lang="en"][not(child::node())][following-sibling::epsilon[@xml:lang="en-US"][not(following-sibling::*)]/gamma[@xml:id="id2"][not(following-sibling::*)]//kappa[@abort][@xml:id="id3"][not(child::node())][following-sibling::mu[@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[@xml:lang="en"][@xml:id="id5"]/omicron[following-sibling::tau[starts-with(@attr,"attribu")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::rho[contains(concat(@class,"$"),".nodeValue$")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/tau[not(preceding-sibling::*)][not(following-sibling::*)]/eta[contains(@title,"d")][@xml:id="id6"][not(following-sibling::*)]/xi[@class][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[contains(@title,"456")][@xml:lang="no-nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@attribute][@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 2]]//epsilon[@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[contains(@desciption,"ue")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::lambda[@xml:id="id11"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::eta[@xml:lang="no"][following-sibling::*[contains(@data,"e")][@xml:lang="no"]/*[@xml:lang="en-GB"][@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[contains(@attr,"ttribute")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::theta or following-sibling::theta)]/chi[@xml:lang="en-US"][@xml:id="id13"][position() = 1]][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu or="solid 1px green" xml:id="id1"> + <epsilon xml:lang="en"/> + <epsilon xml:lang="en-US"> + <gamma xml:id="id2"> + <kappa abort="100%" xml:id="id3"/> + <mu xml:lang="no-nb" xml:id="id4"> + <omega xml:lang="en" xml:id="id5"> + <omicron/> + <tau attr="attribute-value" xml:lang="nb"/> + <rho class="this.nodeValue"> + <tau> + <eta title="this.nodeValue" xml:id="id6"> + <xi class="another attribute value" xml:id="id7"/> + <xi title="123456789" xml:lang="no-nb" xml:id="id8"/> + <delta attribute="this-is-att-value" xml:lang="nb" xml:id="id9"> + <epsilon xml:id="id10"/> + <nu desciption="attribute-value" xml:lang="en-US"/> + <lambda xml:id="id11"/> + <eta xml:lang="no"/> + <any data="false" xml:lang="no"> + <any xml:lang="en-GB" xml:id="id12"> + <theta attr="attribute" xml:lang="nb"> + <chi xml:lang="en-US" xml:id="id13"> + <green>This text must be green</green> + </chi> + </theta> + </any> + </any> + </delta> + </eta> + </tau> + </rho> + </omega> + </mu> + </gamma> + </epsilon> + </nu> + </tree> + </test> + <test> + <xpath>//omicron[@data="attribute-value"]/kappa[@xml:lang="en"][@xml:id="id1"]/beta[@and][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::lambda)][following-sibling::upsilon[@xml:lang="nb"][not(following-sibling::*)]/delta[starts-with(concat(@and,"-"),"true-")][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[contains(concat(@data,"$"),"px green$")]//iota[not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::delta[preceding-sibling::*[position() = 1]][following-sibling::chi[starts-with(concat(@number,"-"),"true-")][@xml:lang="no"][not(child::node())][following-sibling::upsilon[contains(concat(@class,"$"),"100%$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//lambda[@xml:id="id6"][not(preceding-sibling::*)]/sigma[@attribute][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <omicron data="attribute-value"> + <kappa xml:lang="en" xml:id="id1"> + <beta and="solid 1px green"/> + <iota> + <any xml:lang="en-US" xml:id="id2"> + <lambda xml:lang="en-GB" xml:id="id3"/> + <upsilon xml:lang="nb"> + <delta and="true" xml:id="id4"/> + <epsilon data="solid 1px green"> + <iota/> + <delta/> + <chi number="true" xml:lang="no"/> + <upsilon class="100%" xml:lang="en-GB"/> + <omicron xml:lang="en-GB" xml:id="id5"> + <lambda xml:id="id6"> + <sigma attribute="another attribute value" xml:lang="en-GB"/> + <gamma> + <green>This text must be green</green> + </gamma> + </lambda> + </omicron> + </epsilon> + </upsilon> + </any> + </iota> + </kappa> + </omicron> + </tree> + </test> + <test> + <xpath>//theta[@number="content"][@xml:lang="en-GB"][@xml:id="id1"]//psi[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@attrib="true"][not(following-sibling::*)]//kappa[starts-with(@attrib,"content")][@xml:lang="en-US"][not(following-sibling::*)]//phi[starts-with(concat(@content,"-"),"attribute-")][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[contains(@string,"ue")][@xml:id="id3"][preceding-sibling::*[position() = 1]]/upsilon[@xml:lang="en-US"]//chi[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]]</xpath> + <tree> + <theta number="content" xml:lang="en-GB" xml:id="id1"> + <psi xml:lang="no-nb" xml:id="id2"> + <rho attrib="true"> + <kappa attrib="content" xml:lang="en-US"> + <phi content="attribute"/> + <delta string="attribute value" xml:id="id3"> + <upsilon xml:lang="en-US"> + <chi xml:lang="en-US" xml:id="id4"> + <green>This text must be green</green> + </chi> + </upsilon> + </delta> + </kappa> + </rho> + </psi> + </theta> + </tree> + </test> + <test> + <xpath>//delta[@insert][@xml:lang="no-nb"][@xml:id="id1"]//rho[@false="this-is-att-value"][not(following-sibling::*)]//kappa[contains(@and,"3456")][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@true][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@xml:id="id3"]//chi[starts-with(concat(@object,"-"),"another attribute value-")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::gamma[@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@title][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 2]]/chi[contains(concat(@or,"$"),"een$")][@xml:id="id7"][not(preceding-sibling::*)][not(preceding-sibling::chi)][following-sibling::tau[@content][@xml:lang="no"]//omega[starts-with(@number,"solid 1")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[contains(concat(@src,"$"),"alse$")]/alpha[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[not(child::node())][following-sibling::phi[contains(concat(@abort,"$"),"0%$")][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(preceding-sibling::phi)][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id9"][preceding-sibling::*[position() = 2]][following-sibling::chi[@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][not(preceding-sibling::chi)]/eta[@xml:lang="no"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@token][@xml:lang="en"][not(following-sibling::*)]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta insert="this-is-att-value" xml:lang="no-nb" xml:id="id1"> + <rho false="this-is-att-value"> + <kappa and="123456789"/> + <eta true="content" xml:lang="en" xml:id="id2"> + <beta/> + <omega xml:id="id3"> + <chi object="another attribute value" xml:lang="en-GB" xml:id="id4"/> + <gamma xml:id="id5"/> + <any title="false" xml:lang="en-US" xml:id="id6"> + <chi or="solid 1px green" xml:id="id7"/> + <tau content="this-is-att-value" xml:lang="no"> + <omega number="solid 1px green" xml:lang="no-nb"> + <psi src="false"> + <alpha xml:lang="nb"> + <kappa/> + <phi abort="100%" xml:id="id8"/> + <tau xml:lang="no-nb" xml:id="id9"/> + <chi xml:lang="no" xml:id="id10"> + <eta xml:lang="no" xml:id="id11"> + <theta token="_blank" xml:lang="en"> + <green>This text must be green</green> + </theta> + </eta> + </chi> + </alpha> + </psi> + </omega> + </tau> + </any> + </omega> + </eta> + </rho> + </delta> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en"]//omicron[@object][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@att="attribute"][@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[starts-with(concat(@title,"-"),"this.nodeValue-")][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[not(child::node())][following-sibling::psi[contains(@delete,"ib")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]//theta[@xml:id="id2"][following-sibling::rho[not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][position() = 1]]]]]]</xpath> + <tree> + <chi xml:lang="en"> + <omicron object="100%"/> + <beta att="attribute" xml:lang="en-GB" xml:id="id1"> + <xi title="this.nodeValue"/> + <psi/> + <psi delete="attribute" xml:lang="nb"> + <theta xml:id="id2"/> + <rho/> + <sigma xml:lang="no-nb"> + <green>This text must be green</green> + </sigma> + </psi> + </beta> + </chi> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en-US"]/epsilon[contains(concat(@attrib,"$"),"ent$")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::rho[not(following-sibling::*)]/chi[@true][@xml:lang="no"][@xml:id="id1"]//zeta[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::theta[@xml:id="id3"][not(child::node())][following-sibling::delta[@xml:lang="no"][not(following-sibling::*)]//alpha[@or="true"][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//nu[contains(concat(@attrib,"$"),"ue$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[contains(concat(@delete,"$"),"se$")][@xml:lang="en"][@xml:id="id5"][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id6"][following-sibling::chi[contains(@attribute,"d 1px green")]/nu[@xml:lang="en-US"][@xml:id="id7"][not(following-sibling::*)]//phi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::nu[@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]]]]</xpath> + <tree> + <chi xml:lang="en-US"> + <epsilon attrib="content" xml:lang="en"/> + <iota/> + <rho> + <chi true="this-is-att-value" xml:lang="no" xml:id="id1"> + <zeta xml:lang="en-GB" xml:id="id2"/> + <theta xml:id="id3"/> + <delta xml:lang="no"> + <alpha or="true" xml:lang="no" xml:id="id4"/> + <pi xml:lang="no-nb"> + <nu attrib="this.nodeValue" xml:lang="no-nb"> + <lambda delete="false" xml:lang="en" xml:id="id5"/> + <kappa xml:lang="en-GB" xml:id="id6"/> + <chi attribute="solid 1px green"> + <nu xml:lang="en-US" xml:id="id7"> + <phi xml:lang="no"/> + <nu xml:id="id8"> + <green>This text must be green</green> + </nu> + </nu> + </chi> + </nu> + </pi> + </delta> + </chi> + </rho> + </chi> + </tree> + </test> + <test> + <xpath>//beta[starts-with(concat(@object,"-"),"_blank-")]//iota[not(following-sibling::*)]/theta[starts-with(concat(@number,"-"),"123456789-")][@xml:lang="nb"][@xml:id="id1"]//delta[@true][not(following-sibling::*)]//chi[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]/psi[contains(concat(@number,"$"),"ent$")]/beta[contains(concat(@name,"$"),"ribute value$")][@xml:id="id3"][not(preceding-sibling::*)]//omega[@object="attribute"][not(following-sibling::*)]/beta[not(preceding-sibling::*)][not(following-sibling::*)]//nu[@attribute="this-is-att-value"][@xml:lang="no"][not(child::node())][following-sibling::rho[@content][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[not(child::node())][following-sibling::epsilon[starts-with(concat(@false,"-"),"true-")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]//mu[starts-with(@src,"fals")][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[starts-with(@object,"attribute v")][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::sigma[starts-with(concat(@desciption,"-"),"_blank-")][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:id="id6"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <beta object="_blank"> + <iota> + <theta number="123456789" xml:lang="nb" xml:id="id1"> + <delta true="solid 1px green"> + <chi xml:lang="nb" xml:id="id2"> + <psi number="content"> + <beta name="attribute value" xml:id="id3"> + <omega object="attribute"> + <beta> + <nu attribute="this-is-att-value" xml:lang="no"/> + <rho content="attribute" xml:lang="en-US"> + <delta/> + <epsilon false="true" xml:lang="en-US"> + <mu src="false" xml:id="id4"/> + <alpha object="attribute value" xml:lang="en-GB" xml:id="id5"/> + <sigma desciption="_blank"/> + <rho xml:id="id6"> + <green>This text must be green</green> + </rho> + </epsilon> + </rho> + </beta> + </omega> + </beta> + </psi> + </chi> + </delta> + </theta> + </iota> + </beta> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="en-US"]//lambda[@data="123456789"][following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:id="id2"][preceding-sibling::*[position() = 2]]//phi[starts-with(concat(@delete,"-"),"true-")][@xml:lang="en"][not(following-sibling::*)]/sigma[contains(@desciption,"lank")][not(following-sibling::*)]//psi[starts-with(@delete,"a")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::delta[starts-with(@attr,"tru")][following-sibling::*[position()=1]][following-sibling::tau[starts-with(concat(@number,"-"),"content-")][preceding-sibling::*[position() = 2]]//gamma[not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=4]][not(child::node())][following-sibling::psi[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::eta[@xml:id="id6"][preceding-sibling::*[position() = 4]][following-sibling::epsilon[@src][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[starts-with(concat(@or,"-"),"false-")][@xml:id="id8"][preceding-sibling::*[position() = 6]][not(following-sibling::*)]//pi[not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@number][@xml:id="id9"]//tau[starts-with(@insert,"tru")][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::upsilon[@xml:lang="nb"][@xml:id="id10"][not(child::node())][following-sibling::upsilon[contains(@desciption,"lue")][@xml:id="id11"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <pi xml:lang="en-US"> + <lambda data="123456789"/> + <tau xml:lang="en-US" xml:id="id1"/> + <phi xml:id="id2"> + <phi delete="true" xml:lang="en"> + <sigma desciption="_blank"> + <psi delete="another attribute value" xml:id="id3"/> + <delta attr="true"/> + <tau number="content"> + <gamma/> + <epsilon xml:id="id4"/> + <omega xml:lang="no-nb"/> + <psi xml:lang="en-US" xml:id="id5"/> + <eta xml:id="id6"/> + <epsilon src="attribute-value" xml:id="id7"/> + <phi or="false" xml:id="id8"> + <pi/> + <upsilon number="content" xml:id="id9"> + <tau insert="true"/> + <upsilon xml:lang="nb" xml:id="id10"/> + <upsilon desciption="this.nodeValue" xml:id="id11"> + <green>This text must be green</green> + </upsilon> + </upsilon> + </phi> + </tau> + </sigma> + </phi> + </phi> + </pi> + </tree> + </test> + <test> + <xpath>//sigma[@true][@xml:lang="en-US"][@xml:id="id1"]/xi[@title][@xml:lang="en-US"][@xml:id="id2"][following-sibling::kappa[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]//omicron[@xml:lang="en-GB"][following-sibling::kappa[not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::omicron[starts-with(concat(@desciption,"-"),"content-")][@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]//gamma[@xml:lang="nb"][not(preceding-sibling::*)]/lambda[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::*[starts-with(concat(@string,"-"),"100%-")][not(following-sibling::*)]/tau[@and][not(preceding-sibling::*)]//psi[starts-with(concat(@string,"-"),"_blank-")][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[not(child::node())][following-sibling::beta[contains(concat(@false,"$"),"ttribute value$")][@xml:id="id7"][preceding-sibling::*[position() = 2]]//rho[@xml:lang="en-GB"][following-sibling::omega[@class][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <sigma true="123456789" xml:lang="en-US" xml:id="id1"> + <xi title="attribute-value" xml:lang="en-US" xml:id="id2"/> + <kappa xml:lang="en-US"> + <omicron xml:lang="en-GB"/> + <kappa/> + <omicron xml:lang="no" xml:id="id3"/> + <omicron desciption="content" xml:lang="nb" xml:id="id4"> + <gamma xml:lang="nb"> + <lambda xml:id="id5"/> + <any string="100%"> + <tau and="attribute"> + <psi string="_blank" xml:lang="en-US" xml:id="id6"/> + <theta/> + <beta false="another attribute value" xml:id="id7"> + <rho xml:lang="en-GB"/> + <omega class="true"> + <green>This text must be green</green> + </omega> + </beta> + </tau> + </any> + </gamma> + </omicron> + </kappa> + </sigma> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(@or,"solid 1p")][@xml:id="id1"]/epsilon[starts-with(@or,"100%")][@xml:id="id2"][not(preceding-sibling::*)]/psi[contains(concat(@or,"$"),"alue$")][@xml:id="id3"][not(following-sibling::*)]//theta[starts-with(@insert,"attribute v")][not(preceding-sibling::*)]//theta[contains(concat(@title,"$"),"ibute value$")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]</xpath> + <tree> + <upsilon or="solid 1px green" xml:id="id1"> + <epsilon or="100%" xml:id="id2"> + <psi or="this-is-att-value" xml:id="id3"> + <theta insert="attribute value"> + <theta title="attribute value"/> + <rho> + <green>This text must be green</green> + </rho> + </theta> + </psi> + </epsilon> + </upsilon> + </tree> + </test> + <test> + <xpath>//nu[contains(concat(@object,"$"),"ue$")][@xml:lang="en-GB"][@xml:id="id1"]//gamma[@xml:lang="no"][not(child::node())][following-sibling::*[@xml:lang="no"]//tau[starts-with(concat(@title,"-"),"true-")][@xml:id="id2"][not(preceding-sibling::*)]/gamma[contains(@name,"10")][not(preceding-sibling::*)][following-sibling::beta[contains(concat(@att,"$"),"s.nodeValue$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:lang="no"][following-sibling::*[position()=4]][not(child::node())][following-sibling::psi[@abort][@xml:id="id3"][not(child::node())][following-sibling::psi[contains(concat(@object,"$"),"true$")][following-sibling::delta[@xml:id="id4"][preceding-sibling::*[position() = 5]][following-sibling::alpha[contains(@title,"e")][@xml:id="id5"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu object="this-is-att-value" xml:lang="en-GB" xml:id="id1"> + <gamma xml:lang="no"/> + <any xml:lang="no"> + <tau title="true" xml:id="id2"> + <gamma name="100%"/> + <beta att="this.nodeValue" xml:lang="no-nb"/> + <delta xml:lang="no"/> + <psi abort="true" xml:id="id3"/> + <psi object="true"/> + <delta xml:id="id4"/> + <alpha title="true" xml:id="id5"> + <green>This text must be green</green> + </alpha> + </tau> + </any> + </nu> + </tree> + </test> + <test> + <xpath>//alpha[@data="attribute"][@xml:lang="en-US"][@xml:id="id1"]/iota[starts-with(@att,"this-is-att-v")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="en"][@xml:id="id3"]/eta[@xml:id="id4"][not(following-sibling::*)]/theta[starts-with(concat(@insert,"-"),"attribute-")][@xml:id="id5"][following-sibling::*[position()=4]][following-sibling::delta[@xml:lang="nb"][not(child::node())][following-sibling::beta[following-sibling::*[position()=2]][following-sibling::upsilon[contains(concat(@insert,"$"),"value$")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::delta[starts-with(concat(@abort,"-"),"attribute-")][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//mu[@xml:lang="en"][@xml:id="id7"][not(child::node())][following-sibling::alpha[@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@xml:lang="nb"][not(following-sibling::*)]/tau[@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[contains(concat(@title,"$"),"ue$")]/phi[@string][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <alpha data="attribute" xml:lang="en-US" xml:id="id1"> + <iota att="this-is-att-value" xml:lang="en-GB" xml:id="id2"/> + <xi xml:lang="en" xml:id="id3"> + <eta xml:id="id4"> + <theta insert="attribute" xml:id="id5"/> + <delta xml:lang="nb"/> + <beta/> + <upsilon insert="another attribute value" xml:lang="en-US" xml:id="id6"/> + <delta abort="attribute"> + <mu xml:lang="en" xml:id="id7"/> + <alpha xml:id="id8"> + <pi xml:lang="nb"> + <tau xml:lang="no" xml:id="id9"> + <phi title="true"> + <phi string="_blank" xml:id="id10"> + <green>This text must be green</green> + </phi> + </phi> + </tau> + </pi> + </alpha> + </delta> + </eta> + </xi> + </alpha> + </tree> + </test> + <test> + <xpath>//chi//sigma[starts-with(concat(@src,"-"),"true-")][not(following-sibling::*)]/delta[@xml:id="id1"][following-sibling::kappa[preceding-sibling::*[position() = 1]][following-sibling::iota[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/kappa[@or="attribute value"][@xml:lang="no"][not(preceding-sibling::*)]/rho[@xml:lang="no"][@xml:id="id2"]/mu[not(preceding-sibling::*)][following-sibling::nu][position() = 1]]]</xpath> + <tree> + <chi> + <sigma src="true"> + <delta xml:id="id1"/> + <kappa/> + <iota xml:lang="no-nb"> + <kappa or="attribute value" xml:lang="no"> + <rho xml:lang="no" xml:id="id2"> + <mu/> + <nu> + <green>This text must be green</green> + </nu> + </rho> + </kappa> + </iota> + </sigma> + </chi> + </tree> + </test> + <test> + <xpath>//gamma[contains(concat(@class,"$"),"te$")][@xml:lang="en-US"][@xml:id="id1"]//theta[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)]/lambda[@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[contains(concat(@content,"$"),"ibute-value$")][@xml:lang="en-GB"][@xml:id="id3"]/mu[@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::eta[@xml:lang="en-GB"][@xml:id="id4"][not(following-sibling::*)]//zeta[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[not(child::node())][following-sibling::chi[starts-with(@abort,"an")][@xml:lang="no"][@xml:id="id6"][not(child::node())][following-sibling::epsilon[@number="123456789"][@xml:lang="no-nb"][@xml:id="id7"][not(child::node())][following-sibling::iota[contains(concat(@and,"$"),"odeValue$")][@xml:lang="en-US"][following-sibling::mu[starts-with(@string,"this.")][@xml:id="id8"][preceding-sibling::*[position() = 5]][following-sibling::upsilon[contains(concat(@string,"$"),"lank$")][@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 6]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <gamma class="attribute" xml:lang="en-US" xml:id="id1"> + <theta xml:lang="en-GB" xml:id="id2"> + <lambda xml:lang="no"/> + <gamma content="attribute-value" xml:lang="en-GB" xml:id="id3"> + <mu xml:lang="no-nb"/> + <eta xml:lang="en-GB" xml:id="id4"> + <zeta xml:lang="en-GB" xml:id="id5"/> + <epsilon/> + <chi abort="another attribute value" xml:lang="no" xml:id="id6"/> + <epsilon number="123456789" xml:lang="no-nb" xml:id="id7"/> + <iota and="this.nodeValue" xml:lang="en-US"/> + <mu string="this.nodeValue" xml:id="id8"/> + <upsilon string="_blank" xml:lang="en-GB" xml:id="id9"> + <green>This text must be green</green> + </upsilon> + </eta> + </gamma> + </theta> + </gamma> + </tree> + </test> + <test> + <xpath>//eta[@true="100%"]//mu[@xml:lang="no"][not(following-sibling::*)]/omega[@string][@xml:lang="nb"][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::xi[@xml:lang="nb"][@xml:id="id1"][not(following-sibling::*)]/xi[not(following-sibling::*)]//rho[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[following-sibling::kappa[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@delete="attribute"][preceding-sibling::*[position() = 2]][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::nu[starts-with(concat(@abort,"-"),"123456789-")][@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 4]]//eta[contains(concat(@class,"$"),"is-is-att-value$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@attrib][@xml:id="id5"][preceding-sibling::*[position() = 1]]/iota[not(following-sibling::*)]/beta[@string][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]/omega[not(preceding-sibling::*)]][position() = 1]]][position() = 1]]]]]]</xpath> + <tree> + <eta true="100%"> + <mu xml:lang="no"> + <omega string="solid 1px green" xml:lang="nb"/> + <nu/> + <omega xml:lang="en-GB"/> + <xi xml:lang="nb" xml:id="id1"> + <xi> + <rho xml:lang="en"> + <omicron/> + <kappa xml:id="id2"/> + <nu delete="attribute"/> + <alpha xml:id="id3"/> + <nu abort="123456789" xml:lang="en" xml:id="id4"> + <eta class="this-is-att-value"/> + <beta attrib="100%" xml:id="id5"> + <iota> + <beta string="123456789" xml:lang="en" xml:id="id6"> + <omega> + <green>This text must be green</green> + </omega> + </beta> + </iota> + </beta> + </nu> + </rho> + </xi> + </xi> + </mu> + </eta> + </tree> + </test> + <test> + <xpath>//zeta[@attribute][@xml:lang="en-GB"]//gamma[@string][@xml:lang="en"][not(preceding-sibling::*)]//mu[starts-with(@name,"tru")][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::nu[starts-with(concat(@content,"-"),"true-")][@xml:id="id2"][following-sibling::iota[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::iota[@true][not(child::node())][following-sibling::omicron[@abort][@xml:id="id4"][preceding-sibling::*[position() = 4]]//theta[starts-with(@insert,"at")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@xml:id="id6"]//mu[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::eta[contains(concat(@desciption,"$"),"reen$")][@xml:lang="no-nb"][not(child::node())][following-sibling::eta[starts-with(concat(@attrib,"-"),"attribute-")][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::mu[@xml:id="id8"][following-sibling::lambda[not(following-sibling::*)]/sigma[@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="no"][@xml:id="id9"]/omega[@token][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="nb"]//lambda[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::pi[contains(@token,"x ")][preceding-sibling::*[position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <zeta attribute="attribute-value" xml:lang="en-GB"> + <gamma string="this.nodeValue" xml:lang="en"> + <mu name="true" xml:id="id1"/> + <nu content="true" xml:id="id2"/> + <iota xml:id="id3"/> + <iota true="solid 1px green"/> + <omicron abort="another attribute value" xml:id="id4"> + <theta insert="attribute-value" xml:lang="en-GB" xml:id="id5"> + <theta xml:id="id6"> + <mu xml:lang="no"/> + <eta desciption="solid 1px green" xml:lang="no-nb"/> + <eta attrib="attribute" xml:id="id7"/> + <mu xml:id="id8"/> + <lambda> + <sigma xml:lang="nb"/> + <theta xml:lang="no" xml:id="id9"> + <omega token="attribute value" xml:lang="no-nb"/> + <psi xml:lang="nb"> + <lambda/> + <pi token="solid 1px green"> + <green>This text must be green</green> + </pi> + </psi> + </theta> + </lambda> + </theta> + </theta> + </omicron> + </gamma> + </zeta> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="nb"][@xml:id="id1"]//iota[contains(concat(@token,"$"),"lank$")][@xml:lang="en"][following-sibling::sigma[starts-with(concat(@token,"-"),"another attribute value-")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][not(child::node())][following-sibling::sigma[@abort][@xml:lang="no"][not(child::node())][following-sibling::rho[not(child::node())][following-sibling::kappa[@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::gamma[@string="100%"][preceding-sibling::*[position() = 5]][following-sibling::epsilon[preceding-sibling::*[position() = 6]]//tau[@xml:id="id3"][not(following-sibling::*)]/beta[starts-with(@and,"fa")][not(following-sibling::*)]/nu[@class][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[contains(concat(@insert,"$"),"this.nodeValue$")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::mu[preceding-sibling::*[position() = 1]][following-sibling::chi[contains(concat(@attrib,"$"),"ute$")][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=4]][following-sibling::*[@xml:id="id7"][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[@xml:lang="no"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=2]][following-sibling::kappa[@xml:lang="en-US"][preceding-sibling::*[position() = 5]][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id8"][not(following-sibling::*)]/kappa[starts-with(concat(@string,"-"),"100%-")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[contains(concat(@content,"$"),"deValue$")][@xml:lang="no"][@xml:id="id9"][not(following-sibling::*)]/theta[contains(@object,"0")][not(following-sibling::*)]//lambda[starts-with(concat(@class,"-"),"this.nodeValue-")][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[starts-with(@insert,"_blan")][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta xml:lang="nb" xml:id="id1"> + <iota token="_blank" xml:lang="en"/> + <sigma token="another attribute value" xml:id="id2"/> + <sigma abort="solid 1px green" xml:lang="no"/> + <rho/> + <kappa xml:lang="nb"/> + <gamma string="100%"/> + <epsilon> + <tau xml:id="id3"> + <beta and="false"> + <nu class="_blank" xml:lang="en" xml:id="id4"> + <phi insert="this.nodeValue" xml:lang="en-GB" xml:id="id5"/> + <mu/> + <chi attrib="attribute" xml:lang="no" xml:id="id6"/> + <any xml:id="id7"/> + <rho xml:lang="no"/> + <kappa xml:lang="en-US"/> + <lambda xml:lang="en-US" xml:id="id8"> + <kappa string="100%" xml:lang="no-nb"> + <omicron content="this.nodeValue" xml:lang="no" xml:id="id9"> + <theta object="100%"> + <lambda class="this.nodeValue"/> + <xi insert="_blank"> + <green>This text must be green</green> + </xi> + </theta> + </omicron> + </kappa> + </lambda> + </nu> + </beta> + </tau> + </epsilon> + </beta> + </tree> + </test> + <test> + <xpath>//theta[contains(concat(@content,"$"),"is.nodeValue$")][@xml:lang="en-US"][@xml:id="id1"]//gamma[starts-with(@or,"t")][@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::beta[@xml:id="id2"][not(following-sibling::*)]//iota[starts-with(@and,"s")][not(preceding-sibling::*)]/psi[starts-with(@attr,"solid 1px")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::kappa[@desciption="attribute"][@xml:lang="nb"][@xml:id="id4"]]]</xpath> + <tree> + <theta content="this.nodeValue" xml:lang="en-US" xml:id="id1"> + <gamma or="true" xml:lang="en"/> + <beta xml:id="id2"> + <iota and="solid 1px green"> + <psi attr="solid 1px green" xml:id="id3"/> + <kappa desciption="attribute" xml:lang="nb" xml:id="id4"> + <green>This text must be green</green> + </kappa> + </iota> + </beta> + </theta> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="nb"]/omicron[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]//xi[contains(concat(@data,"$"),"e$")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[contains(@attribute,"tt-value")][@xml:lang="nb"]/beta[@xml:id="id3"][not(preceding-sibling::*)]/mu[@src][@xml:id="id4"][not(following-sibling::*)]/kappa[@number][@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::eta[@xml:id="id6"][not(following-sibling::*)]/theta[@xml:id="id7"][not(child::node())][following-sibling::theta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::lambda[starts-with(concat(@or,"-"),"another attribute value-")][@xml:lang="en"][following-sibling::xi[@false][@xml:id="id8"][preceding-sibling::*[position() = 3]]//upsilon[@number][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="en"][not(child::node())][following-sibling::eta[@xml:lang="no-nb"]//eta[not(child::node())][following-sibling::eta[@number][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[@src][@xml:id="id10"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <theta xml:lang="nb"> + <omicron xml:lang="nb"/> + <rho xml:lang="en-US" xml:id="id1"> + <xi data="this-is-att-value" xml:lang="no-nb" xml:id="id2"/> + <zeta attribute="this-is-att-value" xml:lang="nb"> + <beta xml:id="id3"> + <mu src="this-is-att-value" xml:id="id4"> + <kappa number="true" xml:lang="nb" xml:id="id5"/> + <eta xml:id="id6"> + <theta xml:id="id7"/> + <theta xml:lang="en-US"/> + <lambda or="another attribute value" xml:lang="en"/> + <xi false="content" xml:id="id8"> + <upsilon number="content" xml:id="id9"/> + <iota xml:lang="en"/> + <eta xml:lang="no-nb"> + <eta/> + <eta number="content"/> + <tau src="100%" xml:id="id10"> + <green>This text must be green</green> + </tau> + </eta> + </xi> + </eta> + </mu> + </beta> + </zeta> + </rho> + </theta> + </tree> + </test> + <test> + <xpath>//mu[contains(concat(@name,"$"),"se$")][@xml:lang="no-nb"][@xml:id="id1"]//alpha[@or]/phi[@att="true"][@xml:lang="no-nb"][not(child::node())][following-sibling::beta/gamma[@att][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@insert][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@true][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:id="id3"][following-sibling::omega[contains(concat(@attrib,"$")," value$")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::mu[@abort][@xml:id="id5"][following-sibling::delta[@xml:lang="nb"][preceding-sibling::*[position() = 3]]/iota[@abort][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)]//sigma[@data][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[starts-with(@attrib,"12")][@xml:id="id9"]/pi[@xml:lang="en"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::delta[@xml:lang="en"][@xml:id="id11"][not(child::node())][following-sibling::gamma[@xml:id="id12"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu name="false" xml:lang="no-nb" xml:id="id1"> + <alpha or="attribute-value"> + <phi att="true" xml:lang="no-nb"/> + <beta> + <gamma att="content" xml:id="id2"/> + <omicron insert="this.nodeValue" xml:lang="no"> + <chi true="100%" xml:lang="en-GB"> + <chi xml:id="id3"/> + <omega attrib="another attribute value" xml:id="id4"/> + <mu abort="attribute" xml:id="id5"/> + <delta xml:lang="nb"> + <iota abort="false" xml:lang="en" xml:id="id6"> + <sigma data="100%" xml:lang="no" xml:id="id7"> + <phi xml:lang="en" xml:id="id8"> + <zeta attrib="123456789" xml:id="id9"> + <pi xml:lang="en" xml:id="id10"> + <omega/> + <delta xml:lang="en" xml:id="id11"/> + <gamma xml:id="id12"> + <green>This text must be green</green> + </gamma> + </pi> + </zeta> + </phi> + </sigma> + </iota> + </delta> + </chi> + </omicron> + </beta> + </alpha> + </mu> + </tree> + </test> + <test> + <xpath>//rho/nu[not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][not(following-sibling::*)]/mu[@xml:lang="no-nb"][not(preceding-sibling::*)]//theta[contains(concat(@number,"$"),".nodeValue$")][@xml:lang="nb"][@xml:id="id1"][not(child::node())][following-sibling::beta[@and="attribute value"][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 2]]//sigma[@attr][@xml:lang="nb"][not(following-sibling::*)]//pi[@content][@xml:id="id3"][not(preceding-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <rho> + <nu/> + <psi xml:lang="en-GB"> + <mu xml:lang="no-nb"> + <theta number="this.nodeValue" xml:lang="nb" xml:id="id1"/> + <beta and="attribute value" xml:lang="en-US"/> + <delta xml:id="id2"> + <sigma attr="content" xml:lang="nb"> + <pi content="100%" xml:id="id3"> + <green>This text must be green</green> + </pi> + </sigma> + </delta> + </mu> + </psi> + </rho> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]/mu[@xml:id="id2"]/sigma[not(following-sibling::*)]//epsilon[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@and="attribute"][@xml:id="id4"][following-sibling::sigma[contains(@false,"ue")][@xml:id="id5"][preceding-sibling::*[position() = 1]]//iota[@insert][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[starts-with(concat(@attr,"-"),"100%-")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/zeta[@delete][@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::sigma[@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[@xml:id="id10"][not(following-sibling::*)]/pi[contains(concat(@string,"$"),"d 1px green$")][@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)]//psi[@xml:id="id12"]//zeta[not(preceding-sibling::*)][not(preceding-sibling::zeta or following-sibling::zeta)]/eta[@attribute][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:id="id13"]//kappa[@and][@xml:lang="en"][not(following-sibling::*)]/alpha[@abort][@xml:id="id14"]//phi[contains(@title,"ute value")][not(following-sibling::*)]/xi[@xml:lang="no-nb"][@xml:id="id15"][not(following-sibling::*)]/chi[contains(concat(@data,"$"),"ue$")][@xml:lang="no-nb"]//upsilon[@xml:id="id16"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@xml:id="id17"]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <sigma xml:id="id1"> + <mu xml:id="id2"> + <sigma> + <epsilon xml:lang="nb" xml:id="id3"> + <phi and="attribute" xml:id="id4"/> + <sigma false="attribute-value" xml:id="id5"> + <iota insert="content" xml:id="id6"/> + <chi attr="100%" xml:id="id7"/> + <beta> + <zeta delete="this.nodeValue" xml:lang="no-nb" xml:id="id8"/> + <sigma xml:lang="en-GB" xml:id="id9"> + <tau xml:id="id10"> + <pi string="solid 1px green" xml:lang="no-nb" xml:id="id11"> + <psi xml:id="id12"> + <zeta> + <eta attribute="another attribute value" xml:lang="en-US"/> + <chi xml:id="id13"> + <kappa and="123456789" xml:lang="en"> + <alpha abort="123456789" xml:id="id14"> + <phi title="attribute value"> + <xi xml:lang="no-nb" xml:id="id15"> + <chi data="attribute-value" xml:lang="no-nb"> + <upsilon xml:id="id16"> + <psi xml:id="id17"> + <green>This text must be green</green> + </psi> + </upsilon> + </chi> + </xi> + </phi> + </alpha> + </kappa> + </chi> + </zeta> + </psi> + </pi> + </tau> + </sigma> + </beta> + </sigma> + </epsilon> + </sigma> + </mu> + </sigma> + </tree> + </test> + <test> + <xpath>//kappa[@xml:id="id1"]/eta[@xml:id="id2"][not(preceding-sibling::*)]//phi[@att="true"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[not(child::node())][following-sibling::omega[@xml:lang="en"][following-sibling::gamma[@xml:id="id4"][following-sibling::alpha[contains(concat(@class,"$"),"lank$")][@xml:lang="en-GB"]/iota[contains(concat(@insert,"$"),"123456789$")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(preceding-sibling::iota)][not(child::node())][following-sibling::rho[contains(@src,"k")][preceding-sibling::*[position() = 1]]/alpha[@string][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::eta[@xml:id="id5"][preceding-sibling::*[position() = 1]]//mu[@insert="this.nodeValue"][not(following-sibling::*)]/pi[contains(concat(@attribute,"$"),"is-att-value$")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="no-nb"][@xml:id="id7"][not(preceding-sibling::*)]//epsilon[@xml:lang="en"][@xml:id="id8"]//omicron[not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::omega[@xml:id="id9"][following-sibling::omega[@and="true"][@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::delta[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="en-US"][following-sibling::nu[following-sibling::phi[@string][@xml:lang="no-nb"][not(following-sibling::*)]/upsilon[contains(concat(@att,"$")," attribute value$")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)]]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <kappa xml:id="id1"> + <eta xml:id="id2"> + <phi att="true" xml:id="id3"/> + <xi/> + <omega xml:lang="en"/> + <gamma xml:id="id4"/> + <alpha class="_blank" xml:lang="en-GB"> + <iota insert="123456789"/> + <rho src="_blank"> + <alpha string="solid 1px green" xml:lang="en-US"/> + <eta xml:id="id5"> + <mu insert="this.nodeValue"> + <pi attribute="this-is-att-value" xml:lang="no-nb" xml:id="id6"> + <mu xml:lang="no-nb" xml:id="id7"> + <epsilon xml:lang="en" xml:id="id8"> + <omicron/> + <omega xml:id="id9"/> + <omega and="true" xml:id="id10"/> + <delta content="attribute" xml:lang="en-US"/> + <nu/> + <phi string="123456789" xml:lang="no-nb"> + <upsilon att="another attribute value" xml:lang="en-GB"> + <any xml:lang="no-nb"> + <omega xml:lang="nb" xml:id="id11"> + <green>This text must be green</green> + </omega> + </any> + </upsilon> + </phi> + </epsilon> + </mu> + </pi> + </mu> + </eta> + </rho> + </alpha> + </eta> + </kappa> + </tree> + </test> + <test> + <xpath>//omega/rho[starts-with(concat(@content,"-"),"solid 1px green-")][not(preceding-sibling::*)][not(following-sibling::*)]/iota[contains(@or,"a")][@xml:id="id1"][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@false][@xml:lang="en"][following-sibling::zeta[contains(concat(@title,"$"),"this-is-att-value$")][@xml:lang="nb"][not(following-sibling::*)]//theta[@attr][not(preceding-sibling::*)]/beta[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@string][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[contains(@att,"k")][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::alpha[@false="true"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id7"]//delta[contains(@insert,"bute value")][@xml:lang="en-US"][not(following-sibling::*)]/eta[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::xi[@att][preceding-sibling::*[position() = 1]]/xi[@xml:lang="no"][not(child::node())][following-sibling::alpha[@or="this.nodeValue"]//delta[@title="true"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="no"]/omega[@xml:id="id9"]/sigma[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <omega> + <rho content="solid 1px green"> + <iota or="_blank" xml:id="id1"/> + <kappa/> + <beta false="123456789" xml:lang="en"/> + <zeta title="this-is-att-value" xml:lang="nb"> + <theta attr="solid 1px green"> + <beta xml:lang="nb"/> + <gamma string="true" xml:lang="no" xml:id="id2"> + <phi xml:lang="en-US" xml:id="id3"> + <pi att="_blank" xml:id="id4"> + <beta xml:id="id5"/> + <alpha false="true" xml:id="id6"/> + <epsilon xml:lang="no-nb" xml:id="id7"> + <delta insert="attribute value" xml:lang="en-US"> + <eta xml:lang="no"/> + <xi att="attribute value"> + <xi xml:lang="no"/> + <alpha or="this.nodeValue"> + <delta title="true" xml:id="id8"/> + <iota xml:lang="no"> + <omega xml:id="id9"> + <sigma> + <green>This text must be green</green> + </sigma> + </omega> + </iota> + </alpha> + </xi> + </delta> + </epsilon> + </pi> + </phi> + </gamma> + </theta> + </zeta> + </rho> + </omega> + </tree> + </test> + <test> + <xpath>//beta[@xml:id="id1"]//chi[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::theta[@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//theta[starts-with(@string,"100")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[not(child::node())][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]//tau[@attr][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@xml:id="id6"][not(preceding-sibling::*)]/zeta[@title="123456789"][@xml:id="id7"][not(preceding-sibling::*)]//xi[@xml:lang="nb"][not(preceding-sibling::*)]//lambda[starts-with(concat(@object,"-"),"false-")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]]/omega[@true][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::delta[@xml:id="id10"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[contains(concat(@true,"$"),"ue$")][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <beta xml:id="id1"> + <chi xml:lang="en-GB" xml:id="id2"> + <epsilon xml:lang="no"/> + <theta xml:lang="no" xml:id="id3"> + <theta string="100%" xml:lang="en"/> + <chi/> + <omicron xml:lang="en-US" xml:id="id4"> + <tau attr="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <omicron xml:id="id6"> + <zeta title="123456789" xml:id="id7"> + <xi xml:lang="nb"> + <lambda object="false"/> + <omicron xml:lang="en-US" xml:id="id8"> + <omega true="_blank" xml:id="id9"/> + <delta xml:id="id10"/> + <theta true="true"> + <green>This text must be green</green> + </theta> + </omicron> + </xi> + </zeta> + </omicron> + </tau> + </omicron> + </theta> + </chi> + </beta> + </tree> + </test> + <test> + <xpath>//nu[starts-with(@name,"123456")][@xml:lang="nb"]//gamma[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id2"]/lambda[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)]//delta[starts-with(concat(@attr,"-"),"another attribute value-")][@xml:lang="en-US"][not(following-sibling::*)]//zeta[@xml:lang="en"][not(following-sibling::*)]//theta[starts-with(concat(@number,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::epsilon[contains(@src,"t")][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@att][@xml:id="id6"][not(child::node())][following-sibling::psi[@xml:lang="en"]//theta[@attribute][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::lambda[@data="attribute value"][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[@object]//mu[@xml:lang="en-GB"][@xml:id="id8"]//tau[@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)]//delta[@xml:lang="en"][not(preceding-sibling::*)]//*[@xml:lang="en-US"][@xml:id="id10"][not(following-sibling::*)]/pi[@xml:lang="no"][@xml:id="id11"][not(child::node())][following-sibling::zeta[@xml:lang="nb"][@xml:id="id12"][preceding-sibling::*[position() = 1]]//gamma[not(preceding-sibling::*)][not(following-sibling::gamma)]/theta[contains(@attrib,"e")][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[starts-with(concat(@or,"-"),"another attribute value-")][@xml:id="id13"][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <nu name="123456789" xml:lang="nb"> + <gamma xml:lang="nb" xml:id="id1"/> + <delta xml:lang="en-GB" xml:id="id2"> + <lambda xml:lang="no" xml:id="id3"> + <delta attr="another attribute value" xml:lang="en-US"> + <zeta xml:lang="en"> + <theta number="attribute-value" xml:lang="nb" xml:id="id4"/> + <epsilon src="content" xml:id="id5"/> + <omicron att="another attribute value" xml:id="id6"/> + <psi xml:lang="en"> + <theta attribute="123456789" xml:id="id7"/> + <lambda data="attribute value" xml:lang="en-GB"> + <nu object="attribute-value"> + <mu xml:lang="en-GB" xml:id="id8"> + <tau xml:lang="en" xml:id="id9"> + <delta xml:lang="en"> + <any xml:lang="en-US" xml:id="id10"> + <pi xml:lang="no" xml:id="id11"/> + <zeta xml:lang="nb" xml:id="id12"> + <gamma> + <theta attrib="this.nodeValue"/> + <mu or="another attribute value" xml:id="id13"> + <green>This text must be green</green> + </mu> + </gamma> + </zeta> + </any> + </delta> + </tau> + </mu> + </nu> + </lambda> + </psi> + </zeta> + </delta> + </lambda> + </delta> + </nu> + </tree> + </test> + <test> + <xpath>//mu[starts-with(concat(@or,"-"),"_blank-")][@xml:id="id1"]//zeta[@xml:lang="en"][not(following-sibling::*)]//upsilon[@xml:id="id2"][not(preceding-sibling::*)]//eta[@true][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[contains(@content,"on")][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@class][@xml:id="id4"][not(preceding-sibling::iota)][not(child::node())][following-sibling::omega[@false][@xml:lang="en-US"][preceding-sibling::*[position() = 2]]//*[@class][@xml:id="id5"][not(following-sibling::*)]/delta[starts-with(concat(@insert,"-"),"this.nodeValue-")][following-sibling::omega[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:lang="en-US"][@xml:id="id7"][not(following-sibling::*)]//lambda[starts-with(concat(@content,"-"),"this-")][@xml:lang="en-US"][following-sibling::*[position()=4]][not(child::node())][following-sibling::alpha[starts-with(@class,"attribute-v")][preceding-sibling::*[position() = 1]][following-sibling::theta[contains(@false,"bu")][@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 2]][following-sibling::delta[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::beta[@name="_blank"][@xml:id="id9"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//gamma[@xml:lang="en-GB"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::delta[contains(concat(@desciption,"$"),"-is-att-value$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[contains(concat(@attr,"$"),"56789$")][@xml:lang="no"][preceding-sibling::*[position() = 2]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <mu or="_blank" xml:id="id1"> + <zeta xml:lang="en"> + <upsilon xml:id="id2"> + <eta true="true" xml:id="id3"> + <rho content="content"/> + <iota class="attribute" xml:id="id4"/> + <omega false="123456789" xml:lang="en-US"> + <any class="attribute value" xml:id="id5"> + <delta insert="this.nodeValue"/> + <omega xml:lang="en-GB" xml:id="id6"/> + <beta xml:lang="en-US" xml:id="id7"> + <lambda content="this-is-att-value" xml:lang="en-US"/> + <alpha class="attribute-value"/> + <theta false="attribute" xml:lang="nb" xml:id="id8"/> + <delta/> + <beta name="_blank" xml:id="id9"> + <gamma xml:lang="en-GB" xml:id="id10"/> + <delta desciption="this-is-att-value"/> + <kappa attr="123456789" xml:lang="no"> + <green>This text must be green</green> + </kappa> + </beta> + </beta> + </any> + </omega> + </eta> + </upsilon> + </zeta> + </mu> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="no-nb"]/*[contains(@class,"k")][@xml:lang="en-GB"]/beta[@desciption="false"][@xml:lang="en-GB"][not(preceding-sibling::*)][not(preceding-sibling::beta)][not(child::node())][following-sibling::sigma[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::pi[contains(concat(@title,"$"),"t$")][@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)]/omega[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@xml:lang="en"][@xml:id="id2"]//mu[contains(@and,"bute va")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[contains(concat(@delete,"$"),"100%$")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::pi[@xml:id="id5"][not(child::node())][following-sibling::phi[contains(@src,"x green")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=6]][following-sibling::tau[contains(@object,"conte")][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=5]][following-sibling::phi[following-sibling::xi[@false="content"][@xml:lang="en-GB"][@xml:id="id7"][preceding-sibling::*[position() = 5]][following-sibling::phi[@xml:lang="no"][@xml:id="id8"][preceding-sibling::*[position() = 6]][following-sibling::*[position()=2]][following-sibling::tau[@xml:id="id9"][preceding-sibling::*[position() = 7]][following-sibling::eta[@xml:id="id10"]//chi[@xml:id="id11"][not(preceding-sibling::*)][following-sibling::alpha[@false][@xml:lang="no"][@xml:id="id12"][not(following-sibling::*)]/iota[not(child::node())][following-sibling::zeta[@xml:lang="no"][@xml:id="id13"][not(following-sibling::*)]//beta[contains(@att,"lue")][@xml:lang="en-US"]/chi[@xml:lang="en-US"][@xml:id="id14"][not(preceding-sibling::*)][position() = 1]]]]][position() = 1]]]]][position() = 1]]]]]</xpath> + <tree> + <any xml:lang="no-nb"> + <any class="_blank" xml:lang="en-GB"> + <beta desciption="false" xml:lang="en-GB"/> + <sigma xml:lang="nb"/> + <pi title="content" xml:lang="no" xml:id="id1"> + <omega xml:lang="no-nb"> + <beta xml:lang="en" xml:id="id2"> + <mu and="attribute value" xml:lang="nb" xml:id="id3"> + <lambda delete="100%" xml:lang="en-US" xml:id="id4"/> + <pi xml:id="id5"/> + <phi src="solid 1px green" xml:lang="en-GB"/> + <tau object="content" xml:lang="en" xml:id="id6"/> + <phi/> + <xi false="content" xml:lang="en-GB" xml:id="id7"/> + <phi xml:lang="no" xml:id="id8"/> + <tau xml:id="id9"/> + <eta xml:id="id10"> + <chi xml:id="id11"/> + <alpha false="this.nodeValue" xml:lang="no" xml:id="id12"> + <iota/> + <zeta xml:lang="no" xml:id="id13"> + <beta att="this-is-att-value" xml:lang="en-US"> + <chi xml:lang="en-US" xml:id="id14"> + <green>This text must be green</green> + </chi> + </beta> + </zeta> + </alpha> + </eta> + </mu> + </beta> + </omega> + </pi> + </any> + </any> + </tree> + </test> + <test> + <xpath>//mu[@xml:lang="en"][@xml:id="id1"]/eta[@insert][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)]/delta[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::beta[starts-with(@attribute,"another attr")][@xml:lang="en"][@xml:id="id4"]/alpha[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::zeta[contains(@delete,"78")][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@object][@xml:id="id6"]][position() = 1]]]</xpath> + <tree> + <mu xml:lang="en" xml:id="id1"> + <eta insert="false" xml:lang="en-US" xml:id="id2"> + <delta xml:lang="no" xml:id="id3"/> + <beta attribute="another attribute value" xml:lang="en" xml:id="id4"> + <alpha xml:lang="en-US"/> + <zeta delete="123456789" xml:id="id5"/> + <xi object="true" xml:id="id6"> + <green>This text must be green</green> + </xi> + </beta> + </eta> + </mu> + </tree> + </test> + <test> + <xpath>//sigma[@number="content"][@xml:id="id1"]//xi[starts-with(concat(@attr,"-"),"this-")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@or][not(preceding-sibling::upsilon)][following-sibling::rho[@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]//psi[@xml:lang="en"][@xml:id="id3"]//beta[@xml:lang="en"][@xml:id="id4"][following-sibling::xi[@xml:lang="nb"][preceding-sibling::*[position() = 1]]/alpha[not(preceding-sibling::*)][following-sibling::xi[starts-with(concat(@token,"-"),"attribute-")][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[contains(@title,"ibute")][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]/gamma[not(preceding-sibling::*)][following-sibling::pi[starts-with(@attr,"s")][@xml:lang="no-nb"][@xml:id="id7"][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/gamma[starts-with(concat(@string,"-"),"_blank-")][not(preceding-sibling::*)]/beta[@desciption][@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omega[contains(@title,"ent")][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="en-US"][not(following-sibling::*)]/eta[contains(@src,"tent")][@xml:lang="no"][@xml:id="id9"][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <sigma number="content" xml:id="id1"> + <xi attr="this-is-att-value" xml:lang="no-nb"/> + <upsilon or="false"/> + <rho xml:lang="nb" xml:id="id2"> + <psi xml:lang="en" xml:id="id3"> + <beta xml:lang="en" xml:id="id4"/> + <xi xml:lang="nb"> + <alpha/> + <xi token="attribute" xml:id="id5"/> + <xi title="attribute" xml:lang="en" xml:id="id6"> + <gamma/> + <pi attr="solid 1px green" xml:lang="no-nb" xml:id="id7"/> + <psi> + <gamma string="_blank"> + <beta desciption="this-is-att-value" xml:lang="no" xml:id="id8"/> + <omega title="content" xml:lang="no"/> + <phi xml:lang="en-US"> + <eta src="content" xml:lang="no" xml:id="id9"> + <green>This text must be green</green> + </eta> + </phi> + </gamma> + </psi> + </xi> + </xi> + </psi> + </rho> + </sigma> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@string,"tr")][@xml:lang="en-US"]/chi[@attribute="this.nodeValue"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::chi[not(child::node())][following-sibling::chi[starts-with(concat(@insert,"-"),"false-")][@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]/zeta//upsilon[@data][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[starts-with(@delete,"t")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::mu[not(following-sibling::*)]//iota[contains(concat(@desciption,"$"),"lse$")][@xml:lang="en-GB"][not(following-sibling::*)]//pi[@xml:lang="en"]//pi[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="en"][not(child::node())][following-sibling::chi[@xml:lang="en"][not(child::node())][following-sibling::eta//alpha[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[contains(concat(@insert,"$"),"ute$")][@xml:id="id6"][not(child::node())][following-sibling::lambda[contains(@attribute,"ue")][@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]]/mu[starts-with(concat(@attribute,"-"),"attribute-")][not(following-sibling::*)]//zeta[@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[starts-with(concat(@att,"-"),"solid 1px green-")][preceding-sibling::*[position() = 1]]]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega string="true" xml:lang="en-US"> + <chi attribute="this.nodeValue"/> + <nu xml:lang="nb" xml:id="id1"/> + <chi/> + <chi insert="false" xml:lang="en" xml:id="id2"> + <zeta> + <upsilon data="_blank" xml:id="id3"> + <tau delete="this.nodeValue" xml:lang="en" xml:id="id4"/> + <mu> + <iota desciption="false" xml:lang="en-GB"> + <pi xml:lang="en"> + <pi xml:lang="en-GB" xml:id="id5"> + <rho xml:lang="en"/> + <chi xml:lang="en"/> + <eta> + <alpha xml:lang="nb"> + <phi insert="attribute" xml:id="id6"/> + <lambda attribute="this.nodeValue" xml:lang="no" xml:id="id7"> + <mu attribute="attribute-value"> + <zeta xml:id="id8"/> + <gamma att="solid 1px green"> + <green>This text must be green</green> + </gamma> + </mu> + </lambda> + </alpha> + </eta> + </pi> + </pi> + </iota> + </mu> + </upsilon> + </zeta> + </chi> + </omega> + </tree> + </test> + <test> + <xpath>//beta[@abort="content"]/kappa[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:id="id1"][not(child::node())][following-sibling::rho[contains(@token,"lank")][@xml:lang="no"][preceding-sibling::*[position() = 1]]//nu[@data][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omicron[starts-with(concat(@number,"-"),"attribute-")][not(child::node())][following-sibling::rho[contains(@insert,"1px green")][not(following-sibling::*)]//psi[not(child::node())][following-sibling::beta[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]][position() = 1]]</xpath> + <tree> + <beta abort="content"> + <kappa src="this.nodeValue" xml:id="id1"/> + <rho token="_blank" xml:lang="no"> + <nu data="this.nodeValue"/> + <omicron number="attribute-value"/> + <rho insert="solid 1px green"> + <psi/> + <beta xml:lang="en-US" xml:id="id2"> + <green>This text must be green</green> + </beta> + </rho> + </rho> + </beta> + </tree> + </test> + <test> + <xpath>//theta[@insert][@xml:lang="en-GB"][@xml:id="id1"]/chi[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::zeta[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]//delta[@or="attribute-value"][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::mu[following-sibling::beta[@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <theta insert="this.nodeValue" xml:lang="en-GB" xml:id="id1"> + <chi xml:id="id2"/> + <zeta xml:lang="en-US" xml:id="id3"> + <delta or="attribute-value" xml:lang="en-GB" xml:id="id4"/> + <mu/> + <beta xml:id="id5"> + <green>This text must be green</green> + </beta> + </zeta> + </theta> + </tree> + </test> + <test> + <xpath>//epsilon//lambda[@token][@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::kappa[contains(concat(@att,"$"),"ute$")][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/*[@xml:id="id3"][not(following-sibling::*)]//nu[@xml:lang="nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::omega[@string="false"][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 2]]//beta[@number="true"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(@delete,"attr")][@xml:id="id6"][following-sibling::pi[@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]//chi[@xml:id="id8"][not(following-sibling::*)]//zeta[@and="this-is-att-value"][@xml:lang="no-nb"][@xml:id="id9"][not(following-sibling::*)]/kappa[@xml:id="id10"][following-sibling::beta[following-sibling::*[position()=3]][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id11"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::tau[@xml:id="id12"][following-sibling::omega[starts-with(concat(@attr,"-"),"true-")][@xml:lang="en"][@xml:id="id13"]/nu[@attribute="100%"][@xml:lang="no"][@xml:id="id14"][not(following-sibling::*)]/omicron[@xml:lang="en-GB"][@xml:id="id15"]//beta[starts-with(concat(@true,"-"),"attribute value-")][@xml:id="id16"][following-sibling::*[position()=1]][following-sibling::gamma[starts-with(@title,"s")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]]]</xpath> + <tree> + <epsilon> + <lambda token="solid 1px green" xml:lang="no" xml:id="id1"/> + <kappa att="attribute" xml:id="id2"> + <any xml:id="id3"> + <nu xml:lang="nb"/> + <iota xml:id="id4"/> + <omega string="false" xml:lang="no-nb" xml:id="id5"> + <beta number="true" xml:lang="no-nb"> + <beta delete="attribute value" xml:id="id6"/> + <pi xml:lang="en-US" xml:id="id7"/> + <delta xml:lang="no-nb"> + <chi xml:id="id8"> + <zeta and="this-is-att-value" xml:lang="no-nb" xml:id="id9"> + <kappa xml:id="id10"/> + <beta/> + <sigma xml:lang="en-US" xml:id="id11"/> + <tau xml:id="id12"/> + <omega attr="true" xml:lang="en" xml:id="id13"> + <nu attribute="100%" xml:lang="no" xml:id="id14"> + <omicron xml:lang="en-GB" xml:id="id15"> + <beta true="attribute value" xml:id="id16"/> + <gamma title="solid 1px green" xml:lang="no-nb"> + <green>This text must be green</green> + </gamma> + </omicron> + </nu> + </omega> + </zeta> + </chi> + </delta> + </beta> + </omega> + </any> + </kappa> + </epsilon> + </tree> + </test> + <test> + <xpath>//nu[starts-with(@class,"at")][@xml:lang="nb"][@xml:id="id1"]//mu[@insert][@xml:id="id2"][not(preceding-sibling::*)]/pi[contains(concat(@content,"$"),"k$")]/sigma[not(following-sibling::*)]//rho[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@and][@xml:id="id5"][following-sibling::*[position()=2]][not(preceding-sibling::omicron)][not(child::node())][following-sibling::beta[@class="true"][@xml:lang="nb"][following-sibling::rho[@xml:id="id6"][not(following-sibling::*)]//epsilon[not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/gamma[contains(concat(@src,"$"),"0%$")][@xml:lang="en"][@xml:id="id7"][following-sibling::lambda[starts-with(@desciption,"_bla")][@xml:id="id8"][preceding-sibling::*[position() = 1]]/sigma[@xml:id="id9"][not(following-sibling::*)]//eta[contains(@delete,"nt")][@xml:lang="nb"][@xml:id="id10"][not(following-sibling::*)][not(preceding-sibling::eta)]//alpha[following-sibling::*[position()=3]][following-sibling::upsilon[not(child::node())][following-sibling::omega[@number="solid 1px green"][not(child::node())][following-sibling::omega[@xml:lang="en-US"][@xml:id="id11"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/gamma[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][@xml:id="id12"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <nu class="attribute-value" xml:lang="nb" xml:id="id1"> + <mu insert="solid 1px green" xml:id="id2"> + <pi content="_blank"> + <sigma> + <rho xml:id="id3"/> + <pi xml:id="id4"/> + <omicron and="attribute" xml:id="id5"/> + <beta class="true" xml:lang="nb"/> + <rho xml:id="id6"> + <epsilon/> + <theta xml:lang="no"> + <gamma src="100%" xml:lang="en" xml:id="id7"/> + <lambda desciption="_blank" xml:id="id8"> + <sigma xml:id="id9"> + <eta delete="content" xml:lang="nb" xml:id="id10"> + <alpha/> + <upsilon/> + <omega number="solid 1px green"/> + <omega xml:lang="en-US" xml:id="id11"> + <gamma xml:lang="nb"/> + <nu xml:lang="en-GB" xml:id="id12"> + <green>This text must be green</green> + </nu> + </omega> + </eta> + </sigma> + </lambda> + </theta> + </rho> + </sigma> + </pi> + </mu> + </nu> + </tree> + </test> + <test> + <xpath>//kappa[@class="another attribute value"][@xml:lang="en-GB"][@xml:id="id1"]//nu[contains(concat(@att,"$"),"green$")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]//alpha[contains(@false,"100")][@xml:id="id3"][following-sibling::mu[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::tau[starts-with(concat(@class,"-"),"this.nodeValue-")][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 2]][following-sibling::nu[starts-with(@desciption,"f")][@xml:lang="no"][not(following-sibling::*)]/alpha[contains(concat(@content,"$"),"ue$")][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::eta[@token][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::delta[starts-with(concat(@class,"-"),"100%-")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/iota[starts-with(@true,"thi")][@xml:lang="no"][@xml:id="id8"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[contains(concat(@attrib,"$"),"content$")][@xml:lang="no"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa class="another attribute value" xml:lang="en-GB" xml:id="id1"> + <nu att="solid 1px green" xml:lang="nb" xml:id="id2"> + <alpha false="100%" xml:id="id3"/> + <mu xml:lang="no" xml:id="id4"/> + <tau class="this.nodeValue" xml:lang="en-US" xml:id="id5"/> + <nu desciption="false" xml:lang="no"> + <alpha content="this.nodeValue" xml:lang="nb"/> + <tau xml:lang="no-nb" xml:id="id6"/> + <eta token="another attribute value" xml:lang="en-US" xml:id="id7"/> + <delta class="100%"> + <iota true="this.nodeValue" xml:lang="no" xml:id="id8"/> + <phi attrib="content" xml:lang="no" xml:id="id9"> + <green>This text must be green</green> + </phi> + </delta> + </nu> + </nu> + </kappa> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="no"][@xml:id="id1"]/gamma[contains(concat(@number,"$"),"ue$")][@xml:id="id2"]//beta[@src="true"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omega[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::kappa//alpha[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::kappa[starts-with(concat(@string,"-"),"attribute-")][not(following-sibling::*)]//zeta[@xml:lang="en-US"]//omicron[contains(@abort,"al")][@xml:lang="no"][not(following-sibling::omicron)][not(child::node())][following-sibling::epsilon[@xml:id="id3"][following-sibling::sigma[starts-with(@class,"100")][@xml:lang="en-US"][not(following-sibling::*)]//upsilon[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[contains(@att,"lid 1px gr")][@xml:lang="no-nb"][@xml:id="id5"]//delta[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::theta[@src][@xml:lang="no"][@xml:id="id6"][not(child::node())][following-sibling::upsilon[@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::eta[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/tau[@xml:lang="en"][@xml:id="id9"][following-sibling::*[position()=2]][following-sibling::phi[@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@insert][not(following-sibling::*)]]]]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <eta xml:lang="no" xml:id="id1"> + <gamma number="true" xml:id="id2"> + <beta src="true"/> + <omega src="this.nodeValue" xml:lang="en"/> + <kappa> + <alpha xml:lang="no"/> + <kappa string="attribute"> + <zeta xml:lang="en-US"> + <omicron abort="false" xml:lang="no"/> + <epsilon xml:id="id3"/> + <sigma class="100%" xml:lang="en-US"> + <upsilon xml:lang="nb" xml:id="id4"> + <delta att="solid 1px green" xml:lang="no-nb" xml:id="id5"> + <delta/> + <theta src="attribute value" xml:lang="no" xml:id="id6"/> + <upsilon xml:lang="en-GB" xml:id="id7"/> + <eta xml:lang="en-GB" xml:id="id8"> + <tau xml:lang="en" xml:id="id9"/> + <phi xml:lang="nb" xml:id="id10"/> + <nu insert="true"> + <green>This text must be green</green> + </nu> + </eta> + </delta> + </upsilon> + </sigma> + </zeta> + </kappa> + </kappa> + </gamma> + </eta> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="nb"][@xml:id="id1"]//phi[starts-with(@or,"12345")][@xml:lang="en-US"][following-sibling::*[position()=4]][following-sibling::kappa[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@xml:lang="no-nb"][following-sibling::beta[@xml:id="id3"]/zeta[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@attr="attribute-value"][preceding-sibling::*[position() = 1]]//upsilon[contains(@delete,"e")][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[@xml:lang="en-US"][@xml:id="id5"][following-sibling::gamma[@name]//alpha[@xml:id="id6"]/phi[@insert][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="en-US"][@xml:id="id7"]/omicron[@attrib][following-sibling::zeta[@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:lang="no"][@xml:id="id9"][not(following-sibling::*)]/beta[not(child::node())][following-sibling::tau[contains(@class,"89")][@xml:lang="no"][@xml:id="id10"]//iota[@data][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::theta[@token="another attribute value"][@xml:lang="en-US"][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <any xml:lang="nb" xml:id="id1"> + <phi or="123456789" xml:lang="en-US"/> + <kappa xml:lang="en"/> + <any xml:lang="nb" xml:id="id2"/> + <iota xml:lang="no-nb"/> + <beta xml:id="id3"> + <zeta xml:lang="en-US"/> + <delta attr="attribute-value"> + <upsilon delete="true" xml:id="id4"/> + <epsilon xml:lang="en-US" xml:id="id5"/> + <gamma name="123456789"> + <alpha xml:id="id6"> + <phi insert="solid 1px green" xml:lang="en-US"/> + <psi xml:lang="en"/> + <nu false="123456789" xml:lang="en-US" xml:id="id7"> + <omicron attrib="123456789"/> + <zeta xml:id="id8"/> + <iota xml:lang="no" xml:id="id9"> + <beta/> + <tau class="123456789" xml:lang="no" xml:id="id10"> + <iota data="123456789" xml:lang="no-nb"/> + <theta token="another attribute value" xml:lang="en-US" xml:id="id11"> + <green>This text must be green</green> + </theta> + </tau> + </iota> + </nu> + </alpha> + </gamma> + </delta> + </beta> + </any> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="nb"]//*[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::lambda[@attrib][preceding-sibling::*[position() = 1]][following-sibling::tau[contains(concat(@desciption,"$"),"789$")][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//rho[not(preceding-sibling::*)]/gamma[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:id="id4"][not(child::node())][following-sibling::nu[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::*[@xml:lang="en-US"][not(child::node())][following-sibling::pi[@xml:id="id5"][following-sibling::omicron[contains(concat(@attrib,"$"),"alse$")][@xml:lang="en"][not(child::node())][following-sibling::xi[@name="content"][@xml:lang="en-US"][preceding-sibling::*[position() = 6]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <any xml:lang="nb"> + <any xml:id="id1"/> + <lambda attrib="solid 1px green"/> + <tau desciption="123456789" xml:lang="en" xml:id="id2"> + <rho> + <gamma xml:lang="no-nb" xml:id="id3"/> + <beta xml:id="id4"/> + <nu xml:lang="nb"/> + <any xml:lang="en-US"/> + <pi xml:id="id5"/> + <omicron attrib="false" xml:lang="en"/> + <xi name="content" xml:lang="en-US"> + <green>This text must be green</green> + </xi> + </rho> + </tau> + </any> + </tree> + </test> + <test> + <xpath>//kappa[@name][@xml:lang="no"][@xml:id="id1"]/zeta[starts-with(@or,"attribu")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[contains(concat(@and,"$"),"his-is-att-value$")][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)]//omicron[@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]//rho[starts-with(concat(@false,"-"),"attribute value-")][@xml:id="id5"][not(preceding-sibling::*)]/omega[starts-with(concat(@attrib,"-"),"attribute-")][following-sibling::*[position()=2]][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::rho[starts-with(concat(@abort,"-"),"content-")][preceding-sibling::*[position() = 2]]//kappa[@false="false"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:id="id7"][preceding-sibling::*[position() = 1]]/delta[@xml:id="id8"]//sigma[contains(@false,"x gree")][@xml:lang="en-US"][@xml:id="id9"][following-sibling::pi[@xml:lang="no-nb"][not(following-sibling::*)]/upsilon[contains(concat(@token,"$"),"solid 1px green$")][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="en"]/upsilon[@xml:lang="no"][not(following-sibling::*)]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <kappa name="solid 1px green" xml:lang="no" xml:id="id1"> + <zeta or="attribute-value" xml:id="id2"> + <iota and="this-is-att-value" xml:lang="no" xml:id="id3"> + <omicron xml:lang="no" xml:id="id4"> + <rho false="attribute value" xml:id="id5"> + <omega attrib="attribute"/> + <delta xml:lang="en-GB" xml:id="id6"/> + <rho abort="content"> + <kappa false="false"/> + <eta xml:id="id7"> + <delta xml:id="id8"> + <sigma false="solid 1px green" xml:lang="en-US" xml:id="id9"/> + <pi xml:lang="no-nb"> + <upsilon token="solid 1px green"/> + <upsilon xml:lang="en"> + <upsilon xml:lang="no"> + <green>This text must be green</green> + </upsilon> + </upsilon> + </pi> + </delta> + </eta> + </rho> + </rho> + </omicron> + </iota> + </zeta> + </kappa> + </tree> + </test> + <test> + <xpath>//gamma[contains(@attrib,"lse")][@xml:lang="en-US"][@xml:id="id1"]//xi[contains(@string,"t")][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[contains(@attr,"ri")][@xml:id="id2"]/theta[contains(@data,"tent")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@true][@xml:lang="no-nb"][not(following-sibling::*)]/kappa[@false][@xml:lang="no"][following-sibling::*[position()=2]][following-sibling::tau[@or][@xml:id="id4"][not(child::node())][following-sibling::omicron[@attrib="content"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/sigma[contains(concat(@object,"$"),"attribute$")][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::chi[not(following-sibling::*)]//*[@xml:lang="en"][@xml:id="id5"]/mu[contains(concat(@name,"$"),"tribute value$")][not(child::node())][following-sibling::xi[@xml:id="id6"][preceding-sibling::*[position() = 1]]/beta[starts-with(@delete,"att")][@xml:id="id7"][not(child::node())][following-sibling::delta[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@title][@xml:id="id10"][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <gamma attrib="false" xml:lang="en-US" xml:id="id1"> + <xi string="this-is-att-value"/> + <xi attr="attribute value" xml:id="id2"> + <theta data="content" xml:id="id3"/> + <psi true="another attribute value" xml:lang="no-nb"> + <kappa false="100%" xml:lang="no"/> + <tau or="100%" xml:id="id4"/> + <omicron attrib="content"> + <sigma object="attribute"/> + <delta xml:lang="en-US"/> + <chi> + <any xml:lang="en" xml:id="id5"> + <mu name="another attribute value"/> + <xi xml:id="id6"> + <beta delete="attribute value" xml:id="id7"/> + <delta xml:lang="en-US" xml:id="id8"> + <kappa xml:id="id9"/> + <pi title="this.nodeValue" xml:id="id10"> + <green>This text must be green</green> + </pi> + </delta> + </xi> + </any> + </chi> + </omicron> + </psi> + </xi> + </gamma> + </tree> + </test> + <test> + <xpath>//tau[@name][@xml:lang="no"][@xml:id="id1"]/nu[@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 1]]//pi[@data="attribute"][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::epsilon[starts-with(@src,"this.")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(@token,"a")][@xml:id="id4"][following-sibling::theta[contains(concat(@class,"$"),"100%$")][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=3]][following-sibling::alpha[starts-with(@attrib,"at")][following-sibling::*[position()=2]][following-sibling::eta[@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 5]][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[preceding-sibling::*[position() = 6]][not(following-sibling::*)]//*[contains(concat(@att,"$"),"true$")][following-sibling::omicron[not(following-sibling::*)][not(preceding-sibling::omicron)]/gamma[@token="solid 1px green"][@xml:lang="no-nb"][not(following-sibling::*)]//xi[starts-with(@att,"attribute-va")][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[starts-with(concat(@token,"-"),"123456789-")][@xml:id="id8"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <tau name="content" xml:lang="no" xml:id="id1"> + <nu xml:lang="nb" xml:id="id2"/> + <pi> + <pi data="attribute" xml:lang="en-GB" xml:id="id3"/> + <epsilon src="this.nodeValue" xml:lang="nb"/> + <delta token="false" xml:id="id4"/> + <theta class="100%" xml:lang="en-US" xml:id="id5"/> + <alpha attrib="attribute-value"/> + <eta xml:lang="nb" xml:id="id6"/> + <tau> + <any att="true"/> + <omicron> + <gamma token="solid 1px green" xml:lang="no-nb"> + <xi att="attribute-value" xml:lang="en" xml:id="id7"/> + <chi token="123456789" xml:id="id8"> + <green>This text must be green</green> + </chi> + </gamma> + </omicron> + </tau> + </pi> + </tau> + </tree> + </test> + <test> + <xpath>//lambda//mu[@attr="true"][@xml:lang="en-US"][@xml:id="id1"][following-sibling::sigma[preceding-sibling::*[position() = 1]][following-sibling::iota[not(child::node())][following-sibling::eta[contains(concat(@true,"$"),"attribute value$")][not(following-sibling::*)]//chi[not(child::node())][following-sibling::psi[@xml:id="id2"][not(child::node())][following-sibling::tau[@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//gamma[@true][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=9]][following-sibling::lambda[not(child::node())][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=7]][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::*[@xml:lang="en"][not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::zeta[@xml:id="id5"][not(child::node())][following-sibling::kappa[@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::zeta[@xml:id="id7"][not(child::node())][following-sibling::delta[@attr][@xml:lang="en"][preceding-sibling::*[position() = 9]]//omicron[contains(@class,"ttrib")][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <lambda> + <mu attr="true" xml:lang="en-US" xml:id="id1"/> + <sigma/> + <iota/> + <eta true="attribute value"> + <chi/> + <psi xml:id="id2"/> + <tau xml:lang="no" xml:id="id3"> + <gamma true="attribute-value" xml:lang="nb"/> + <lambda/> + <gamma xml:lang="no-nb" xml:id="id4"/> + <rho/> + <any xml:lang="en"/> + <omicron/> + <zeta xml:id="id5"/> + <kappa xml:id="id6"/> + <zeta xml:id="id7"/> + <delta attr="attribute value" xml:lang="en"> + <omicron class="attribute"> + <green>This text must be green</green> + </omicron> + </delta> + </tau> + </eta> + </lambda> + </tree> + </test> + <test> + <xpath>//omicron/upsilon[contains(@token,"56789")][@xml:lang="en"][@xml:id="id1"][following-sibling::*[position()=6]][following-sibling::theta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[@data][@xml:id="id2"][not(child::node())][following-sibling::psi[contains(concat(@name,"$"),"k$")][@xml:id="id3"][preceding-sibling::*[position() = 3]][following-sibling::chi[@object][@xml:id="id4"][not(child::node())][following-sibling::rho[@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::eta[@xml:lang="en"][@xml:id="id6"]//alpha[@desciption="content"][@xml:id="id7"][not(preceding-sibling::*)]//pi[@attribute][not(preceding-sibling::*)][not(preceding-sibling::pi)]/zeta[contains(@data,"t")][@xml:lang="en"][@xml:id="id8"][not(child::node())][following-sibling::kappa[@false][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[starts-with(concat(@abort,"-"),"content-")][@xml:lang="en-US"][not(following-sibling::*)]/beta[@or][@xml:lang="en-GB"][following-sibling::mu[@token][@xml:id="id10"]//alpha[contains(concat(@and,"$"),"00%$")]//xi[@number][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:id="id11"][not(following-sibling::*)]//tau[@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[contains(@insert,"so")][@xml:id="id13"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@xml:id="id14"]][position() = 1]]][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <omicron> + <upsilon token="123456789" xml:lang="en" xml:id="id1"/> + <theta/> + <phi data="this.nodeValue" xml:id="id2"/> + <psi name="_blank" xml:id="id3"/> + <chi object="another attribute value" xml:id="id4"/> + <rho xml:lang="en-US" xml:id="id5"/> + <eta xml:lang="en" xml:id="id6"> + <alpha desciption="content" xml:id="id7"> + <pi attribute="true"> + <zeta data="content" xml:lang="en" xml:id="id8"/> + <kappa false="this.nodeValue" xml:id="id9"/> + <nu abort="content" xml:lang="en-US"> + <beta or="attribute value" xml:lang="en-GB"/> + <mu token="attribute" xml:id="id10"> + <alpha and="100%"> + <xi number="content" xml:lang="en-GB"> + <iota xml:id="id11"> + <tau xml:id="id12"> + <sigma insert="solid 1px green" xml:id="id13"> + <mu xml:id="id14"> + <green>This text must be green</green> + </mu> + </sigma> + </tau> + </iota> + </xi> + </alpha> + </mu> + </nu> + </pi> + </alpha> + </eta> + </omicron> + </tree> + </test> + <test> + <xpath>//omicron/phi[@xml:id="id1"][not(following-sibling::*)]/omicron[starts-with(@false,"attri")][@xml:id="id2"][not(child::node())][following-sibling::delta[@xml:id="id3"][preceding-sibling::*[position() = 1]]/gamma[following-sibling::psi[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][following-sibling::chi[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::*[starts-with(concat(@data,"-"),"false-")][@xml:id="id5"][following-sibling::*[position()=2]][following-sibling::omega[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 5]][following-sibling::epsilon[@xml:lang="no"][@xml:id="id7"][not(following-sibling::*)]//beta[@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id9"]//theta[@number][not(following-sibling::*)]//psi[@xml:lang="nb"][@xml:id="id10"][following-sibling::sigma[@string="solid 1px green"]//epsilon[@xml:lang="en-GB"][@xml:id="id11"][not(following-sibling::*)]/kappa[contains(concat(@class,"$"),"nk$")][@xml:lang="no-nb"][not(preceding-sibling::*)]//sigma[@xml:lang="no-nb"][@xml:id="id12"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron> + <phi xml:id="id1"> + <omicron false="attribute" xml:id="id2"/> + <delta xml:id="id3"> + <gamma/> + <psi xml:lang="en-GB" xml:id="id4"/> + <tau xml:lang="en-GB"/> + <chi/> + <any data="false" xml:id="id5"/> + <omega xml:lang="en-GB" xml:id="id6"/> + <epsilon xml:lang="no" xml:id="id7"> + <beta xml:lang="nb" xml:id="id8"> + <upsilon xml:id="id9"> + <theta number="123456789"> + <psi xml:lang="nb" xml:id="id10"/> + <sigma string="solid 1px green"> + <epsilon xml:lang="en-GB" xml:id="id11"> + <kappa class="_blank" xml:lang="no-nb"> + <sigma xml:lang="no-nb" xml:id="id12"> + <green>This text must be green</green> + </sigma> + </kappa> + </epsilon> + </sigma> + </theta> + </upsilon> + </beta> + </epsilon> + </delta> + </phi> + </omicron> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-GB"][@xml:id="id1"]/psi[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@title="another attribute value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/lambda[starts-with(concat(@token,"-"),"solid 1px green-")][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::mu[contains(@delete,"%")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::eta[preceding-sibling::*[position() = 2]][not(following-sibling::eta)][following-sibling::delta[@token][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]]]]]</xpath> + <tree> + <phi xml:lang="en-GB" xml:id="id1"> + <psi xml:lang="nb"/> + <phi xml:lang="nb" xml:id="id2"/> + <omicron title="another attribute value"> + <lambda token="solid 1px green" xml:lang="en" xml:id="id3"/> + <mu delete="100%" xml:lang="no"/> + <eta/> + <delta token="true" xml:id="id4"> + <green>This text must be green</green> + </delta> + </omicron> + </phi> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="en-GB"]//xi[not(preceding-sibling::*)]//omicron[@xml:lang="en"][@xml:id="id1"][not(following-sibling::*)]/xi[contains(concat(@or,"$"),"lue$")][@xml:lang="en-US"][not(following-sibling::*)]//delta[not(following-sibling::*)][not(preceding-sibling::delta)]/*[@desciption="solid 1px green"][@xml:lang="en-US"]/sigma[@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::mu[@xml:lang="no-nb"]/delta[@desciption][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//lambda[starts-with(@title,"10")][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[contains(@class,"fa")][@xml:id="id3"][preceding-sibling::*[position() = 1]]/delta[not(child::node())][following-sibling::zeta[starts-with(concat(@token,"-"),"attribute-")]/kappa[@token="this.nodeValue"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[@xml:id="id5"][not(preceding-sibling::*)]//kappa[contains(concat(@string,"$"),"ibute-value$")][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::tau[contains(@desciption,"789")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <rho xml:lang="en-GB"> + <xi> + <omicron xml:lang="en" xml:id="id1"> + <xi or="this.nodeValue" xml:lang="en-US"> + <delta> + <any desciption="solid 1px green" xml:lang="en-US"> + <sigma xml:lang="en-US" xml:id="id2"/> + <mu xml:lang="no-nb"> + <delta desciption="attribute value" xml:lang="en-GB"/> + <rho xml:lang="no-nb"> + <lambda title="100%"> + <rho xml:lang="en-US"/> + <nu class="false" xml:id="id3"> + <delta/> + <zeta token="attribute-value"> + <kappa token="this.nodeValue" xml:id="id4"/> + <gamma xml:lang="nb"> + <psi xml:id="id5"> + <kappa string="attribute-value" xml:id="id6"/> + <tau desciption="123456789" xml:lang="en-US" xml:id="id7"> + <green>This text must be green</green> + </tau> + </psi> + </gamma> + </zeta> + </nu> + </lambda> + </rho> + </mu> + </any> + </delta> + </xi> + </omicron> + </xi> + </rho> + </tree> + </test> + <test> + <xpath>//epsilon[starts-with(@and,"false")][@xml:lang="no"][@xml:id="id1"]/xi[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[not(following-sibling::*)]/lambda[not(following-sibling::*)]/xi[@class="attribute-value"][@xml:id="id3"]/omicron[not(preceding-sibling::*)][following-sibling::omega[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/*[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::delta[contains(concat(@true,"$"),"value$")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::xi[@desciption][@xml:id="id7"][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon and="false" xml:lang="no" xml:id="id1"> + <xi xml:lang="no" xml:id="id2"/> + <mu> + <lambda> + <xi class="attribute-value" xml:id="id3"> + <omicron/> + <omega xml:id="id4"> + <any xml:lang="nb" xml:id="id5"/> + <delta true="another attribute value" xml:lang="en-US" xml:id="id6"/> + <xi desciption="true" xml:id="id7"> + <green>This text must be green</green> + </xi> + </omega> + </xi> + </lambda> + </mu> + </epsilon> + </tree> + </test> + <test> + <xpath>//sigma//zeta[@xml:lang="no"][not(following-sibling::*)]/beta[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::beta)][not(child::node())][following-sibling::pi[starts-with(concat(@name,"-"),"false-")][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/iota[starts-with(@att,"co")][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[starts-with(concat(@attribute,"-"),"another attribute value-")][@xml:id="id3"]/alpha[starts-with(concat(@title,"-"),"another attribute value-")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@true="content"][@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]//pi[not(preceding-sibling::*)][not(following-sibling::*)]/alpha[not(preceding-sibling::*)][following-sibling::nu[starts-with(concat(@attr,"-"),"another attribute value-")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 2]][following-sibling::epsilon[@xml:id="id6"][following-sibling::lambda[@att][@xml:lang="en-GB"][preceding-sibling::*[position() = 4]]/*[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <sigma> + <zeta xml:lang="no"> + <beta xml:lang="en-GB" xml:id="id1"/> + <pi name="false" xml:lang="no-nb" xml:id="id2"> + <iota att="content"/> + <pi attribute="another attribute value" xml:id="id3"> + <alpha title="another attribute value" xml:lang="nb"> + <sigma true="content" xml:lang="nb" xml:id="id4"> + <pi> + <alpha/> + <nu attr="another attribute value" xml:id="id5"/> + <sigma/> + <epsilon xml:id="id6"/> + <lambda att="true" xml:lang="en-GB"> + <any xml:lang="en-US" xml:id="id7"> + <green>This text must be green</green> + </any> + </lambda> + </pi> + </sigma> + </alpha> + </pi> + </pi> + </zeta> + </sigma> + </tree> + </test> + <test> + <xpath>//xi[@xml:lang="no-nb"][@xml:id="id1"]/kappa[contains(@object,"co")][not(following-sibling::*)]/xi[@false][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[not(preceding-sibling::*)][following-sibling::rho[@attrib][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//iota[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="no-nb"]/phi[starts-with(@true,"this.nodeVal")][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::chi[@xml:id="id4"][not(following-sibling::*)]/lambda[contains(@title,"3456789")][not(preceding-sibling::*)]//epsilon[contains(concat(@false,"$"),"se$")][@xml:id="id5"]/alpha[@src="false"][@xml:lang="en-GB"][following-sibling::beta[not(preceding-sibling::beta)][not(child::node())][following-sibling::zeta[@attr="this.nodeValue"][@xml:id="id6"][not(following-sibling::*)]//phi//kappa[not(following-sibling::*)]//iota[contains(@src,"ue")][not(preceding-sibling::*)][not(following-sibling::*)]/psi[not(preceding-sibling::*)][not(following-sibling::*)]/phi[@object="another attribute value"][not(preceding-sibling::*)][not(following-sibling::phi)]//beta[not(following-sibling::*)]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <xi xml:lang="no-nb" xml:id="id1"> + <kappa object="content"> + <xi false="_blank" xml:lang="en-US"> + <psi/> + <rho attrib="attribute" xml:lang="no" xml:id="id2"> + <iota xml:lang="no-nb"/> + <iota xml:lang="no-nb"> + <phi true="this.nodeValue" xml:lang="no" xml:id="id3"/> + <chi xml:id="id4"> + <lambda title="123456789"> + <epsilon false="false" xml:id="id5"> + <alpha src="false" xml:lang="en-GB"/> + <beta/> + <zeta attr="this.nodeValue" xml:id="id6"> + <phi> + <kappa> + <iota src="true"> + <psi> + <phi object="another attribute value"> + <beta> + <green>This text must be green</green> + </beta> + </phi> + </psi> + </iota> + </kappa> + </phi> + </zeta> + </epsilon> + </lambda> + </chi> + </iota> + </rho> + </xi> + </kappa> + </xi> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="no"][@xml:id="id1"]//delta[contains(concat(@att,"$"),"ribute-value$")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)]//phi[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::*[preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::eta[@xml:id="id5"]//eta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@desciption][@xml:lang="no"][not(following-sibling::*)]/chi[starts-with(@data,"attribut")][not(preceding-sibling::*)]/chi[following-sibling::omega[@xml:lang="nb"][@xml:id="id6"][not(child::node())][following-sibling::beta[@insert="another attribute value"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::rho[starts-with(@src,"true")][preceding-sibling::*[position() = 3]][following-sibling::pi[starts-with(@token,"1")][@xml:lang="en-GB"][@xml:id="id7"][following-sibling::iota[@xml:id="id8"][preceding-sibling::*[position() = 5]]//kappa[contains(@abort,"lue")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@token="false"][@xml:lang="no-nb"][@xml:id="id9"][not(following-sibling::*)][not(preceding-sibling::eta)]/mu[@insert="another attribute value"][@xml:id="id10"][not(child::node())][following-sibling::chi[@attrib][not(following-sibling::*)]/xi[@name][@xml:id="id11"][not(preceding-sibling::*)]/theta[contains(@title,"no")][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]]]]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu xml:lang="no" xml:id="id1"> + <delta att="attribute-value" xml:lang="no" xml:id="id2"> + <phi xml:id="id3"/> + <epsilon xml:id="id4"/> + <any/> + <eta xml:id="id5"> + <eta xml:lang="no-nb"/> + <upsilon desciption="attribute" xml:lang="no"> + <chi data="attribute"> + <chi/> + <omega xml:lang="nb" xml:id="id6"/> + <beta insert="another attribute value"/> + <rho src="true"/> + <pi token="100%" xml:lang="en-GB" xml:id="id7"/> + <iota xml:id="id8"> + <kappa abort="this.nodeValue" xml:lang="no-nb"/> + <eta token="false" xml:lang="no-nb" xml:id="id9"> + <mu insert="another attribute value" xml:id="id10"/> + <chi attrib="100%"> + <xi name="another attribute value" xml:id="id11"> + <theta title="this.nodeValue"> + <green>This text must be green</green> + </theta> + </xi> + </chi> + </eta> + </iota> + </chi> + </upsilon> + </eta> + </delta> + </nu> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="en-GB"]/rho[@xml:lang="en"][not(following-sibling::*)]//eta[@token="123456789"][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa[starts-with(@or,"tru")][@xml:id="id1"][not(following-sibling::*)]/delta[starts-with(@desciption,"this.")][@xml:id="id2"]//phi[starts-with(@token,"100%")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::alpha[preceding-sibling::*[position() = 1]][following-sibling::mu[@xml:id="id4"][preceding-sibling::*[position() = 2]]//psi[@xml:id="id5"]//zeta[@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)]/phi[@src][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(preceding-sibling::tau)]/eta[contains(concat(@title,"$"),"true$")][@xml:id="id7"]//delta[contains(concat(@number,"$"),"attribute value$")][@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)]//chi[@desciption][@xml:id="id9"]//phi[@token][@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@attribute][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id11"]//zeta[@xml:lang="en-US"][@xml:id="id12"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@number][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:lang="no-nb"][@xml:id="id13"][not(child::node())][following-sibling::delta[@data="_blank"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <psi xml:lang="en-GB"> + <rho xml:lang="en"> + <eta token="123456789" xml:lang="no"/> + <kappa or="true" xml:id="id1"> + <delta desciption="this.nodeValue" xml:id="id2"> + <phi token="100%" xml:lang="no-nb" xml:id="id3"/> + <alpha/> + <mu xml:id="id4"> + <psi xml:id="id5"> + <zeta xml:lang="en" xml:id="id6"> + <phi src="123456789" xml:lang="no"/> + <tau xml:lang="en"> + <eta title="true" xml:id="id7"> + <delta number="attribute value" xml:lang="nb" xml:id="id8"> + <chi desciption="attribute-value" xml:id="id9"> + <phi token="true" xml:lang="en-US" xml:id="id10"> + <xi attribute="123456789"/> + <epsilon xml:id="id11"> + <zeta xml:lang="en-US" xml:id="id12"/> + <pi number="attribute-value"/> + <omicron xml:lang="no-nb" xml:id="id13"/> + <delta data="_blank"> + <green>This text must be green</green> + </delta> + </epsilon> + </phi> + </chi> + </delta> + </eta> + </tau> + </zeta> + </psi> + </mu> + </delta> + </kappa> + </rho> + </psi> + </tree> + </test> + <test> + <xpath>//omega[@true][@xml:lang="en-US"][@xml:id="id1"]/delta[following-sibling::chi[@abort][@xml:lang="en"][following-sibling::kappa[preceding-sibling::*[position() = 2]]//lambda//tau[@xml:lang="nb"][@xml:id="id2"]//beta[contains(concat(@token,"$"),"false$")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="no"][not(following-sibling::*)]//iota[starts-with(@desciption,"_")][@xml:id="id5"][not(following-sibling::*)]//xi[@xml:id="id6"][following-sibling::rho[@attr][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[starts-with(concat(@name,"-"),"100%-")][@xml:lang="en-US"][not(preceding-sibling::*)]//alpha[@xml:lang="no-nb"][@xml:id="id8"]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omega true="true" xml:lang="en-US" xml:id="id1"> + <delta/> + <chi abort="true" xml:lang="en"/> + <kappa> + <lambda> + <tau xml:lang="nb" xml:id="id2"> + <beta token="false" xml:id="id3"/> + <gamma xml:lang="en"> + <chi xml:id="id4"/> + <xi xml:lang="no"> + <iota desciption="_blank" xml:id="id5"> + <xi xml:id="id6"/> + <rho attr="true" xml:lang="en" xml:id="id7"> + <beta name="100%" xml:lang="en-US"> + <alpha xml:lang="no-nb" xml:id="id8"> + <green>This text must be green</green> + </alpha> + </beta> + </rho> + </iota> + </xi> + </gamma> + </tau> + </lambda> + </kappa> + </omega> + </tree> + </test> + <test> + <xpath>//zeta/kappa[contains(@desciption,"nk")][not(preceding-sibling::*)][following-sibling::omega[@abort="another attribute value"][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::lambda[@class="true"][@xml:lang="no-nb"][@xml:id="id1"][not(child::node())][following-sibling::iota[contains(@insert,"ute val")][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]]][position() = 1]][position() = 1]]</xpath> + <tree> + <zeta> + <kappa desciption="_blank"/> + <omega abort="another attribute value" xml:lang="no-nb"/> + <lambda class="true" xml:lang="no-nb" xml:id="id1"/> + <iota insert="another attribute value"/> + <chi xml:lang="no" xml:id="id2"> + <green>This text must be green</green> + </chi> + </zeta> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-GB"]//eta[contains(@attr,"23")][not(following-sibling::*)]/lambda[contains(concat(@true,"$"),"789$")][@xml:lang="en-GB"][@xml:id="id1"]/xi[@xml:lang="en"][@xml:id="id2"]/beta[contains(@data,"%")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::chi[contains(@or,"ibu")][@xml:id="id3"][following-sibling::upsilon[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@number][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//chi[not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[starts-with(@att,"attri")][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[starts-with(concat(@object,"-"),"another attribute value-")][@xml:lang="no"]//omicron[not(preceding-sibling::*)][not(following-sibling::*)]]]]][position() = 1]]</xpath> + <tree> + <any xml:lang="en-GB"> + <eta attr="123456789"> + <lambda true="123456789" xml:lang="en-GB" xml:id="id1"> + <xi xml:lang="en" xml:id="id2"> + <beta data="100%" xml:lang="en"/> + <chi or="another attribute value" xml:id="id3"/> + <upsilon xml:lang="en-GB"/> + <phi number="false" xml:id="id4"> + <chi/> + <lambda att="attribute value"/> + <eta object="another attribute value" xml:lang="no"> + <omicron> + <green>This text must be green</green> + </omicron> + </eta> + </phi> + </xi> + </lambda> + </eta> + </any> + </tree> + </test> + <test> + <xpath>//beta[starts-with(@object,"attribut")][@xml:lang="no-nb"]/mu[@xml:lang="en"][not(following-sibling::*)][not(following-sibling::mu)]/theta[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::theta[@true="attribute"][@xml:lang="nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//phi[contains(concat(@string,"$"),"nt$")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::epsilon[@title][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta object="attribute" xml:lang="no-nb"> + <mu xml:lang="en"> + <theta xml:lang="en-US"/> + <theta true="attribute" xml:lang="nb" xml:id="id1"/> + <delta xml:lang="en-GB"> + <phi string="content" xml:id="id2"/> + <epsilon title="this.nodeValue" xml:lang="no-nb"> + <green>This text must be green</green> + </epsilon> + </delta> + </mu> + </beta> + </tree> + </test> + <test> + <xpath>//omega[@xml:id="id1"]//tau[contains(@insert,"00%")][@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[starts-with(@object,"attribute ")][@xml:lang="no-nb"][@xml:id="id3"]/beta[starts-with(@desciption,"solid 1px ")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@true][@xml:id="id5"][not(following-sibling::*)]//alpha[contains(concat(@desciption,"$"),"e$")][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)]/omicron[contains(concat(@insert,"$"),"0%$")][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)]/kappa[contains(concat(@delete,"$"),"rue$")][@xml:lang="en-US"][@xml:id="id8"][not(preceding-sibling::*)]//omega[@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)]//nu[@xml:lang="no"][@xml:id="id10"]/kappa[@insert][@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::kappa[starts-with(concat(@name,"-"),"content-")][@xml:lang="en"][not(following-sibling::*)]/phi[not(preceding-sibling::*)][position() = 1]]]]</xpath> + <tree> + <omega xml:id="id1"> + <tau insert="100%" xml:lang="en" xml:id="id2"/> + <beta object="attribute value" xml:lang="no-nb" xml:id="id3"> + <beta desciption="solid 1px green" xml:lang="no" xml:id="id4"> + <nu true="true" xml:id="id5"> + <alpha desciption="false"/> + <gamma xml:lang="en-GB" xml:id="id6"> + <omicron insert="100%" xml:lang="nb" xml:id="id7"> + <kappa delete="true" xml:lang="en-US" xml:id="id8"> + <omega xml:lang="en-GB" xml:id="id9"> + <nu xml:lang="no" xml:id="id10"> + <kappa insert="100%" xml:lang="no-nb" xml:id="id11"/> + <kappa name="content" xml:lang="en"> + <phi> + <green>This text must be green</green> + </phi> + </kappa> + </nu> + </omega> + </kappa> + </omicron> + </gamma> + </nu> + </beta> + </beta> + </omega> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="no"][@xml:id="id1"]/iota[starts-with(@content,"this-is-att-valu")][not(preceding-sibling::iota)]/zeta[@title][not(following-sibling::*)]//sigma[@delete="this-is-att-value"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[following-sibling::*[preceding-sibling::*[position() = 2]]/iota[@xml:id="id3"][not(child::node())][following-sibling::omega[@delete][following-sibling::iota[@desciption][@xml:lang="en"][preceding-sibling::*[position() = 2]]//upsilon[following-sibling::*[position()=2]][not(following-sibling::upsilon)][not(child::node())][following-sibling::chi[@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::alpha[@att][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu xml:lang="no" xml:id="id1"> + <iota content="this-is-att-value"> + <zeta title="123456789"> + <sigma delete="this-is-att-value" xml:id="id2"/> + <any/> + <any> + <iota xml:id="id3"/> + <omega delete="attribute value"/> + <iota desciption="this-is-att-value" xml:lang="en"> + <upsilon/> + <chi xml:id="id4"/> + <alpha att="this-is-att-value" xml:lang="nb"> + <green>This text must be green</green> + </alpha> + </iota> + </any> + </zeta> + </iota> + </nu> + </tree> + </test> + <test> + <xpath>//delta[contains(@title,"his")][@xml:lang="en-US"]/tau[@xml:lang="en"][not(following-sibling::*)]//rho[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::iota[@xml:lang="en"][@xml:id="id2"][following-sibling::theta[@att="123456789"][@xml:id="id3"][following-sibling::gamma[@or="solid 1px green"]/delta[starts-with(concat(@desciption,"-"),"100%-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:id="id4"][following-sibling::*[contains(@attribute,"t")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//delta[@string="attribute-value"][@xml:lang="no-nb"][following-sibling::pi[following-sibling::tau[@att][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/mu[starts-with(@abort,"co")][@xml:lang="no"][not(preceding-sibling::*)][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <delta title="this.nodeValue" xml:lang="en-US"> + <tau xml:lang="en"> + <rho xml:lang="no-nb" xml:id="id1"/> + <iota xml:lang="en" xml:id="id2"/> + <theta att="123456789" xml:id="id3"/> + <gamma or="solid 1px green"> + <delta desciption="100%" xml:lang="en-GB"/> + <delta xml:id="id4"/> + <any attribute="content" xml:lang="en-US"> + <delta string="attribute-value" xml:lang="no-nb"/> + <pi/> + <tau att="_blank" xml:lang="no-nb" xml:id="id5"> + <mu abort="content" xml:lang="no"> + <green>This text must be green</green> + </mu> + </tau> + </any> + </gamma> + </tau> + </delta> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en-GB"][@xml:id="id1"]//rho[contains(@src,"ute va")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::chi[starts-with(concat(@string,"-"),"attribute-")][@xml:lang="en-GB"][following-sibling::*[position()=3]][not(child::node())][following-sibling::chi[@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:lang="en-US"][not(child::node())][following-sibling::sigma[@data][preceding-sibling::*[position() = 4]][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="en-GB" xml:id="id1"> + <rho src="attribute value" xml:lang="en-GB"/> + <chi string="attribute" xml:lang="en-GB"/> + <chi xml:id="id2"/> + <mu xml:lang="en-US"/> + <sigma data="another attribute value"> + <green>This text must be green</green> + </sigma> + </upsilon> + </tree> + </test> + <test> + <xpath>//mu[@attribute="true"][@xml:lang="no-nb"]/zeta[@and="attribute-value"][not(preceding-sibling::*)]//lambda[starts-with(@class,"attribute")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::sigma[@xml:id="id1"][not(child::node())][following-sibling::*[starts-with(@attribute,"content")][@xml:id="id2"][following-sibling::beta[@token][@xml:lang="en-US"][preceding-sibling::*[position() = 3]][following-sibling::kappa[@token][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::mu[contains(concat(@title,"$"),"te$")]//phi[@title="false"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::*[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[not(following-sibling::*)]//phi[starts-with(@number,"123")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::*[@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::sigma[starts-with(@content,"this.n")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::kappa[not(child::node())][following-sibling::omega[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 4]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <mu attribute="true" xml:lang="no-nb"> + <zeta and="attribute-value"> + <lambda class="attribute-value" xml:lang="en"/> + <sigma xml:id="id1"/> + <any attribute="content" xml:id="id2"/> + <beta token="123456789" xml:lang="en-US"/> + <kappa token="this.nodeValue"/> + <mu title="attribute"> + <phi title="false" xml:id="id3"/> + <any xml:lang="en-GB" xml:id="id4"> + <lambda> + <phi number="123456789" xml:id="id5"> + <chi xml:lang="en-GB" xml:id="id6"/> + <any xml:lang="en-US" xml:id="id7"/> + <sigma content="this.nodeValue"/> + <kappa/> + <omega xml:lang="en-US" xml:id="id8"> + <green>This text must be green</green> + </omega> + </phi> + </lambda> + </any> + </mu> + </zeta> + </mu> + </tree> + </test> + <test> + <xpath>//chi[@attribute]//kappa[starts-with(concat(@number,"-"),"attribute value-")][@xml:id="id1"][not(following-sibling::*)]//lambda[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[starts-with(@attribute,"100")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]]/*[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]//beta[@xml:id="id5"][not(following-sibling::*)]/psi[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[@number][not(child::node())][following-sibling::beta[starts-with(@object,"sol")]//upsilon[starts-with(@or,"false")][not(preceding-sibling::*)][not(following-sibling::*)]//psi[contains(concat(@abort,"$"),"reen$")][@xml:lang="no-nb"][@xml:id="id6"][not(child::node())][following-sibling::omicron[@or][not(following-sibling::*)]//xi[@insert][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::phi[@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@xml:id="id9"][not(child::node())][following-sibling::eta[@or][@xml:id="id10"][not(child::node())][following-sibling::omicron//iota[@xml:lang="nb"][following-sibling::iota[@xml:lang="en"][@xml:id="id11"]//psi[contains(@attribute,"0")][not(preceding-sibling::*)]//iota[@xml:lang="no-nb"][@xml:id="id12"][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <chi attribute="attribute value"> + <kappa number="attribute value" xml:id="id1"> + <lambda xml:id="id2"/> + <xi attribute="100%"/> + <omicron token="attribute" xml:lang="no" xml:id="id3"> + <any xml:lang="no" xml:id="id4"> + <beta xml:id="id5"> + <psi xml:lang="en-US"/> + <psi number="false"/> + <beta object="solid 1px green"> + <upsilon or="false"> + <psi abort="solid 1px green" xml:lang="no-nb" xml:id="id6"/> + <omicron or="false"> + <xi insert="attribute value" xml:lang="en" xml:id="id7"/> + <phi xml:lang="nb" xml:id="id8"> + <any xml:id="id9"/> + <eta or="this-is-att-value" xml:id="id10"/> + <omicron> + <iota xml:lang="nb"/> + <iota xml:lang="en" xml:id="id11"> + <psi attribute="100%"> + <iota xml:lang="no-nb" xml:id="id12"/> + <zeta> + <green>This text must be green</green> + </zeta> + </psi> + </iota> + </omicron> + </phi> + </omicron> + </upsilon> + </beta> + </beta> + </any> + </omicron> + </kappa> + </chi> + </tree> + </test> + <test> + <xpath>//chi[starts-with(@attr,"another attribu")][@xml:id="id1"]/omicron[@attr="123456789"][not(preceding-sibling::*)]/delta[not(preceding-sibling::*)][not(child::node())][following-sibling::chi[starts-with(@insert,"a")][@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::lambda[contains(@object,"se")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omicron[@xml:lang="no-nb"][not(following-sibling::*)]//*[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[contains(@name,"_blan")][@xml:lang="en"][@xml:id="id5"][following-sibling::*[position()=2]][following-sibling::upsilon[@xml:id="id6"][following-sibling::epsilon[@xml:lang="no"][@xml:id="id7"]/*[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::mu[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::epsilon[@delete][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][following-sibling::eta[@xml:id="id9"][preceding-sibling::*[position() = 3]][following-sibling::omega[@desciption="_blank"][@xml:id="id10"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//rho[@att="another attribute value"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@xml:id="id12"][not(preceding-sibling::*)]//theta[@xml:id="id13"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <chi attr="another attribute value" xml:id="id1"> + <omicron attr="123456789"> + <delta/> + <chi insert="attribute" xml:lang="nb" xml:id="id2"/> + <lambda object="false" xml:lang="no" xml:id="id3"> + <omicron xml:lang="no-nb"> + <any xml:lang="en-US" xml:id="id4"/> + <any name="_blank" xml:lang="en" xml:id="id5"/> + <upsilon xml:id="id6"/> + <epsilon xml:lang="no" xml:id="id7"> + <any attr="attribute" xml:lang="no-nb"/> + <mu/> + <epsilon delete="solid 1px green" xml:lang="en-GB" xml:id="id8"/> + <eta xml:id="id9"/> + <omega desciption="_blank" xml:id="id10"> + <rho att="another attribute value" xml:id="id11"> + <mu xml:id="id12"> + <theta xml:id="id13"> + <green>This text must be green</green> + </theta> + </mu> + </rho> + </omega> + </epsilon> + </omicron> + </lambda> + </omicron> + </chi> + </tree> + </test> + <test> + <xpath>//gamma[@xml:id="id1"]//theta[@xml:lang="en"]/nu[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[@src="this.nodeValue"][not(child::node())][following-sibling::gamma[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/omicron[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <gamma xml:id="id1"> + <theta xml:lang="en"> + <nu xml:lang="en-GB" xml:id="id2"/> + <zeta src="this.nodeValue"/> + <gamma xml:lang="en-US"> + <omicron xml:lang="en"> + <green>This text must be green</green> + </omicron> + </gamma> + </theta> + </gamma> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@content,"$"),"px green$")][@xml:id="id1"]//lambda[contains(concat(@false,"$"),"0%$")][@xml:lang="en-GB"]//nu[starts-with(concat(@name,"-"),"attribute value-")][@xml:id="id2"][not(preceding-sibling::*)]//nu/beta[contains(concat(@number,"$"),"rue$")][not(preceding-sibling::*)]/chi[@xml:id="id3"]</xpath> + <tree> + <iota content="solid 1px green" xml:id="id1"> + <lambda false="100%" xml:lang="en-GB"> + <nu name="attribute value" xml:id="id2"> + <nu> + <beta number="true"> + <chi xml:id="id3"> + <green>This text must be green</green> + </chi> + </beta> + </nu> + </nu> + </lambda> + </iota> + </tree> + </test> + <test> + <xpath>//alpha[contains(@content,"ibute v")][@xml:id="id1"]/kappa[@number][@xml:lang="en-US"][not(preceding-sibling::*)]//*[@xml:lang="nb"][not(following-sibling::*)]/gamma[@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[not(following-sibling::*)]/phi[@string="attribute-value"][@xml:lang="no"][not(child::node())][following-sibling::epsilon[contains(concat(@string,"$"),"56789$")][not(following-sibling::*)]/sigma[@att][@xml:id="id4"]//nu[@xml:lang="en-GB"][following-sibling::pi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[contains(@insert,"ue")][@xml:lang="no-nb"][@xml:id="id5"][following-sibling::delta[@content][@xml:lang="nb"][@xml:id="id6"][following-sibling::sigma[contains(@string,"ls")][@xml:id="id7"][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha content="attribute value" xml:id="id1"> + <kappa number="attribute-value" xml:lang="en-US"> + <any xml:lang="nb"> + <gamma xml:id="id2"/> + <kappa xml:lang="no" xml:id="id3"/> + <kappa> + <phi string="attribute-value" xml:lang="no"/> + <epsilon string="123456789"> + <sigma att="attribute value" xml:id="id4"> + <nu xml:lang="en-GB"/> + <pi> + <omicron insert="true" xml:lang="no-nb" xml:id="id5"/> + <delta content="123456789" xml:lang="nb" xml:id="id6"/> + <sigma string="false" xml:id="id7"> + <green>This text must be green</green> + </sigma> + </pi> + </sigma> + </epsilon> + </kappa> + </any> + </kappa> + </alpha> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="en"]/omega[starts-with(concat(@name,"-"),"solid 1px green-")][not(preceding-sibling::*)]/mu[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@attr][not(following-sibling::*)]/eta[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[contains(@false,"e")][@xml:lang="no-nb"][not(preceding-sibling::*)]//omicron[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[contains(concat(@att,"$"),"lue$")][not(child::node())][following-sibling::eta[starts-with(concat(@false,"-"),"100%-")][@xml:id="id2"][not(child::node())][following-sibling::mu[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//omicron[@xml:lang="nb"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::zeta[@xml:id="id5"][not(following-sibling::*)]//upsilon[@token][@xml:lang="en-US"]//rho[@xml:lang="nb"]//pi[@xml:lang="en"][@xml:id="id6"]/*[@attr]//omega[@token="attribute value"]/gamma[@src="attribute-value"][@xml:id="id7"]/mu[@xml:id="id8"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omicron xml:lang="en"> + <omega name="solid 1px green"> + <mu xml:lang="en-US"> + <eta attr="100%"> + <eta xml:lang="no"> + <xi false="false" xml:lang="no-nb"> + <omicron xml:lang="no-nb"> + <xi xml:id="id1"/> + <rho att="this.nodeValue"/> + <eta false="100%" xml:id="id2"/> + <mu xml:lang="en-US" xml:id="id3"> + <omicron xml:lang="nb" xml:id="id4"/> + <zeta xml:id="id5"> + <upsilon token="another attribute value" xml:lang="en-US"> + <rho xml:lang="nb"> + <pi xml:lang="en" xml:id="id6"> + <any attr="this-is-att-value"> + <omega token="attribute value"> + <gamma src="attribute-value" xml:id="id7"> + <mu xml:id="id8"> + <green>This text must be green</green> + </mu> + </gamma> + </omega> + </any> + </pi> + </rho> + </upsilon> + </zeta> + </mu> + </omicron> + </xi> + </eta> + </eta> + </mu> + </omega> + </omicron> + </tree> + </test> + <test> + <xpath>//eta[starts-with(@att,"tru")][@xml:lang="no-nb"][@xml:id="id1"]//*[@name="false"][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::psi[@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::zeta[not(child::node())][following-sibling::iota[@insert][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::xi[@xml:id="id5"][not(following-sibling::*)]/theta[starts-with(concat(@attrib,"-"),"attribute-")][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:id="id6"][not(preceding-sibling::*)]/kappa[starts-with(concat(@true,"-"),"solid 1px green-")][@xml:id="id7"][not(child::node())][following-sibling::iota[starts-with(concat(@name,"-"),"attribute value-")][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][following-sibling::omicron[following-sibling::iota[starts-with(@title,"this-is-att-val")][@xml:lang="en-GB"][@xml:id="id9"]/xi[contains(@title,"attribut")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[contains(concat(@att,"$"),"true$")]/*[@src][@xml:lang="en"][following-sibling::*[position()=4]][not(child::node())][following-sibling::kappa[@xml:lang="en-US"][@xml:id="id10"][not(child::node())][following-sibling::nu[@string][following-sibling::delta[starts-with(concat(@insert,"-"),"_blank-")][@xml:lang="en-US"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:id="id11"][preceding-sibling::*[position() = 4]]//zeta[@att="100%"][@xml:lang="en-GB"][not(following-sibling::*)]//pi[@xml:id="id12"][following-sibling::lambda[@xml:id="id13"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <eta att="true" xml:lang="no-nb" xml:id="id1"> + <any name="false" xml:lang="en" xml:id="id2"/> + <theta xml:lang="en-GB" xml:id="id3"/> + <psi xml:lang="nb" xml:id="id4"/> + <zeta/> + <iota insert="false"/> + <xi xml:id="id5"> + <theta attrib="attribute"> + <lambda xml:id="id6"> + <kappa true="solid 1px green" xml:id="id7"/> + <iota name="attribute value"/> + <sigma xml:lang="en-GB" xml:id="id8"/> + <omicron/> + <iota title="this-is-att-value" xml:lang="en-GB" xml:id="id9"> + <xi title="attribute" xml:lang="no-nb"/> + <phi att="true"> + <any src="_blank" xml:lang="en"/> + <kappa xml:lang="en-US" xml:id="id10"/> + <nu string="true"/> + <delta insert="_blank" xml:lang="en-US"/> + <lambda xml:id="id11"> + <zeta att="100%" xml:lang="en-GB"> + <pi xml:id="id12"/> + <lambda xml:id="id13"> + <green>This text must be green</green> + </lambda> + </zeta> + </lambda> + </phi> + </iota> + </lambda> + </theta> + </xi> + </eta> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="en-GB"]//pi[@xml:id="id1"]/sigma[@xml:lang="no-nb"][@xml:id="id2"][not(child::node())][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id4"]//chi[@xml:lang="en-US"][not(preceding-sibling::chi)]//alpha[starts-with(@insert,"c")][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <omicron xml:lang="en-GB"> + <pi xml:id="id1"> + <sigma xml:lang="no-nb" xml:id="id2"/> + <alpha xml:id="id3"/> + <alpha xml:lang="en-GB" xml:id="id4"> + <chi xml:lang="en-US"> + <alpha insert="content"/> + <mu xml:lang="en-GB"> + <green>This text must be green</green> + </mu> + </chi> + </alpha> + </pi> + </omicron> + </tree> + </test> + <test> + <xpath>//zeta[contains(@delete,"alse")][@xml:lang="en"][@xml:id="id1"]//beta[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota/zeta[@or="true"][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:id="id3"]/tau[contains(@attribute,"ibu")][@xml:lang="en-US"]//pi[@attr][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <zeta delete="false" xml:lang="en" xml:id="id1"> + <beta xml:lang="no-nb" xml:id="id2"/> + <iota> + <zeta or="true" xml:lang="no"/> + <tau xml:id="id3"> + <tau attribute="attribute" xml:lang="en-US"> + <pi attr="solid 1px green"> + <green>This text must be green</green> + </pi> + </tau> + </tau> + </iota> + </zeta> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="nb"][@xml:id="id1"]//alpha[starts-with(@object,"con")][not(preceding-sibling::*)]//rho[starts-with(concat(@true,"-"),"another attribute value-")][@xml:lang="en"][@xml:id="id2"]/eta[@xml:lang="en-GB"][@xml:id="id3"][following-sibling::upsilon[@abort][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/nu[@xml:lang="en"][following-sibling::gamma[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[starts-with(@content,"_")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::sigma[@xml:id="id5"][not(child::node())][following-sibling::epsilon[@object="123456789"]//upsilon[@true][not(following-sibling::*)]//*[contains(@att,"123456789")][@xml:lang="nb"][@xml:id="id6"][following-sibling::sigma[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[starts-with(concat(@name,"-"),"this.nodeValue-")][@xml:lang="en-US"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omega xml:lang="nb" xml:id="id1"> + <alpha object="content"> + <rho true="another attribute value" xml:lang="en" xml:id="id2"> + <eta xml:lang="en-GB" xml:id="id3"/> + <upsilon abort="this-is-att-value" xml:lang="nb"> + <nu xml:lang="en"/> + <gamma xml:id="id4"> + <psi content="_blank" xml:lang="no"/> + <sigma xml:id="id5"/> + <epsilon object="123456789"> + <upsilon true="this-is-att-value"> + <any att="123456789" xml:lang="nb" xml:id="id6"/> + <sigma xml:lang="en-US"> + <nu name="this.nodeValue" xml:lang="en-US"> + <green>This text must be green</green> + </nu> + </sigma> + </upsilon> + </epsilon> + </gamma> + </upsilon> + </rho> + </alpha> + </omega> + </tree> + </test> + <test> + <xpath>//xi[@xml:lang="en-GB"][@xml:id="id1"]/kappa[@and][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@xml:id="id2"]/tau[not(preceding-sibling::*)][following-sibling::zeta[@string="true"][@xml:lang="nb"][following-sibling::theta[@delete="solid 1px green"][@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]//omicron[@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="en"][preceding-sibling::*[position() = 1]]//zeta[@and][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[starts-with(@number,"attribute value")][@xml:id="id5"][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <xi xml:lang="en-GB" xml:id="id1"> + <kappa and="attribute" xml:lang="no-nb"/> + <pi xml:id="id2"> + <tau/> + <zeta string="true" xml:lang="nb"/> + <theta delete="solid 1px green" xml:lang="nb" xml:id="id3"> + <omicron xml:lang="no"/> + <psi xml:lang="en"> + <zeta and="true" xml:id="id4"/> + <rho number="attribute value" xml:id="id5"> + <green>This text must be green</green> + </rho> + </psi> + </theta> + </pi> + </xi> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(@attr,"attribute val")][@xml:id="id1"]/pi[@xml:lang="en-US"][not(preceding-sibling::*)]//upsilon[starts-with(concat(@true,"-"),"attribute-")][following-sibling::nu[@or][@xml:id="id2"][not(following-sibling::*)]//delta[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::xi/omicron[starts-with(concat(@string,"-"),"another attribute value-")]/rho[@false][@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]/*[@xml:lang="no-nb"]/mu[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:id="id6"][preceding-sibling::*[position() = 1]]//lambda[contains(@data,"ttribute-va")][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron attr="attribute value" xml:id="id1"> + <pi xml:lang="en-US"> + <upsilon true="attribute-value"/> + <nu or="_blank" xml:id="id2"> + <delta xml:id="id3"/> + <xi> + <omicron string="another attribute value"> + <rho false="attribute value" xml:lang="en-US" xml:id="id4"> + <any xml:lang="no-nb"> + <mu xml:lang="nb" xml:id="id5"/> + <epsilon xml:id="id6"> + <lambda data="attribute-value" xml:id="id7"> + <sigma> + <green>This text must be green</green> + </sigma> + </lambda> + </epsilon> + </any> + </rho> + </omicron> + </xi> + </nu> + </pi> + </omicron> + </tree> + </test> + <test> + <xpath>//zeta[@class][@xml:lang="en"][@xml:id="id1"]/*[contains(concat(@insert,"$"),"attribute-value$")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)]//chi[contains(@title,"tt-value")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[not(child::node())][following-sibling::rho[starts-with(@true,"at")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[contains(concat(@and,"$"),"blank$")][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]/eta[@xml:lang="no"][following-sibling::xi[@xml:lang="en-GB"]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta class="_blank" xml:lang="en" xml:id="id1"> + <any insert="attribute-value" xml:lang="no" xml:id="id2"> + <chi title="this-is-att-value" xml:lang="no"/> + <xi/> + <rho true="attribute value" xml:lang="en-GB"/> + <epsilon and="_blank" xml:id="id3"/> + <xi xml:lang="no" xml:id="id4"> + <eta xml:lang="no"/> + <xi xml:lang="en-GB"> + <green>This text must be green</green> + </xi> + </xi> + </any> + </zeta> + </tree> + </test> + <test> + <xpath>//beta//*[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:lang="en-GB"][not(following-sibling::*)]/psi[@xml:lang="en"][@xml:id="id2"]//kappa[starts-with(concat(@abort,"-"),"another attribute value-")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@or][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::nu or following-sibling::nu)]//gamma[@xml:id="id3"][not(following-sibling::*)]/beta[starts-with(@true,"this.node")][@xml:lang="no"][@xml:id="id4"]//omega[@number][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@xml:lang="en-GB"][@xml:id="id6"]/xi[@xml:id="id7"]]]]</xpath> + <tree> + <beta> + <any xml:lang="no" xml:id="id1"/> + <lambda xml:lang="en-GB"> + <psi xml:lang="en" xml:id="id2"> + <kappa abort="another attribute value" xml:lang="en-US"/> + <nu or="_blank"> + <gamma xml:id="id3"> + <beta true="this.nodeValue" xml:lang="no" xml:id="id4"> + <omega number="100%" xml:lang="en" xml:id="id5"> + <phi xml:lang="en-US"/> + <tau xml:lang="no"> + <beta xml:lang="en-GB" xml:id="id6"> + <xi xml:id="id7"> + <green>This text must be green</green> + </xi> + </beta> + </tau> + </omega> + </beta> + </gamma> + </nu> + </psi> + </lambda> + </beta> + </tree> + </test> + <test> + <xpath>//*[@name="123456789"][@xml:id="id1"]//iota[@attribute][following-sibling::omicron[@string][not(following-sibling::*)]//mu[not(preceding-sibling::*)][following-sibling::gamma[@and][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::gamma)]//upsilon[not(preceding-sibling::*)][following-sibling::phi[contains(@string,"attribute-value")][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[starts-with(@delete,"solid")][preceding-sibling::*[position() = 2]]//xi[not(following-sibling::*)]/zeta[@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <any name="123456789" xml:id="id1"> + <iota attribute="this-is-att-value"/> + <omicron string="123456789"> + <mu/> + <gamma and="attribute-value" xml:lang="no-nb"> + <upsilon/> + <phi string="attribute-value"/> + <nu delete="solid 1px green"> + <xi> + <zeta xml:lang="en-GB" xml:id="id2"> + <green>This text must be green</green> + </zeta> + </xi> + </nu> + </gamma> + </omicron> + </any> + </tree> + </test> + <test> + <xpath>//psi[starts-with(@or,"this.nodeVa")][@xml:lang="no"]/phi[@xml:lang="nb"][not(child::node())][following-sibling::nu[@data="this.nodeValue"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:id="id1"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/iota[starts-with(@src,"conten")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::iota)][following-sibling::chi[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]]][position() = 1]]</xpath> + <tree> + <psi or="this.nodeValue" xml:lang="no"> + <phi xml:lang="nb"/> + <nu data="this.nodeValue"/> + <beta xml:id="id1"> + <iota src="content" xml:lang="nb"/> + <chi xml:id="id2"/> + <sigma xml:lang="no-nb" xml:id="id3"> + <green>This text must be green</green> + </sigma> + </beta> + </psi> + </tree> + </test> + <test> + <xpath>//mu[starts-with(concat(@and,"-"),"attribute-")]//mu[@xml:id="id1"]//sigma[not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 1]]/chi[starts-with(concat(@attr,"-"),"attribute value-")][@xml:lang="no-nb"][@xml:id="id2"][not(child::node())][following-sibling::eta[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[contains(concat(@or,"$"),"ontent$")][@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//upsilon/upsilon[starts-with(concat(@attrib,"-"),"false-")][@xml:lang="no-nb"][@xml:id="id6"][following-sibling::*[position()=4]][following-sibling::epsilon[contains(concat(@name,"$"),"tribute value$")][@xml:lang="en"][@xml:id="id7"][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[contains(concat(@desciption,"$"),"ute$")][preceding-sibling::*[position() = 2]][following-sibling::beta[@xml:id="id8"][preceding-sibling::*[position() = 3]][following-sibling::phi[@xml:lang="en-US"][@xml:id="id9"][not(following-sibling::*)]//kappa[contains(concat(@attrib,"$"),"ribute value$")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@src][@xml:lang="en"][following-sibling::xi[@insert][@xml:id="id10"][following-sibling::zeta[@xml:id="id11"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::kappa[starts-with(concat(@name,"-"),"content-")][@xml:lang="en-GB"][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][preceding-sibling::*[position() = 4]]//sigma[@data][@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::*[@xml:id="id12"][preceding-sibling::*[position() = 1]]//kappa[@src][@xml:lang="en-GB"][@xml:id="id13"][not(following-sibling::*)]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <mu and="attribute"> + <mu xml:id="id1"> + <sigma/> + <sigma> + <chi attr="attribute value" xml:lang="no-nb" xml:id="id2"/> + <eta xml:id="id3"> + <zeta or="content" xml:lang="no-nb" xml:id="id4"/> + <alpha/> + <psi xml:lang="en-GB" xml:id="id5"> + <upsilon> + <upsilon attrib="false" xml:lang="no-nb" xml:id="id6"/> + <epsilon name="another attribute value" xml:lang="en" xml:id="id7"/> + <rho desciption="attribute"/> + <beta xml:id="id8"/> + <phi xml:lang="en-US" xml:id="id9"> + <kappa attrib="another attribute value" xml:lang="en"> + <epsilon src="true" xml:lang="en"/> + <xi insert="this.nodeValue" xml:id="id10"/> + <zeta xml:id="id11"/> + <kappa name="content" xml:lang="en-GB"/> + <pi xml:lang="no-nb"> + <sigma data="true" xml:lang="no-nb"/> + <any xml:id="id12"> + <kappa src="_blank" xml:lang="en-GB" xml:id="id13"> + <green>This text must be green</green> + </kappa> + </any> + </pi> + </kappa> + </phi> + </upsilon> + </psi> + </eta> + </sigma> + </mu> + </mu> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(@attr,"this.no")][@xml:id="id1"]//xi[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[starts-with(@insert,"attribu")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[@string="solid 1px green"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::mu[contains(concat(@string,"$"),"e$")][@xml:lang="en-GB"][@xml:id="id4"][following-sibling::lambda[@token="100%"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::beta[@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][following-sibling::upsilon[preceding-sibling::*[position() = 4]][following-sibling::alpha[starts-with(concat(@object,"-"),"100%-")][@xml:id="id5"][preceding-sibling::*[position() = 5]][following-sibling::sigma[@class][@xml:lang="no-nb"][preceding-sibling::*[position() = 6]][not(following-sibling::*)][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <alpha attr="this.nodeValue" xml:id="id1"> + <xi xml:lang="no-nb" xml:id="id2"/> + <lambda insert="attribute-value"> + <rho string="solid 1px green" xml:id="id3"/> + <mu string="true" xml:lang="en-GB" xml:id="id4"/> + <lambda token="100%"/> + <beta xml:lang="no-nb"/> + <upsilon/> + <alpha object="100%" xml:id="id5"/> + <sigma class="this-is-att-value" xml:lang="no-nb"> + <green>This text must be green</green> + </sigma> + </lambda> + </alpha> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="no-nb"]//epsilon[not(preceding-sibling::*)][not(following-sibling::*)]//delta[@xml:lang="no-nb"][@xml:id="id1"][following-sibling::*[position()=3]][not(child::node())][following-sibling::tau[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="nb"][following-sibling::*[position()=2]][following-sibling::kappa[@attr="123456789"][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[contains(@title,"e")][@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/psi[starts-with(@content,"attrib")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::pi[contains(concat(@and,"$"),"0%$")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:lang="nb"][preceding-sibling::*[position() = 2]]/zeta[@xml:id="id5"][not(child::node())][following-sibling::lambda[starts-with(@true,"this.nodeVa")][@xml:id="id6"][preceding-sibling::*[position() = 1]]/theta[starts-with(@title,"f")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)]/delta[contains(concat(@name,"$"),"alue$")][@xml:lang="no-nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[contains(@attribute,"ttribu")][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::theta[@or][@xml:id="id9"]//rho[@abort="another attribute value"][not(following-sibling::*)]/phi[not(child::node())][following-sibling::iota[@xml:lang="en"][@xml:id="id10"][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 2]][following-sibling::delta[preceding-sibling::*[position() = 3]][not(following-sibling::*)]/omega[@xml:lang="nb"][not(preceding-sibling::*)]/lambda[starts-with(concat(@content,"-"),"_blank-")][@xml:id="id11"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <pi xml:lang="no-nb"> + <epsilon> + <delta xml:lang="no-nb" xml:id="id1"/> + <tau false="123456789" xml:lang="nb"/> + <kappa attr="123456789" xml:lang="en" xml:id="id2"/> + <phi title="content" xml:lang="en-US" xml:id="id3"> + <psi content="attribute-value" xml:lang="en" xml:id="id4"/> + <pi and="100%" xml:lang="no"/> + <delta xml:lang="nb"> + <zeta xml:id="id5"/> + <lambda true="this.nodeValue" xml:id="id6"> + <theta title="false" xml:lang="no" xml:id="id7"> + <delta name="attribute value" xml:lang="no-nb"/> + <tau attribute="attribute" xml:id="id8"/> + <theta or="solid 1px green" xml:id="id9"> + <rho abort="another attribute value"> + <phi/> + <iota xml:lang="en" xml:id="id10"/> + <phi/> + <delta> + <omega xml:lang="nb"> + <lambda content="_blank" xml:id="id11"> + <green>This text must be green</green> + </lambda> + </omega> + </delta> + </rho> + </theta> + </theta> + </lambda> + </delta> + </phi> + </epsilon> + </pi> + </tree> + </test> + <test> + <xpath>//rho/iota[contains(concat(@object,"$"),"89$")][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::gamma[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[@xml:lang="nb"][not(following-sibling::*)]//nu[@xml:lang="en-GB"][@xml:id="id3"]//kappa[@number][@xml:lang="en-US"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::*[@att][not(child::node())][following-sibling::iota[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//gamma[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::omicron[@attr][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(following-sibling::omicron)][following-sibling::beta[starts-with(@attrib,"a")]//mu[contains(@content,"se")][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[starts-with(concat(@number,"-"),"another attribute value-")][@xml:id="id5"][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::kappa[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//alpha[starts-with(@insert,"attr")][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::omicron[@xml:id="id8"][preceding-sibling::*[position() = 1]]//iota[@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <rho> + <iota object="123456789" xml:id="id1"/> + <gamma xml:lang="en-US" xml:id="id2"> + <eta xml:lang="nb"> + <nu xml:lang="en-GB" xml:id="id3"> + <kappa number="attribute-value" xml:lang="en-US" xml:id="id4"/> + <any att="false"/> + <iota xml:lang="en-GB"> + <gamma xml:lang="nb"/> + <omicron attr="_blank" xml:lang="no"/> + <beta attrib="attribute value"> + <mu content="false"/> + <psi number="another attribute value" xml:id="id5"/> + <omega/> + <kappa token="attribute-value" xml:lang="en-US" xml:id="id6"> + <alpha insert="attribute-value" xml:id="id7"/> + <omicron xml:id="id8"> + <iota xml:lang="en-GB" xml:id="id9"> + <green>This text must be green</green> + </iota> + </omicron> + </kappa> + </beta> + </iota> + </nu> + </eta> + </gamma> + </rho> + </tree> + </test> + <test> + <xpath>//chi[contains(concat(@insert,"$"),"ontent$")]//delta[contains(@and,"l")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[contains(concat(@class,"$"),"lse$")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@xml:lang="nb"][following-sibling::delta[starts-with(concat(@token,"-"),"attribute value-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[starts-with(concat(@or,"-"),"this-")][following-sibling::*[position()=7]][following-sibling::kappa[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::gamma[@false][@xml:id="id3"][following-sibling::kappa[following-sibling::alpha[contains(@and,"lue")][@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::delta[not(child::node())][following-sibling::pi[@insert][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 7]][not(following-sibling::*)]]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <chi insert="content"> + <delta and="solid 1px green" xml:lang="en-GB"> + <eta class="false" xml:id="id1"> + <theta xml:lang="nb"/> + <delta token="attribute value"> + <delta or="this-is-att-value"/> + <kappa xml:lang="en-US" xml:id="id2"/> + <gamma false="another attribute value" xml:id="id3"/> + <kappa/> + <alpha and="attribute value" xml:lang="en-GB" xml:id="id4"/> + <delta/> + <pi insert="another attribute value" xml:lang="no"/> + <delta xml:lang="no-nb" xml:id="id5"> + <green>This text must be green</green> + </delta> + </delta> + </eta> + </delta> + </chi> + </tree> + </test> + <test> + <xpath>//xi[starts-with(@attr,"thi")]/rho[contains(concat(@title,"$"),"ttribute$")][@xml:lang="no-nb"][following-sibling::epsilon[@xml:lang="en-GB"][@xml:id="id1"][following-sibling::omicron[@xml:lang="en"][not(following-sibling::*)]//beta[starts-with(concat(@att,"-"),"attribute-")][@xml:lang="no"][not(preceding-sibling::*)]/iota[@xml:lang="nb"]/lambda[@xml:id="id2"][not(preceding-sibling::*)]/omega[not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(concat(@false,"-"),"attribute-")][@xml:id="id3"]]][position() = 1]]</xpath> + <tree> + <xi attr="this-is-att-value"> + <rho title="attribute" xml:lang="no-nb"/> + <epsilon xml:lang="en-GB" xml:id="id1"/> + <omicron xml:lang="en"> + <beta att="attribute-value" xml:lang="no"> + <iota xml:lang="nb"> + <lambda xml:id="id2"> + <omega/> + <kappa false="attribute-value" xml:id="id3"> + <green>This text must be green</green> + </kappa> + </lambda> + </iota> + </beta> + </omicron> + </xi> + </tree> + </test> + <test> + <xpath>//theta[@false]/mu[@attrib][@xml:id="id1"][not(following-sibling::*)]//lambda[@and][@xml:lang="en-GB"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id3"]/epsilon[following-sibling::delta[@xml:id="id4"][preceding-sibling::*[position() = 1]]/mu[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]]//theta[@xml:lang="en-GB"][@xml:id="id7"][following-sibling::pi[contains(@name,"en")][@xml:lang="en-GB"][@xml:id="id8"]//zeta[@title][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[not(following-sibling::*)]]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta false="this-is-att-value"> + <mu attrib="false" xml:id="id1"> + <lambda and="this.nodeValue" xml:lang="en-GB" xml:id="id2"/> + <psi xml:lang="en-GB" xml:id="id3"> + <epsilon/> + <delta xml:id="id4"> + <mu xml:id="id5"/> + <lambda xml:lang="nb" xml:id="id6"> + <theta xml:lang="en-GB" xml:id="id7"/> + <pi name="solid 1px green" xml:lang="en-GB" xml:id="id8"> + <zeta title="this-is-att-value" xml:lang="nb" xml:id="id9"> + <rho> + <green>This text must be green</green> + </rho> + </zeta> + </pi> + </lambda> + </delta> + </psi> + </mu> + </theta> + </tree> + </test> + <test> + <xpath>//psi[starts-with(concat(@name,"-"),"solid 1px green-")][@xml:lang="nb"]//pi[not(preceding-sibling::*)]/xi[starts-with(concat(@src,"-"),"100%-")][@xml:lang="en"][not(child::node())][following-sibling::omicron[contains(@delete,"l")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::upsilon[@src="this-is-att-value"][@xml:lang="en-US"][preceding-sibling::*[position() = 3]][following-sibling::beta[@xml:id="id2"][preceding-sibling::*[position() = 4]]//nu[@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]/delta[@xml:lang="en-GB"][not(following-sibling::*)]//omega[@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]/gamma[@xml:id="id5"][not(child::node())][following-sibling::lambda[starts-with(concat(@insert,"-"),"true-")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::tau[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[@abort="_blank"]//mu[@xml:lang="no-nb"][not(child::node())][following-sibling::pi[not(following-sibling::*)]//chi[@xml:lang="en-US"]/gamma[@false][@xml:lang="en-US"][not(preceding-sibling::*)][not(preceding-sibling::gamma)][following-sibling::rho[contains(concat(@content,"$"),"e$")][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::rho)]//epsilon[@xml:id="id7"][not(following-sibling::*)]/beta[@class][@xml:lang="no"][@xml:id="id8"]//alpha[starts-with(concat(@src,"-"),"solid 1px green-")][@xml:lang="en-US"][not(following-sibling::*)]]]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <psi name="solid 1px green" xml:lang="nb"> + <pi> + <xi src="100%" xml:lang="en"/> + <omicron delete="_blank" xml:lang="en"/> + <xi xml:lang="en-US" xml:id="id1"/> + <upsilon src="this-is-att-value" xml:lang="en-US"/> + <beta xml:id="id2"> + <nu xml:lang="nb" xml:id="id3"> + <delta xml:lang="en-GB"> + <omega xml:lang="en" xml:id="id4"> + <gamma xml:id="id5"/> + <lambda insert="true"/> + <tau xml:lang="en-GB"/> + <delta abort="_blank"> + <mu xml:lang="no-nb"/> + <pi> + <chi xml:lang="en-US"> + <gamma false="true" xml:lang="en-US"/> + <rho content="false" xml:lang="no" xml:id="id6"> + <epsilon xml:id="id7"> + <beta class="100%" xml:lang="no" xml:id="id8"> + <alpha src="solid 1px green" xml:lang="en-US"> + <green>This text must be green</green> + </alpha> + </beta> + </epsilon> + </rho> + </chi> + </pi> + </delta> + </omega> + </delta> + </nu> + </beta> + </pi> + </psi> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]/delta[not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::*[@number][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id4"]/gamma[@xml:lang="no"][not(preceding-sibling::*)]/rho[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa//eta[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::chi[starts-with(concat(@name,"-"),"this.nodeValue-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[contains(concat(@insert,"$"),"false$")][following-sibling::*[position()=1]][following-sibling::alpha[starts-with(@title,"t")][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <delta> + <chi xml:id="id2"/> + <any number="this.nodeValue" xml:id="id3"> + <psi xml:lang="no-nb"/> + <any xml:lang="no"/> + <omicron xml:lang="no" xml:id="id4"> + <gamma xml:lang="no"> + <rho/> + <kappa> + <eta xml:lang="en-US" xml:id="id5"/> + <chi name="this.nodeValue"> + <chi insert="false"/> + <alpha title="this.nodeValue"> + <green>This text must be green</green> + </alpha> + </chi> + </kappa> + </gamma> + </omicron> + </any> + </delta> + </phi> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="en"][@xml:id="id1"]//*[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::kappa[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::chi[@desciption][@xml:lang="no-nb"]/*[following-sibling::*[position()=2]][following-sibling::mu[not(child::node())][following-sibling::omicron[@and][@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <psi xml:lang="en" xml:id="id1"> + <any/> + <kappa xml:id="id2"/> + <upsilon xml:lang="no-nb" xml:id="id3"/> + <chi desciption="100%" xml:lang="no-nb"> + <any/> + <mu/> + <omicron and="false" xml:lang="no-nb" xml:id="id4"> + <green>This text must be green</green> + </omicron> + </chi> + </psi> + </tree> + </test> + <test> + <xpath>//omicron[contains(@title,"lank")][@xml:id="id1"]/theta[starts-with(@data,"10")][@xml:lang="en"][not(child::node())][following-sibling::beta[starts-with(concat(@number,"-"),"another attribute value-")][@xml:id="id2"][following-sibling::*[position()=4]][following-sibling::gamma[starts-with(@token,"solid 1p")][preceding-sibling::*[position() = 2]][following-sibling::alpha[@attribute][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::mu[@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::*[not(following-sibling::*)]//sigma[@xml:lang="no-nb"]/iota[following-sibling::pi[starts-with(concat(@object,"-"),"attribute-")][@xml:lang="en"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omicron title="_blank" xml:id="id1"> + <theta data="100%" xml:lang="en"/> + <beta number="another attribute value" xml:id="id2"/> + <gamma token="solid 1px green"/> + <alpha attribute="123456789" xml:id="id3"/> + <mu xml:lang="nb" xml:id="id4"/> + <any> + <sigma xml:lang="no-nb"> + <iota/> + <pi object="attribute" xml:lang="en"> + <green>This text must be green</green> + </pi> + </sigma> + </any> + </omicron> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(concat(@content,"-"),"solid 1px green-")][@xml:id="id1"]/kappa[contains(@number,"olid ")][@xml:lang="nb"][not(preceding-sibling::*)]/mu[contains(@true,"ute v")][@xml:id="id2"][following-sibling::phi[@class][preceding-sibling::*[position() = 1]]/sigma[starts-with(@attr,"attribut")][@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]/omicron[@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:id="id4"][not(following-sibling::*)]//pi[contains(concat(@object,"$"),"another attribute value$")][not(preceding-sibling::*)][following-sibling::phi[@attr][@xml:id="id5"][following-sibling::omicron[starts-with(@att,"1234")][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]][position() = 1]]][position() = 1]]</xpath> + <tree> + <upsilon content="solid 1px green" xml:id="id1"> + <kappa number="solid 1px green" xml:lang="nb"> + <mu true="attribute value" xml:id="id2"/> + <phi class="_blank"> + <sigma attr="attribute value" xml:lang="en-GB" xml:id="id3"> + <omicron xml:lang="en-US"/> + <psi xml:id="id4"> + <pi object="another attribute value"/> + <phi attr="false" xml:id="id5"/> + <omicron att="123456789" xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </psi> + </sigma> + </phi> + </kappa> + </upsilon> + </tree> + </test> + <test> + <xpath>//mu[@xml:lang="no"]//kappa[starts-with(@or,"_b")][@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]//xi[@xml:id="id2"][not(preceding-sibling::*)]//alpha[starts-with(concat(@object,"-"),"123456789-")][@xml:id="id3"][following-sibling::omicron[contains(concat(@attrib,"$"),"nt$")][@xml:lang="no"][not(child::node())][following-sibling::lambda[@insert][@xml:lang="en-US"][@xml:id="id4"][following-sibling::phi[contains(@name,"ut")][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]//beta[@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[contains(@insert,"his.node")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//iota[not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::nu[not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu xml:lang="no"> + <kappa or="_blank" xml:lang="en-US" xml:id="id1"> + <xi xml:id="id2"> + <alpha object="123456789" xml:id="id3"/> + <omicron attrib="content" xml:lang="no"/> + <lambda insert="100%" xml:lang="en-US" xml:id="id4"/> + <phi name="attribute" xml:lang="nb" xml:id="id5"> + <beta xml:lang="en" xml:id="id6"/> + <delta insert="this.nodeValue" xml:id="id7"> + <iota/> + <epsilon xml:lang="en" xml:id="id8"/> + <nu> + <green>This text must be green</green> + </nu> + </delta> + </phi> + </xi> + </kappa> + </mu> + </tree> + </test> + <test> + <xpath>//lambda//iota[@xml:lang="no-nb"][@xml:id="id1"][following-sibling::epsilon[starts-with(concat(@attribute,"-"),"attribute-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@insert][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::*[@attr]/tau[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda> + <iota xml:lang="no-nb" xml:id="id1"/> + <epsilon attribute="attribute-value" xml:lang="nb"/> + <zeta insert="content"/> + <any attr="attribute"> + <tau xml:lang="en-US" xml:id="id2"> + <green>This text must be green</green> + </tau> + </any> + </lambda> + </tree> + </test> + <test> + <xpath>//epsilon[@attrib="attribute value"][@xml:lang="en-US"]//zeta[starts-with(@true,"cont")][@xml:id="id1"][not(following-sibling::*)]//xi[@xml:lang="no"][following-sibling::sigma[preceding-sibling::*[position() = 1]]//xi[starts-with(@desciption,"fa")][not(child::node())][following-sibling::beta[starts-with(@token,"_blank")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::psi[starts-with(@data,"fal")][@xml:id="id3"][following-sibling::zeta[@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::sigma[@string][preceding-sibling::*[position() = 5]][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[starts-with(concat(@true,"-"),"true-")][@xml:id="id5"][preceding-sibling::*[position() = 6]][following-sibling::pi[@xml:lang="en"][@xml:id="id6"]/sigma[contains(concat(@class,"$"),"-att-value$")][@xml:lang="en-GB"]/alpha[not(following-sibling::*)]/mu[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]/lambda[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@att][not(preceding-sibling::*)]//mu[@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 1]]//delta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon attrib="attribute value" xml:lang="en-US"> + <zeta true="content" xml:id="id1"> + <xi xml:lang="no"/> + <sigma> + <xi desciption="false"/> + <beta token="_blank" xml:id="id2"/> + <psi data="false" xml:id="id3"/> + <zeta xml:id="id4"/> + <chi/> + <sigma string="another attribute value"/> + <mu true="true" xml:id="id5"/> + <pi xml:lang="en" xml:id="id6"> + <sigma class="this-is-att-value" xml:lang="en-GB"> + <alpha> + <mu xml:lang="en-GB" xml:id="id7"> + <lambda xml:lang="en"> + <any att="content"> + <mu xml:lang="no-nb" xml:id="id8"/> + <lambda xml:lang="en" xml:id="id9"> + <delta xml:lang="no-nb"/> + <omicron xml:lang="en-US" xml:id="id10"> + <green>This text must be green</green> + </omicron> + </lambda> + </any> + </lambda> + </mu> + </alpha> + </sigma> + </pi> + </sigma> + </zeta> + </epsilon> + </tree> + </test> + <test> + <xpath>//theta[contains(@title,"r")][@xml:id="id1"]//beta[@xml:lang="en-GB"][not(preceding-sibling::*)]/kappa[@xml:lang="en"][@xml:id="id2"][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:lang="nb"][following-sibling::rho[contains(concat(@object,"$"),"nodeValue$")][@xml:lang="en"][not(child::node())][following-sibling::lambda[@data="100%"][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 4]][following-sibling::kappa[contains(concat(@attr,"$"),"-is-att-value$")][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="en-US"][@xml:id="id4"]//phi[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(preceding-sibling::phi)][following-sibling::kappa[contains(@token,"t-va")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[@xml:lang="en-US"][@xml:id="id6"][not(child::node())][following-sibling::rho[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//psi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[contains(@false,"ue")][@xml:lang="no-nb"][@xml:id="id8"][not(following-sibling::*)]//omicron[@insert][@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta title="true" xml:id="id1"> + <beta xml:lang="en-GB"> + <kappa xml:lang="en" xml:id="id2"/> + <iota/> + <lambda xml:lang="nb"/> + <rho object="this.nodeValue" xml:lang="en"/> + <lambda data="100%" xml:lang="no-nb" xml:id="id3"/> + <kappa attr="this-is-att-value" xml:lang="no"/> + <phi xml:lang="en-US" xml:id="id4"> + <phi xml:lang="en" xml:id="id5"/> + <kappa token="this-is-att-value" xml:lang="no"/> + <nu xml:lang="en-US" xml:id="id6"/> + <rho xml:lang="no" xml:id="id7"> + <psi xml:lang="no-nb"> + <mu false="another attribute value" xml:lang="no-nb" xml:id="id8"> + <omicron insert="this-is-att-value" xml:lang="en-GB" xml:id="id9"> + <green>This text must be green</green> + </omicron> + </mu> + </psi> + </rho> + </phi> + </beta> + </theta> + </tree> + </test> + <test> + <xpath>//xi[@insert="100%"]/phi[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[not(preceding-sibling::*)][following-sibling::delta[contains(@title,"ribute")][@xml:lang="en-US"]/eta[starts-with(concat(@desciption,"-"),"true-")][following-sibling::beta[preceding-sibling::*[position() = 1]]/zeta[@class="attribute value"][@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)]//psi[@title="solid 1px green"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[starts-with(@att,"_blank")][@xml:id="id2"]//zeta[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@class][@xml:lang="en-GB"][@xml:id="id3"]//rho[not(preceding-sibling::*)][not(following-sibling::rho)][following-sibling::chi[@xml:lang="en-GB"][@xml:id="id4"][not(following-sibling::*)]//gamma[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::chi[starts-with(@desciption,"con")][@xml:lang="no-nb"][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::eta[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::tau[@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/*[@xml:lang="en"][@xml:id="id9"][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <xi insert="100%"> + <phi xml:lang="no"> + <phi/> + <delta title="attribute" xml:lang="en-US"> + <eta desciption="true"/> + <beta> + <zeta class="attribute value" xml:lang="no" xml:id="id1"> + <psi title="solid 1px green" xml:lang="no-nb"> + <upsilon att="_blank" xml:id="id2"> + <zeta xml:lang="en"> + <beta class="123456789" xml:lang="en-GB" xml:id="id3"> + <rho/> + <chi xml:lang="en-GB" xml:id="id4"> + <gamma xml:lang="no" xml:id="id5"/> + <chi desciption="content" xml:lang="no-nb" xml:id="id6"/> + <eta xml:lang="no-nb" xml:id="id7"/> + <tau xml:id="id8"> + <any xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </any> + </tau> + </chi> + </beta> + </zeta> + </upsilon> + </psi> + </zeta> + </beta> + </delta> + </phi> + </xi> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en"]/upsilon[contains(concat(@attribute,"$"),"ttribute$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[contains(concat(@and,"$"),"00%$")][@xml:lang="nb"][following-sibling::lambda[@xml:lang="no"][@xml:id="id1"][preceding-sibling::*[position() = 2]][following-sibling::phi[contains(@and,"se")][@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::alpha[following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[contains(@number,"lse")][@xml:lang="no-nb"][@xml:id="id2"]/tau[contains(concat(@name,"$"),"e$")][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::epsilon[not(following-sibling::*)]/nu[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::eta[starts-with(concat(@abort,"-"),"false-")][@xml:lang="no"][@xml:id="id5"][not(following-sibling::*)]//omicron[contains(@abort,"value")][@xml:lang="en-GB"][@xml:id="id6"][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <omega xml:lang="en"> + <upsilon attribute="attribute" xml:lang="no-nb"/> + <omega and="100%" xml:lang="nb"/> + <lambda xml:lang="no" xml:id="id1"/> + <phi and="false" xml:lang="nb"/> + <alpha/> + <alpha number="false" xml:lang="no-nb" xml:id="id2"> + <tau name="true" xml:lang="no" xml:id="id3"/> + <epsilon> + <nu xml:id="id4"> + <phi xml:lang="en-US"/> + <eta abort="false" xml:lang="no" xml:id="id5"> + <omicron abort="attribute-value" xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </eta> + </nu> + </epsilon> + </alpha> + </omega> + </tree> + </test> + <test> + <xpath>//chi[@string][@xml:lang="no-nb"][@xml:id="id1"]//kappa[contains(concat(@att,"$"),"odeValue$")][following-sibling::*[position()=2]][following-sibling::tau[contains(concat(@and,"$"),"ribute$")][@xml:lang="en"][not(child::node())][following-sibling::psi[starts-with(concat(@attrib,"-"),"solid 1px green-")][@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 2]]//delta[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:lang="no-nb"][not(following-sibling::*)]/tau[@true][@xml:id="id4"]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi string="content" xml:lang="no-nb" xml:id="id1"> + <kappa att="this.nodeValue"/> + <tau and="attribute" xml:lang="en"/> + <psi attrib="solid 1px green" xml:lang="en-US" xml:id="id2"> + <delta xml:lang="en-GB" xml:id="id3"/> + <beta/> + <omega xml:lang="no-nb"> + <tau true="another attribute value" xml:id="id4"> + <green>This text must be green</green> + </tau> + </omega> + </psi> + </chi> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@abort,"$"),"%$")][@xml:lang="en"][@xml:id="id1"]//epsilon[@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]/pi[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(@data,"tru")][not(child::node())][following-sibling::phi[contains(@string,"e")][@xml:id="id4"][following-sibling::theta[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::xi[@xml:lang="no-nb"][@xml:id="id6"]/mu[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:lang="no-nb"]//phi[starts-with(concat(@string,"-"),"attribute-")][not(child::node())][following-sibling::nu[@xml:lang="no-nb"][following-sibling::upsilon[@xml:id="id8"]//nu[@or][@xml:lang="no"][not(preceding-sibling::*)]//theta[contains(concat(@false,"$"),"bute value$")][@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::omega[preceding-sibling::*[position() = 1]][following-sibling::tau[not(following-sibling::*)]/omicron[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::iota[@attribute="true"][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="en-US"][@xml:id="id11"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/nu[contains(concat(@desciption,"$"),"d 1px green$")][@xml:id="id12"][not(preceding-sibling::*)]/alpha[contains(concat(@attribute,"$"),"ontent$")][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta abort="100%" xml:lang="en" xml:id="id1"> + <epsilon xml:lang="no" xml:id="id2"> + <pi xml:lang="en-GB" xml:id="id3"/> + <kappa data="true"/> + <phi string="attribute value" xml:id="id4"/> + <theta xml:lang="no-nb" xml:id="id5"/> + <xi xml:lang="no-nb" xml:id="id6"> + <mu xml:lang="en-GB" xml:id="id7"/> + <upsilon xml:lang="nb"/> + <beta xml:lang="no-nb"> + <phi string="attribute-value"/> + <nu xml:lang="no-nb"/> + <upsilon xml:id="id8"> + <nu or="this.nodeValue" xml:lang="no"> + <theta false="attribute value" xml:lang="en-GB" xml:id="id9"/> + <omega/> + <tau> + <omicron xml:lang="en-US"/> + <iota attribute="true" xml:id="id10"/> + <tau xml:lang="en-US" xml:id="id11"> + <nu desciption="solid 1px green" xml:id="id12"> + <alpha attribute="content"> + <green>This text must be green</green> + </alpha> + </nu> + </tau> + </tau> + </nu> + </upsilon> + </beta> + </xi> + </epsilon> + </beta> + </tree> + </test> + <test> + <xpath>//nu[@attr][@xml:id="id1"]/psi[contains(@insert,"tribute-value")][following-sibling::pi[preceding-sibling::*[position() = 1]]/omicron[@class="true"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@attr="this-is-att-value"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/zeta[@and][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::mu[starts-with(concat(@insert,"-"),"content-")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@true="123456789"][@xml:lang="en"][@xml:id="id4"]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu attr="123456789" xml:id="id1"> + <psi insert="attribute-value"/> + <pi> + <omicron class="true"/> + <iota attr="this-is-att-value" xml:id="id2"> + <zeta and="100%" xml:lang="en" xml:id="id3"/> + <mu insert="content" xml:lang="no"/> + <omicron true="123456789" xml:lang="en" xml:id="id4"> + <green>This text must be green</green> + </omicron> + </iota> + </pi> + </nu> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(@insert,"10")][@xml:lang="no"][@xml:id="id1"]/mu[not(preceding-sibling::*)][not(following-sibling::*)]/pi[@class="_blank"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@xml:lang="no-nb"][@xml:id="id2"]//zeta[starts-with(@desciption,"at")][not(following-sibling::*)]/theta/lambda[@content="_blank"][@xml:lang="nb"][@xml:id="id3"][not(child::node())][following-sibling::chi[@xml:lang="no-nb"][not(following-sibling::*)]/delta[@number][@xml:lang="en-US"][not(following-sibling::*)]//iota[contains(@and,"s-att-va")][@xml:id="id4"][not(preceding-sibling::*)]//upsilon[@xml:lang="no-nb"][@xml:id="id5"][following-sibling::chi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@xml:lang="nb"]//kappa[contains(concat(@title,"$"),"123456789$")][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(@class,"co")][@xml:lang="no"][following-sibling::alpha[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//zeta[@name][@xml:id="id8"][not(following-sibling::*)]/lambda[@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <upsilon insert="100%" xml:lang="no" xml:id="id1"> + <mu> + <pi class="_blank" xml:lang="no-nb"> + <eta xml:lang="no-nb" xml:id="id2"> + <zeta desciption="attribute"> + <theta> + <lambda content="_blank" xml:lang="nb" xml:id="id3"/> + <chi xml:lang="no-nb"> + <delta number="content" xml:lang="en-US"> + <iota and="this-is-att-value" xml:id="id4"> + <upsilon xml:lang="no-nb" xml:id="id5"/> + <chi> + <beta xml:lang="nb"> + <kappa title="123456789" xml:id="id6"/> + <sigma class="content" xml:lang="no"/> + <alpha xml:lang="no" xml:id="id7"> + <zeta name="attribute" xml:id="id8"> + <lambda xml:lang="nb"/> + <psi xml:lang="nb" xml:id="id9"> + <green>This text must be green</green> + </psi> + </zeta> + </alpha> + </beta> + </chi> + </iota> + </delta> + </chi> + </theta> + </zeta> + </eta> + </pi> + </mu> + </upsilon> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="en-US"][@xml:id="id1"]//nu[starts-with(concat(@desciption,"-"),"this.nodeValue-")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[contains(@false,"lue")][@xml:lang="nb"][@xml:id="id3"]/gamma[@src][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::eta[starts-with(@and,"another attribute val")]//psi[not(preceding-sibling::*)]/zeta[starts-with(@false,"attribute val")][not(child::node())][following-sibling::tau[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::pi)]//gamma[starts-with(@title,"another attribute valu")][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::rho)]/lambda[@xml:lang="no"][@xml:id="id7"][following-sibling::omicron[not(following-sibling::*)]]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi xml:lang="en-US" xml:id="id1"> + <nu desciption="this.nodeValue" xml:lang="en" xml:id="id2"> + <gamma false="attribute value" xml:lang="nb" xml:id="id3"> + <gamma src="solid 1px green" xml:lang="en-GB"/> + <eta and="another attribute value"> + <psi> + <zeta false="attribute value"/> + <tau> + <pi xml:lang="en" xml:id="id4"> + <gamma title="another attribute value" xml:id="id5"/> + <rho xml:lang="no" xml:id="id6"> + <lambda xml:lang="no" xml:id="id7"/> + <omicron> + <green>This text must be green</green> + </omicron> + </rho> + </pi> + </tau> + </psi> + </eta> + </gamma> + </nu> + </psi> + </tree> + </test> + <test> + <xpath>//nu[starts-with(concat(@src,"-"),"attribute-")][@xml:id="id1"]//chi[contains(@attribute,"_")][@xml:lang="no"][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][@xml:id="id2"]//beta[@xml:id="id3"][not(child::node())][following-sibling::upsilon[@token][@xml:lang="no"][not(following-sibling::*)]//theta[@xml:lang="no"]/lambda[contains(concat(@false,"$"),"bute$")][@xml:lang="no"][not(following-sibling::*)]/delta[not(following-sibling::*)]/gamma[@attribute][@xml:lang="no-nb"][not(preceding-sibling::*)]/sigma[@att="this.nodeValue"][@xml:lang="nb"][@xml:id="id4"][following-sibling::nu[@xml:id="id5"][preceding-sibling::*[position() = 1]]/omega[@xml:lang="en-US"][following-sibling::*[position()=2]][not(child::node())][following-sibling::pi[@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/eta[starts-with(concat(@object,"-"),"123456789-")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]]/zeta[contains(concat(@attrib,"$"),"e$")][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[@xml:id="id8"][not(child::node())][following-sibling::epsilon/tau[not(preceding-sibling::*)]//kappa[@xml:lang="nb"][following-sibling::rho[@class][@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//iota[starts-with(concat(@string,"-"),"this-")][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@xml:lang="no-nb"][not(following-sibling::*)]]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <nu src="attribute-value" xml:id="id1"> + <chi attribute="_blank" xml:lang="no"/> + <kappa xml:lang="no-nb" xml:id="id2"> + <beta xml:id="id3"/> + <upsilon token="attribute" xml:lang="no"> + <theta xml:lang="no"> + <lambda false="attribute" xml:lang="no"> + <delta> + <gamma attribute="attribute-value" xml:lang="no-nb"> + <sigma att="this.nodeValue" xml:lang="nb" xml:id="id4"/> + <nu xml:id="id5"> + <omega xml:lang="en-US"/> + <pi xml:lang="en" xml:id="id6"/> + <lambda xml:lang="no-nb"> + <eta object="123456789" xml:lang="en-GB"/> + <iota> + <zeta attrib="attribute" xml:id="id7"> + <zeta xml:id="id8"/> + <epsilon> + <tau> + <kappa xml:lang="nb"/> + <rho class="true" xml:lang="en-GB" xml:id="id9"> + <iota string="this-is-att-value"> + <xi xml:lang="no-nb"> + <green>This text must be green</green> + </xi> + </iota> + </rho> + </tau> + </epsilon> + </zeta> + </iota> + </lambda> + </nu> + </gamma> + </delta> + </lambda> + </theta> + </upsilon> + </kappa> + </nu> + </tree> + </test> + <test> + <xpath>//tau[starts-with(concat(@delete,"-"),"_blank-")]/zeta[starts-with(@attr,"fal")][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//eta[starts-with(@src,"another attribute")][following-sibling::pi[@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 1]]//gamma[@insert][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@content][not(following-sibling::*)]/chi[@object="this-is-att-value"][@xml:lang="no-nb"][not(following-sibling::*)]/gamma[@or][@xml:lang="en-US"][not(following-sibling::*)]//beta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omicron[not(preceding-sibling::*)]/iota[starts-with(concat(@class,"-"),"attribute-")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::chi[starts-with(concat(@src,"-"),"attribute-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau delete="_blank"> + <zeta attr="false" xml:lang="no"/> + <iota xml:lang="en-GB"> + <eta src="another attribute value"/> + <pi xml:lang="en-US" xml:id="id1"> + <gamma insert="solid 1px green"/> + <chi content="attribute"> + <chi object="this-is-att-value" xml:lang="no-nb"> + <gamma or="attribute" xml:lang="en-US"> + <beta xml:id="id2"/> + <lambda xml:lang="en-US"> + <omicron> + <iota class="attribute" xml:lang="no-nb"/> + <chi src="attribute" xml:lang="no-nb"> + <green>This text must be green</green> + </chi> + </omicron> + </lambda> + </gamma> + </chi> + </chi> + </pi> + </iota> + </tau> + </tree> + </test> + <test> + <xpath>//psi[contains(@att,"bute val")][@xml:lang="no-nb"]/psi[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[starts-with(concat(@or,"-"),"content-")][preceding-sibling::*[position() = 1]]/xi[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::rho[@false="_blank"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::phi[@xml:lang="en-GB"][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 4]][following-sibling::eta[@attrib][@xml:lang="en-US"][@xml:id="id4"][following-sibling::nu[@xml:lang="en-GB"][preceding-sibling::*[position() = 6]]/upsilon[@xml:lang="en"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::kappa[@title][preceding-sibling::*[position() = 1]]]]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <psi att="attribute value" xml:lang="no-nb"> + <psi xml:id="id1"> + <nu/> + <pi or="content"> + <xi xml:id="id2"/> + <pi xml:lang="en-GB" xml:id="id3"/> + <rho false="_blank"/> + <phi xml:lang="en-GB"/> + <alpha/> + <eta attrib="true" xml:lang="en-US" xml:id="id4"/> + <nu xml:lang="en-GB"> + <upsilon xml:lang="en" xml:id="id5"/> + <kappa title="attribute value"> + <green>This text must be green</green> + </kappa> + </nu> + </pi> + </psi> + </psi> + </tree> + </test> + <test> + <xpath>//phi[contains(concat(@abort,"$"),"te value$")][@xml:lang="en"][@xml:id="id1"]/lambda[following-sibling::*[position()=1]][following-sibling::delta[not(following-sibling::*)]/iota[contains(@attr,"tent")][@xml:lang="en"][not(preceding-sibling::*)]//lambda[@desciption="_blank"][@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::xi[@attribute][@xml:id="id3"][preceding-sibling::*[position() = 1]]//nu[@xml:id="id4"][not(child::node())][following-sibling::*[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][position() = 1]]]]</xpath> + <tree> + <phi abort="attribute value" xml:lang="en" xml:id="id1"> + <lambda/> + <delta> + <iota attr="content" xml:lang="en"> + <lambda desciption="_blank" xml:lang="no" xml:id="id2"/> + <xi attribute="attribute" xml:id="id3"> + <nu xml:id="id4"/> + <any xml:lang="en-GB" xml:id="id5"> + <green>This text must be green</green> + </any> + </xi> + </iota> + </delta> + </phi> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]/gamma[@content][@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]//iota[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[starts-with(concat(@attribute,"-"),"solid 1px green-")][@xml:id="id3"][not(following-sibling::*)]/gamma[not(preceding-sibling::*)][following-sibling::psi[@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::chi[@title][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::sigma[starts-with(@attribute,"at")][@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/phi[@xml:lang="no"][following-sibling::*[position()=2]][not(child::node())][following-sibling::gamma[@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@number][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau[@name][@xml:lang="en-GB"][@xml:id="id6"]/nu[contains(@class,"tru")][@xml:lang="en-US"][following-sibling::zeta[contains(@abort,"tent")][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::iota[@xml:lang="en"][@xml:id="id8"][not(following-sibling::*)]/tau[@att][@xml:lang="en-GB"][not(following-sibling::*)]//alpha[starts-with(concat(@data,"-"),"another attribute value-")][@xml:lang="en-GB"][@xml:id="id9"]/kappa[@string][not(preceding-sibling::*)]]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <iota xml:id="id1"> + <gamma content="attribute" xml:lang="en-GB" xml:id="id2"> + <iota xml:lang="nb"> + <upsilon attribute="solid 1px green" xml:id="id3"> + <gamma/> + <psi xml:id="id4"/> + <chi title="123456789" xml:lang="no-nb"/> + <sigma attribute="attribute value" xml:lang="no"> + <phi xml:lang="no"/> + <gamma xml:id="id5"/> + <lambda number="content" xml:lang="nb"> + <tau name="content" xml:lang="en-GB" xml:id="id6"> + <nu class="true" xml:lang="en-US"/> + <zeta abort="content" xml:id="id7"/> + <iota xml:lang="en" xml:id="id8"> + <tau att="this-is-att-value" xml:lang="en-GB"> + <alpha data="another attribute value" xml:lang="en-GB" xml:id="id9"> + <kappa string="attribute-value"> + <green>This text must be green</green> + </kappa> + </alpha> + </tau> + </iota> + </tau> + </lambda> + </sigma> + </upsilon> + </iota> + </gamma> + </iota> + </tree> + </test> + <test> + <xpath>//mu[contains(concat(@token,"$"),"%$")]//alpha[starts-with(concat(@src,"-"),"this-")][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[contains(concat(@desciption,"$"),"00%$")][@xml:id="id1"][not(following-sibling::*)]/zeta[@xml:lang="nb"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[not(following-sibling::*)]/pi[starts-with(@abort,"another attribute v")][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::beta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@number]//iota[@xml:lang="no-nb"][@xml:id="id4"][following-sibling::pi[not(child::node())][following-sibling::sigma[@xml:id="id5"][preceding-sibling::*[position() = 2]]/mu[contains(concat(@class,"$"),"t-value$")][@xml:lang="en-GB"][not(following-sibling::*)]//alpha[starts-with(@title,"this-i")][@xml:id="id6"][not(child::node())][following-sibling::iota[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@xml:lang="no-nb"][not(child::node())][following-sibling::eta[@xml:id="id7"][preceding-sibling::*[position() = 1]]//omicron[@and="this.nodeValue"][@xml:id="id8"][not(preceding-sibling::*)]/lambda[@abort][@xml:lang="en"]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <mu token="100%"> + <alpha src="this-is-att-value"/> + <eta desciption="100%" xml:id="id1"> + <zeta xml:lang="nb" xml:id="id2"/> + <delta> + <pi abort="another attribute value" xml:lang="en-GB" xml:id="id3"/> + <beta/> + <iota number="solid 1px green"> + <iota xml:lang="no-nb" xml:id="id4"/> + <pi/> + <sigma xml:id="id5"> + <mu class="this-is-att-value" xml:lang="en-GB"> + <alpha title="this-is-att-value" xml:id="id6"/> + <iota xml:lang="en-US"> + <alpha xml:lang="no-nb"/> + <eta xml:id="id7"> + <omicron and="this.nodeValue" xml:id="id8"> + <lambda abort="attribute" xml:lang="en"> + <green>This text must be green</green> + </lambda> + </omicron> + </eta> + </iota> + </mu> + </sigma> + </iota> + </delta> + </eta> + </mu> + </tree> + </test> + <test> + <xpath>//omega[starts-with(concat(@token,"-"),"true-")]/gamma[@attribute]//pi[starts-with(concat(@desciption,"-"),"_blank-")][@xml:id="id1"][not(child::node())][following-sibling::*[contains(@token,"attrib")][@xml:id="id2"][preceding-sibling::*[position() = 1]]//chi[not(preceding-sibling::*)][following-sibling::nu[@attribute][@xml:lang="en-US"]/epsilon[@false="attribute"][@xml:lang="nb"][not(child::node())][following-sibling::delta[@xml:id="id3"][not(following-sibling::*)]//upsilon[not(child::node())][following-sibling::rho[@xml:lang="en-GB"][following-sibling::xi[contains(concat(@string,"$"),"alue$")][following-sibling::mu[@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//kappa[contains(concat(@and,"$"),"nodeValue$")][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega token="true"> + <gamma attribute="false"> + <pi desciption="_blank" xml:id="id1"/> + <any token="attribute" xml:id="id2"> + <chi/> + <nu attribute="this-is-att-value" xml:lang="en-US"> + <epsilon false="attribute" xml:lang="nb"/> + <delta xml:id="id3"> + <upsilon/> + <rho xml:lang="en-GB"/> + <xi string="attribute-value"/> + <mu xml:lang="no-nb"> + <kappa and="this.nodeValue"> + <green>This text must be green</green> + </kappa> + </mu> + </delta> + </nu> + </any> + </gamma> + </omega> + </tree> + </test> + <test> + <xpath>//nu[starts-with(@attr,"_")][@xml:lang="nb"]//alpha[not(following-sibling::*)]/phi[not(following-sibling::*)]/theta[contains(concat(@abort,"$"),"k$")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@number,"$"),"-att-value$")][@xml:id="id1"][not(child::node())][following-sibling::upsilon[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/*[contains(@abort," 1px green")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::rho[@xml:lang="no"][preceding-sibling::*[position() = 1]]//xi[@xml:lang="en"][not(preceding-sibling::*)]//xi[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[contains(concat(@attrib,"$"),"-value$")][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@object,"$"),"alse$")][@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]]/iota[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@att][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 2]]/lambda[@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@xml:id="id8"][preceding-sibling::*[position() = 1]]//chi[@number][@xml:lang="en-GB"][following-sibling::mu[@abort][@xml:id="id9"][not(following-sibling::*)]]]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <nu attr="_blank" xml:lang="nb"> + <alpha> + <phi> + <theta abort="_blank" xml:lang="nb"> + <zeta xml:lang="no-nb"/> + <alpha number="this-is-att-value" xml:id="id1"/> + <upsilon xml:lang="en-US" xml:id="id2"> + <any abort="solid 1px green" xml:lang="nb" xml:id="id3"/> + <rho xml:lang="no"> + <xi xml:lang="en"> + <xi xml:lang="no-nb" xml:id="id4"> + <eta attrib="this-is-att-value" xml:lang="no" xml:id="id5"/> + <alpha object="false" xml:lang="no-nb" xml:id="id6"> + <iota xml:lang="en-US" xml:id="id7"/> + <eta att="content"/> + <eta> + <lambda xml:lang="en-US"/> + <pi xml:id="id8"> + <chi number="_blank" xml:lang="en-GB"/> + <mu abort="false" xml:id="id9"> + <green>This text must be green</green> + </mu> + </pi> + </eta> + </alpha> + </xi> + </xi> + </rho> + </upsilon> + </theta> + </phi> + </alpha> + </nu> + </tree> + </test> + <test> + <xpath>//sigma//gamma[not(following-sibling::*)]/kappa[@attr="_blank"][@xml:lang="en-GB"][not(following-sibling::*)]/nu[@xml:lang="en"][@xml:id="id1"][following-sibling::kappa[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[not(child::node())][following-sibling::psi[@or][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(preceding-sibling::psi)]//gamma[@true][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::pi[@data][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omicron[@token][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//psi[contains(@false,"se")][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::zeta[@class="attribute"][@xml:lang="no-nb"][@xml:id="id7"][following-sibling::lambda[@title="another attribute value"]/chi[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[starts-with(concat(@attribute,"-"),"attribute value-")][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::epsilon[@xml:id="id9"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::zeta[@xml:id="id10"][preceding-sibling::*[position() = 3]]/beta[@xml:lang="en-US"][@xml:id="id11"][not(following-sibling::*)]//rho[@xml:id="id12"][not(following-sibling::*)]/iota[@xml:id="id13"][not(preceding-sibling::*)][not(following-sibling::*)]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <sigma> + <gamma> + <kappa attr="_blank" xml:lang="en-GB"> + <nu xml:lang="en" xml:id="id1"/> + <kappa> + <omega/> + <psi or="true" xml:id="id2"> + <gamma true="this-is-att-value" xml:id="id3"/> + <iota xml:id="id4"/> + <pi data="100%" xml:id="id5"/> + <omicron token="another attribute value"> + <psi false="false" xml:lang="no" xml:id="id6"/> + <zeta class="attribute" xml:lang="no-nb" xml:id="id7"/> + <lambda title="another attribute value"> + <chi xml:lang="en"/> + <sigma attribute="attribute value" xml:id="id8"/> + <epsilon xml:id="id9"/> + <zeta xml:id="id10"> + <beta xml:lang="en-US" xml:id="id11"> + <rho xml:id="id12"> + <iota xml:id="id13"> + <green>This text must be green</green> + </iota> + </rho> + </beta> + </zeta> + </lambda> + </omicron> + </psi> + </kappa> + </kappa> + </gamma> + </sigma> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]//theta[starts-with(concat(@true,"-"),"123456789-")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::pi[contains(concat(@attr,"$"),"value$")][@xml:lang="en-US"][not(child::node())][following-sibling::phi[following-sibling::*[position()=1]][following-sibling::beta[contains(concat(@true,"$"),"e$")][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//zeta[following-sibling::eta[starts-with(concat(@number,"-"),"attribute-")][preceding-sibling::*[position() = 1]][not(preceding-sibling::eta or following-sibling::eta)]//omicron[not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:id="id4"]/kappa[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[not(preceding-sibling::*)][not(following-sibling::*)]//pi[following-sibling::epsilon[contains(concat(@att,"$"),"e$")][not(following-sibling::*)]/lambda[contains(@true,"00%")][@xml:lang="en-US"][not(following-sibling::*)]/omega[@xml:lang="no"][not(preceding-sibling::*)]]]]]]]</xpath> + <tree> + <rho xml:id="id1"> + <theta true="123456789" xml:lang="en-US" xml:id="id2"/> + <pi attr="attribute-value" xml:lang="en-US"/> + <phi/> + <beta true="attribute value" xml:lang="en-US" xml:id="id3"> + <zeta/> + <eta number="attribute-value"> + <omicron/> + <nu xml:id="id4"> + <kappa xml:lang="no"> + <epsilon> + <pi/> + <epsilon att="attribute value"> + <lambda true="100%" xml:lang="en-US"> + <omega xml:lang="no"> + <green>This text must be green</green> + </omega> + </lambda> + </epsilon> + </epsilon> + </kappa> + </nu> + </eta> + </beta> + </rho> + </tree> + </test> + <test> + <xpath>//psi[starts-with(concat(@attribute,"-"),"true-")][@xml:lang="en-US"][@xml:id="id1"]//chi[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@or][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::iota[starts-with(concat(@insert,"-"),"123456789-")][@xml:lang="en-GB"][@xml:id="id3"]/epsilon[starts-with(@false,"this-")][not(preceding-sibling::*)]/rho[not(following-sibling::*)]/gamma[@xml:lang="no-nb"]/alpha[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[starts-with(concat(@data,"-"),"attribute-")][@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::tau[contains(@desciption," value")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[starts-with(concat(@and,"-"),"attribute-")][@xml:lang="no"][not(child::node())][following-sibling::chi[starts-with(@string,"another at")][@xml:id="id5"][following-sibling::xi[preceding-sibling::*[position() = 2]]/alpha[contains(@class,"s-att-value")][not(following-sibling::*)]//eta[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@content][preceding-sibling::*[position() = 1]]//psi[not(preceding-sibling::*)][not(child::node())][following-sibling::pi[starts-with(concat(@true,"-"),"another attribute value-")][@xml:lang="en-US"][@xml:id="id7"][not(following-sibling::*)]/theta[@xml:lang="nb"][position() = 1]]]]]]][position() = 1]]</xpath> + <tree> + <psi attribute="true" xml:lang="en-US" xml:id="id1"> + <chi xml:id="id2"/> + <zeta or="100%" xml:lang="en-US"/> + <iota insert="123456789" xml:lang="en-GB" xml:id="id3"> + <epsilon false="this-is-att-value"> + <rho> + <gamma xml:lang="no-nb"> + <alpha xml:id="id4"> + <psi data="attribute" xml:lang="en"/> + <tau desciption="attribute value"> + <tau and="attribute" xml:lang="no"/> + <chi string="another attribute value" xml:id="id5"/> + <xi> + <alpha class="this-is-att-value"> + <eta xml:id="id6"/> + <sigma content="this.nodeValue"> + <psi/> + <pi true="another attribute value" xml:lang="en-US" xml:id="id7"> + <theta xml:lang="nb"> + <green>This text must be green</green> + </theta> + </pi> + </sigma> + </alpha> + </xi> + </tau> + </alpha> + </gamma> + </rho> + </epsilon> + </iota> + </psi> + </tree> + </test> + <test> + <xpath>//xi/eta[contains(@content,"bla")][@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[contains(concat(@number,"$"),"bute value$")][preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]/epsilon[contains(@delete,"alue")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[contains(concat(@att,"$"),"00%$")][@xml:id="id2"][not(child::node())][following-sibling::iota[following-sibling::*[position()=5]][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][not(child::node())][following-sibling::epsilon[@false="this-is-att-value"][@xml:lang="en"][not(child::node())][following-sibling::omega[following-sibling::chi[starts-with(concat(@desciption,"-"),"content-")][@xml:lang="en"][preceding-sibling::*[position() = 5]][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 6]][not(following-sibling::*)]/rho[not(preceding-sibling::*)][following-sibling::lambda[preceding-sibling::*[position() = 1]][following-sibling::theta[@attribute="_blank"]//epsilon[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)]//*[starts-with(@object,"conte")][@xml:lang="no"][@xml:id="id5"][following-sibling::*[@attribute][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@content][@xml:lang="en"][following-sibling::upsilon//gamma[starts-with(concat(@class,"-"),"attribute value-")][not(following-sibling::*)]//rho[@src][@xml:id="id6"][not(following-sibling::*)]//beta[@xml:id="id7"][not(preceding-sibling::*)][position() = 1]]]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi> + <eta content="_blank" xml:lang="no-nb" xml:id="id1"/> + <omega number="attribute value"/> + <omicron xml:lang="en-GB"> + <epsilon delete="attribute-value" xml:lang="en-GB"> + <lambda att="100%" xml:id="id2"/> + <iota/> + <kappa xml:lang="no-nb"/> + <epsilon false="this-is-att-value" xml:lang="en"/> + <omega/> + <chi desciption="content" xml:lang="en"/> + <tau xml:lang="en-US" xml:id="id3"> + <rho/> + <lambda/> + <theta attribute="_blank"> + <epsilon xml:lang="nb" xml:id="id4"> + <any object="content" xml:lang="no" xml:id="id5"/> + <any attribute="123456789"> + <chi content="true" xml:lang="en"/> + <upsilon> + <gamma class="attribute value"> + <rho src="100%" xml:id="id6"> + <beta xml:id="id7"> + <green>This text must be green</green> + </beta> + </rho> + </gamma> + </upsilon> + </any> + </epsilon> + </theta> + </tau> + </epsilon> + </omicron> + </xi> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="nb"]//upsilon[contains(concat(@number,"$"),"e value$")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[starts-with(concat(@abort,"-"),"attribute value-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[starts-with(@insert,"_")][@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:id="id2"][not(child::node())][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::delta[starts-with(concat(@attribute,"-"),"solid 1px green-")][@xml:lang="en"][preceding-sibling::*[position() = 2]]/omega[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::beta[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::psi[@name][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omicron[@title="attribute value"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//kappa[starts-with(concat(@title,"-"),"attribute-")][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:id="id5"][not(following-sibling::*)]//alpha[following-sibling::rho[preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:lang="nb"]/nu[@number][not(child::node())][following-sibling::pi[starts-with(@object,"false")][@xml:id="id6"]//psi[@false][@xml:id="id7"][not(preceding-sibling::*)]/epsilon[contains(concat(@false,"$"),"nk$")][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[following-sibling::*[position()=2]][not(child::node())][following-sibling::lambda[contains(@object,"bute value")][@xml:id="id8"][not(child::node())][following-sibling::pi[contains(concat(@desciption,"$"),"s.nodeValue$")][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="nb"> + <upsilon number="attribute value"/> + <nu abort="attribute value" xml:lang="nb"> + <omicron insert="_blank" xml:lang="no-nb" xml:id="id1"> + <beta xml:id="id2"/> + <alpha xml:id="id3"/> + <delta attribute="solid 1px green" xml:lang="en"> + <omega xml:lang="en"/> + <beta xml:lang="nb"/> + <psi name="attribute value"/> + <omicron title="attribute value" xml:id="id4"> + <kappa title="attribute"> + <zeta xml:id="id5"> + <alpha/> + <rho/> + <theta xml:lang="nb"> + <nu number="content"/> + <pi object="false" xml:id="id6"> + <psi false="another attribute value" xml:id="id7"> + <epsilon false="_blank"/> + <rho/> + <lambda object="attribute value" xml:id="id8"/> + <pi desciption="this.nodeValue"> + <green>This text must be green</green> + </pi> + </psi> + </pi> + </theta> + </zeta> + </kappa> + </omicron> + </delta> + </omicron> + </nu> + </omicron> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-US"]/psi[contains(@data,"e")][not(preceding-sibling::*)]//tau[@xml:lang="no-nb"][@xml:id="id1"][not(child::node())][following-sibling::zeta[not(child::node())][following-sibling::iota[@xml:lang="en-GB"][not(child::node())][following-sibling::mu[@attr="attribute-value"][@xml:lang="no"][not(following-sibling::*)]/delta[@xml:id="id2"]//kappa[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::*[starts-with(concat(@abort,"-"),"this-")][@xml:id="id4"][following-sibling::rho[@xml:id="id5"][following-sibling::alpha[@object="this-is-att-value"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 4]]/delta[contains(concat(@content,"$"),"blank$")][not(following-sibling::*)]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <any xml:lang="en-US"> + <psi data="true"> + <tau xml:lang="no-nb" xml:id="id1"/> + <zeta/> + <iota xml:lang="en-GB"/> + <mu attr="attribute-value" xml:lang="no"> + <delta xml:id="id2"> + <kappa xml:id="id3"/> + <any abort="this-is-att-value" xml:id="id4"/> + <rho xml:id="id5"/> + <alpha object="this-is-att-value"/> + <rho xml:lang="no-nb" xml:id="id6"> + <delta content="_blank"> + <green>This text must be green</green> + </delta> + </rho> + </delta> + </mu> + </psi> + </any> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]/theta[@true][@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::delta[following-sibling::omicron[contains(concat(@desciption,"$"),"ribute$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::kappa[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]//beta[@attrib][@xml:lang="en"][@xml:id="id4"][not(child::node())][following-sibling::upsilon[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha xml:id="id1"> + <theta true="attribute-value" xml:lang="no" xml:id="id2"/> + <delta/> + <omicron desciption="attribute" xml:lang="en-GB"/> + <kappa xml:lang="en-US" xml:id="id3"> + <beta attrib="another attribute value" xml:lang="en" xml:id="id4"/> + <upsilon token="attribute-value" xml:lang="nb"> + <green>This text must be green</green> + </upsilon> + </kappa> + </alpha> + </tree> + </test> + <test> + <xpath>//chi[starts-with(concat(@object,"-"),"this.nodeValue-")][@xml:lang="no"]/iota[@attr][following-sibling::eta[preceding-sibling::*[position() = 1]]/psi[following-sibling::*[position()=1]][following-sibling::lambda[@abort][@xml:lang="no"][@xml:id="id1"]/*[@xml:lang="no"][@xml:id="id2"]//phi[starts-with(concat(@abort,"-"),"true-")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:id="id4"][not(child::node())][following-sibling::iota[@xml:id="id5"]//phi[contains(@src,"10")][@xml:id="id6"][not(preceding-sibling::*)][not(preceding-sibling::phi or following-sibling::phi)][following-sibling::tau[not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]//delta[@data][@xml:lang="nb"][not(child::node())][following-sibling::omega[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[contains(@false,"r")]/xi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[position() = 1]][position() = 1]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <chi object="this.nodeValue" xml:lang="no"> + <iota attr="solid 1px green"/> + <eta> + <psi/> + <lambda abort="false" xml:lang="no" xml:id="id1"> + <any xml:lang="no" xml:id="id2"> + <phi abort="true" xml:lang="no-nb" xml:id="id3"> + <xi xml:id="id4"/> + <iota xml:id="id5"> + <phi src="100%" xml:id="id6"/> + <tau/> + <omicron xml:lang="en-GB"> + <delta data="false" xml:lang="nb"/> + <omega xml:id="id7"> + <phi xml:lang="en-GB"/> + <kappa false="true"> + <xi xml:lang="en"/> + <theta> + <green>This text must be green</green> + </theta> + </kappa> + </omega> + </omicron> + </iota> + </phi> + </any> + </lambda> + </eta> + </chi> + </tree> + </test> + <test> + <xpath>//xi[@xml:lang="en-GB"]//omicron[@xml:id="id1"][not(preceding-sibling::*)]//*[@true="this-is-att-value"][@xml:id="id2"][following-sibling::chi[@xml:id="id3"][not(following-sibling::*)]//alpha//epsilon[@object][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@src][not(preceding-sibling::*)]/kappa[starts-with(concat(@false,"-"),"another attribute value-")]/xi[starts-with(concat(@number,"-"),"123456789-")][@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::mu[contains(@delete,"r")][not(following-sibling::*)]//xi[starts-with(@name,"_blan")][following-sibling::*[@xml:id="id6"][not(following-sibling::*)]/*[@object][@xml:lang="no-nb"][not(following-sibling::*)]/eta[@xml:lang="no-nb"][not(following-sibling::*)]/epsilon[@or="attribute value"][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::psi[@delete][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::kappa[@xml:id="id8"]//omega[@data][@xml:lang="en-US"][not(preceding-sibling::*)]/mu[starts-with(concat(@attribute,"-"),"true-")][@xml:id="id9"][not(following-sibling::*)]//eta[contains(concat(@number,"$"),"ue$")][@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[starts-with(concat(@attrib,"-"),"attribute-")][@xml:lang="en"][not(preceding-sibling::*)]/eta[@true][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::alpha[@data="100%"][@xml:id="id11"]//omicron[@src="this-is-att-value"][@xml:id="id12"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <xi xml:lang="en-GB"> + <omicron xml:id="id1"> + <any true="this-is-att-value" xml:id="id2"/> + <chi xml:id="id3"> + <alpha> + <epsilon object="this.nodeValue" xml:lang="en" xml:id="id4"> + <any src="this.nodeValue"> + <kappa false="another attribute value"> + <xi number="123456789" xml:lang="nb" xml:id="id5"/> + <mu delete="true"> + <xi name="_blank"/> + <any xml:id="id6"> + <any object="this.nodeValue" xml:lang="no-nb"> + <eta xml:lang="no-nb"> + <epsilon or="attribute value" xml:lang="en-GB"/> + <psi delete="solid 1px green" xml:id="id7"/> + <kappa xml:id="id8"> + <omega data="attribute" xml:lang="en-US"> + <mu attribute="true" xml:id="id9"> + <eta number="true" xml:lang="en-US" xml:id="id10"> + <alpha attrib="attribute" xml:lang="en"> + <eta true="content" xml:lang="no"/> + <alpha data="100%" xml:id="id11"> + <omicron src="this-is-att-value" xml:id="id12"> + <green>This text must be green</green> + </omicron> + </alpha> + </alpha> + </eta> + </mu> + </omega> + </kappa> + </eta> + </any> + </any> + </mu> + </kappa> + </any> + </epsilon> + </alpha> + </chi> + </omicron> + </xi> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="en-US"]//zeta[@attribute][@xml:id="id1"][not(preceding-sibling::*)]//lambda[@attr="100%"][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]//rho[contains(concat(@src,"$"),"Value$")][@xml:lang="en-US"][not(preceding-sibling::*)]/rho[contains(@name,"e")][not(preceding-sibling::*)]/psi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[@or][@xml:id="id3"][not(following-sibling::*)]//psi//chi[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::tau[@string="false"][preceding-sibling::*[position() = 2]][following-sibling::delta[@xml:id="id4"]/kappa[@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::omicron[starts-with(@string,"tr")][@xml:lang="no"][@xml:id="id6"][not(following-sibling::*)]//kappa[starts-with(@abort,"attr")]//omega[@desciption][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="nb"][preceding-sibling::*[position() = 1]]//delta[starts-with(@attribute,"_b")][@xml:id="id7"][following-sibling::mu[@number][@xml:lang="no"][@xml:id="id8"]/chi[@xml:lang="no-nb"][@xml:id="id9"]/eta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:id="id10"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta xml:lang="en-US"> + <zeta attribute="false" xml:id="id1"> + <lambda attr="100%" xml:lang="en" xml:id="id2"> + <rho src="this.nodeValue" xml:lang="en-US"> + <rho name="true"> + <psi xml:lang="no-nb"/> + <epsilon or="another attribute value" xml:id="id3"> + <psi> + <chi/> + <iota xml:lang="en"/> + <tau string="false"/> + <delta xml:id="id4"> + <kappa xml:lang="en-US" xml:id="id5"/> + <omicron string="true" xml:lang="no" xml:id="id6"> + <kappa abort="attribute"> + <omega desciption="another attribute value" xml:lang="no"/> + <sigma xml:lang="nb"> + <delta attribute="_blank" xml:id="id7"/> + <mu number="false" xml:lang="no" xml:id="id8"> + <chi xml:lang="no-nb" xml:id="id9"> + <eta xml:lang="no"/> + <lambda xml:id="id10"> + <green>This text must be green</green> + </lambda> + </chi> + </mu> + </sigma> + </kappa> + </omicron> + </delta> + </psi> + </epsilon> + </rho> + </rho> + </lambda> + </zeta> + </eta> + </tree> + </test> + <test> + <xpath>//omega[@name][@xml:lang="en-GB"]/lambda[@content][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@xml:lang="no"][@xml:id="id2"]/beta[starts-with(@abort,"1")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:id="id3"][not(child::node())][following-sibling::*[@xml:lang="en-GB"][not(child::node())][following-sibling::rho[starts-with(@true,"th")][@xml:lang="no"][preceding-sibling::*[position() = 2]]//phi[starts-with(concat(@object,"-"),"attribute value-")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::sigma[starts-with(@insert,"tru")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[@xml:lang="en"][not(child::node())][following-sibling::delta[@xml:lang="en"][@xml:id="id5"][not(following-sibling::*)]//theta[contains(@or,"tribute")][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::iota[preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[starts-with(@and,"_b")][@xml:lang="nb"][following-sibling::psi[contains(@attribute,"att-value")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/phi[@xml:lang="en-US"][position() = 1]][position() = 1]]]]]]][position() = 1]]]</xpath> + <tree> + <omega name="attribute" xml:lang="en-GB"> + <lambda content="false" xml:id="id1"/> + <eta xml:lang="no" xml:id="id2"> + <beta abort="100%" xml:lang="no-nb"> + <rho xml:id="id3"/> + <any xml:lang="en-GB"/> + <rho true="this-is-att-value" xml:lang="no"> + <phi object="attribute value" xml:lang="nb"/> + <sigma insert="true" xml:lang="no" xml:id="id4"/> + <upsilon xml:lang="en"/> + <delta xml:lang="en" xml:id="id5"> + <theta or="attribute" xml:lang="no" xml:id="id6"/> + <iota/> + <rho and="_blank" xml:lang="nb"/> + <psi attribute="this-is-att-value"> + <phi xml:lang="en-US"> + <green>This text must be green</green> + </phi> + </psi> + </delta> + </rho> + </beta> + </eta> + </omega> + </tree> + </test> + <test> + <xpath>//eta[@xml:id="id1"]/eta[following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[contains(concat(@class,"$"),"er attribute value$")][@xml:lang="en-US"][not(following-sibling::*)]/alpha[@class][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:id="id2"][not(child::node())][following-sibling::kappa[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//rho[starts-with(concat(@insert,"-"),"attribute-")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::nu[@number][@xml:lang="no-nb"]/upsilon[@xml:id="id4"][not(following-sibling::*)]/eta[@insert][@xml:id="id5"][not(following-sibling::*)]//alpha[contains(@title,"ttribu")][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@object="true"][@xml:id="id7"][following-sibling::nu[@attr][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//kappa[@token][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::kappa[@true="100%"][@xml:id="id9"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta xml:id="id1"> + <eta/> + <psi class="another attribute value" xml:lang="en-US"> + <alpha class="123456789" xml:lang="no"/> + <chi xml:id="id2"/> + <kappa xml:lang="en-US" xml:id="id3"> + <rho insert="attribute-value" xml:lang="nb"/> + <nu number="123456789" xml:lang="no-nb"> + <upsilon xml:id="id4"> + <eta insert="attribute-value" xml:id="id5"> + <alpha title="attribute value" xml:id="id6"/> + <kappa object="true" xml:id="id7"/> + <nu attr="solid 1px green"> + <kappa token="true" xml:id="id8"/> + <kappa true="100%" xml:id="id9"> + <green>This text must be green</green> + </kappa> + </nu> + </eta> + </upsilon> + </nu> + </kappa> + </psi> + </eta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="en"][@xml:id="id1"]//omega[starts-with(concat(@name,"-"),"content-")][not(preceding-sibling::*)]//epsilon[@xml:id="id2"][not(preceding-sibling::*)]/upsilon[@false="content"][@xml:lang="en"][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/sigma[contains(@abort,"t")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::alpha[not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::mu[not(following-sibling::*)]/delta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]]][position() = 1]]]</xpath> + <tree> + <sigma xml:lang="en" xml:id="id1"> + <omega name="content"> + <epsilon xml:id="id2"> + <upsilon false="content" xml:lang="en"/> + <beta xml:id="id3"/> + <xi xml:id="id4"> + <sigma abort="content" xml:lang="no-nb"> + <pi xml:lang="nb" xml:id="id5"/> + <alpha/> + <kappa/> + <mu> + <delta xml:lang="no"/> + <pi> + <green>This text must be green</green> + </pi> + </mu> + </sigma> + </xi> + </epsilon> + </omega> + </sigma> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="no-nb"][@xml:id="id1"]//omega[starts-with(@number,"soli")][not(preceding-sibling::*)]//mu[@xml:lang="en-GB"][not(child::node())][following-sibling::eta[starts-with(concat(@false,"-"),"_blank-")][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/nu[contains(@false,"%")][not(preceding-sibling::*)]/psi[@and][@xml:lang="en-GB"][following-sibling::eta[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::alpha[following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//nu[@xml:lang="en-GB"][not(preceding-sibling::*)]//pi[contains(concat(@title,"$"),"e$")][following-sibling::theta[starts-with(concat(@attr,"-"),"false-")][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <theta xml:lang="no-nb" xml:id="id1"> + <omega number="solid 1px green"> + <mu xml:lang="en-GB"/> + <eta false="_blank" xml:id="id2"/> + <phi xml:id="id3"> + <nu false="100%"> + <psi and="this.nodeValue" xml:lang="en-GB"/> + <eta xml:id="id4"/> + <alpha/> + <omicron xml:lang="en-GB" xml:id="id5"> + <nu xml:lang="en-GB"> + <pi title="true"/> + <theta attr="false"> + <green>This text must be green</green> + </theta> + </nu> + </omicron> + </nu> + </phi> + </omega> + </theta> + </tree> + </test> + <test> + <xpath>//alpha[@true][@xml:lang="en-US"]//nu[@xml:lang="nb"]//xi[@xml:lang="no-nb"][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::delta[@object][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//psi[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon//omega[contains(concat(@title,"$"),"id 1px green$")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@xml:id="id4"][not(preceding-sibling::*)]/omicron[@attribute][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:id="id5"]/upsilon[@attribute][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@attribute="attribute-value"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[contains(concat(@delete,"$"),"ibute-value$")][@xml:lang="en-US"][following-sibling::phi[@src="this-is-att-value"][@xml:id="id8"][following-sibling::rho[@xml:lang="en"][@xml:id="id9"][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha true="this.nodeValue" xml:lang="en-US"> + <nu xml:lang="nb"> + <xi xml:lang="no-nb" xml:id="id1"/> + <delta object="solid 1px green" xml:lang="en" xml:id="id2"> + <psi xml:id="id3"/> + <epsilon> + <omega title="solid 1px green" xml:lang="en-US"> + <psi xml:id="id4"> + <omicron attribute="_blank"/> + <xi xml:id="id5"> + <upsilon attribute="content" xml:lang="no" xml:id="id6"/> + <phi attribute="attribute-value" xml:id="id7"/> + <alpha delete="attribute-value" xml:lang="en-US"/> + <phi src="this-is-att-value" xml:id="id8"/> + <rho xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </rho> + </xi> + </psi> + </omega> + </epsilon> + </delta> + </nu> + </alpha> + </tree> + </test> + <test> + <xpath>//pi/tau[@xml:lang="en-US"][not(child::node())][following-sibling::*[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[contains(concat(@number,"$"),"789$")][not(following-sibling::*)]//tau[@xml:lang="nb"]/theta[@xml:lang="en"][not(child::node())][following-sibling::zeta[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@xml:lang="nb"][@xml:id="id1"][following-sibling::lambda[@xml:id="id2"][not(child::node())][following-sibling::nu[contains(concat(@attribute,"$"),"content$")][@xml:lang="en-GB"][not(following-sibling::*)]//omicron[@xml:id="id3"][not(preceding-sibling::*)]/pi[@xml:id="id4"][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(preceding-sibling::nu)][not(child::node())][following-sibling::theta[@xml:lang="no-nb"][@xml:id="id5"][not(following-sibling::*)]//kappa[@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]//kappa[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@token="attribute value"][@xml:id="id7"][not(preceding-sibling::*)]//chi[@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)]/*[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <pi> + <tau xml:lang="en-US"/> + <any xml:lang="no-nb"/> + <sigma number="123456789"> + <tau xml:lang="nb"> + <theta xml:lang="en"/> + <zeta xml:lang="nb"> + <kappa xml:lang="nb" xml:id="id1"/> + <lambda xml:id="id2"/> + <nu attribute="content" xml:lang="en-GB"> + <omicron xml:id="id3"> + <pi xml:id="id4"/> + <nu xml:lang="en-GB"/> + <theta xml:lang="no-nb" xml:id="id5"> + <kappa xml:lang="en" xml:id="id6"> + <kappa xml:lang="en"> + <eta token="attribute value" xml:id="id7"> + <chi xml:lang="nb" xml:id="id8"> + <any xml:id="id9"> + <green>This text must be green</green> + </any> + </chi> + </eta> + </kappa> + </kappa> + </theta> + </omicron> + </nu> + </zeta> + </tau> + </sigma> + </pi> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]/sigma[contains(concat(@abort,"$"),"his.nodeValue$")]//beta[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]/beta[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::beta)][not(child::node())][following-sibling::phi[contains(concat(@delete,"$"),"ute$")][@xml:id="id4"][following-sibling::omega[@class][@xml:lang="en"][following-sibling::iota[starts-with(concat(@data,"-"),"this.nodeValue-")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//upsilon[@false="_blank"][@xml:id="id5"][position() = 1]]]]</xpath> + <tree> + <chi xml:id="id1"> + <sigma abort="this.nodeValue"> + <beta xml:lang="en" xml:id="id2"> + <beta xml:lang="no" xml:id="id3"/> + <phi delete="attribute" xml:id="id4"/> + <omega class="this-is-att-value" xml:lang="en"/> + <iota data="this.nodeValue"> + <upsilon false="_blank" xml:id="id5"> + <green>This text must be green</green> + </upsilon> + </iota> + </beta> + </sigma> + </chi> + </tree> + </test> + <test> + <xpath>//xi[@string]//delta[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[starts-with(concat(@delete,"-"),"123456789-")][not(preceding-sibling::*)]/omicron[not(child::node())][following-sibling::zeta[@attrib][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[starts-with(concat(@class,"-"),"true-")][@xml:lang="en"][@xml:id="id2"][not(child::node())][following-sibling::alpha[@desciption][@xml:id="id3"]//lambda[@xml:lang="en-US"][not(following-sibling::*)]/mu[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[not(following-sibling::*)]]][position() = 1]]</xpath> + <tree> + <xi string="false"> + <delta xml:lang="en" xml:id="id1"> + <psi delete="123456789"> + <omicron/> + <zeta attrib="attribute" xml:lang="en-US"> + <kappa class="true" xml:lang="en" xml:id="id2"/> + <alpha desciption="100%" xml:id="id3"> + <lambda xml:lang="en-US"> + <mu xml:lang="nb" xml:id="id4"/> + <theta> + <green>This text must be green</green> + </theta> + </lambda> + </alpha> + </zeta> + </psi> + </delta> + </xi> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="en-US"][@xml:id="id1"]/kappa[@xml:id="id2"][not(preceding-sibling::*)]//sigma[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[contains(@and,"blan")][not(following-sibling::*)]//upsilon[not(child::node())][following-sibling::chi[starts-with(concat(@abort,"-"),"true-")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::epsilon[starts-with(@src,"co")]/pi[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::phi[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 2]]/epsilon[@data="this.nodeValue"][@xml:lang="nb"][not(preceding-sibling::*)]//nu[@xml:lang="no"]//omega[@string="attribute value"][not(following-sibling::*)]/pi[not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[not(preceding-sibling::*)][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <sigma xml:lang="en-US" xml:id="id1"> + <kappa xml:id="id2"> + <sigma xml:id="id3"> + <kappa and="_blank"> + <upsilon/> + <chi abort="true" xml:id="id4"/> + <epsilon src="content"> + <pi/> + <phi xml:lang="en" xml:id="id5"/> + <rho> + <epsilon data="this.nodeValue" xml:lang="nb"> + <nu xml:lang="no"> + <omega string="attribute value"> + <pi> + <omicron xml:id="id6"> + <delta/> + <phi> + <green>This text must be green</green> + </phi> + </omicron> + </pi> + </omega> + </nu> + </epsilon> + </rho> + </epsilon> + </kappa> + </sigma> + </kappa> + </sigma> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:id="id1"]//upsilon[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[contains(concat(@src,"$"),"ibute value$")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[not(following-sibling::*)]/gamma[not(preceding-sibling::*)]//phi[not(preceding-sibling::*)][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//sigma[@att="attribute"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[contains(@true,"ttribute v")][@xml:id="id6"][not(following-sibling::*)]/rho//zeta[position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <epsilon xml:id="id1"> + <upsilon xml:id="id2"/> + <tau src="attribute value" xml:lang="en" xml:id="id3"> + <chi> + <gamma> + <phi/> + <omega/> + <pi> + <sigma att="attribute" xml:id="id4"/> + <omega xml:id="id5"/> + <lambda true="attribute value" xml:id="id6"> + <rho> + <zeta> + <green>This text must be green</green> + </zeta> + </rho> + </lambda> + </pi> + </gamma> + </chi> + </tau> + </epsilon> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no-nb"][@xml:id="id1"]/xi[@xml:lang="no-nb"][following-sibling::omicron[starts-with(@string,"_")][@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]/lambda[@xml:id="id3"][not(preceding-sibling::*)][not(preceding-sibling::lambda)][following-sibling::iota[@true][@xml:lang="en-GB"][following-sibling::kappa[starts-with(concat(@object,"-"),"attribute-")][@xml:lang="nb"][following-sibling::epsilon[starts-with(concat(@title,"-"),"_blank-")][@xml:lang="en-US"][@xml:id="id4"][position() = 1]][position() = 1]]]]</xpath> + <tree> + <psi xml:lang="no-nb" xml:id="id1"> + <xi xml:lang="no-nb"/> + <omicron string="_blank" xml:lang="en-GB" xml:id="id2"> + <lambda xml:id="id3"/> + <iota true="100%" xml:lang="en-GB"/> + <kappa object="attribute" xml:lang="nb"/> + <epsilon title="_blank" xml:lang="en-US" xml:id="id4"> + <green>This text must be green</green> + </epsilon> + </omicron> + </psi> + </tree> + </test> + <test> + <xpath>//mu[starts-with(concat(@attr,"-"),"123456789-")]//lambda[@xml:lang="nb"][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::delta[contains(@desciption,"ute-value")][not(following-sibling::*)]//xi[contains(concat(@or,"$"),"ank$")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[@xml:id="id2"][following-sibling::delta[starts-with(@insert,"this-is-att-valu")][preceding-sibling::*[position() = 1]][following-sibling::*[not(following-sibling::*)]/theta[@number][not(child::node())][following-sibling::xi[@xml:lang="nb"][not(child::node())][following-sibling::psi[@xml:lang="nb"][following-sibling::rho[@token][@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::phi[@xml:id="id3"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[not(following-sibling::*)]//xi[starts-with(concat(@class,"-"),"_blank-")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::pi[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[not(following-sibling::*)]/beta[not(preceding-sibling::*)]/chi[@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:id="id7"][not(child::node())][following-sibling::chi[starts-with(@content,"fal")][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::gamma[@class="attribute"][@xml:id="id9"][preceding-sibling::*[position() = 3]]][position() = 1]]]]][position() = 1]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <mu attr="123456789"> + <lambda xml:lang="nb" xml:id="id1"/> + <delta desciption="attribute-value"> + <xi or="_blank" xml:lang="en"> + <omega xml:id="id2"/> + <delta insert="this-is-att-value"/> + <any> + <theta number="content"/> + <xi xml:lang="nb"/> + <psi xml:lang="nb"/> + <rho token="123456789" xml:lang="nb"/> + <phi xml:id="id3"/> + <pi> + <xi class="_blank" xml:id="id4"/> + <pi xml:id="id5"> + <xi> + <beta> + <chi xml:lang="no-nb" xml:id="id6"/> + <gamma xml:id="id7"/> + <chi content="false" xml:lang="en-GB" xml:id="id8"/> + <gamma class="attribute" xml:id="id9"> + <green>This text must be green</green> + </gamma> + </beta> + </xi> + </pi> + </pi> + </any> + </xi> + </delta> + </mu> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en"]//alpha[starts-with(@string,"solid 1px green")][@xml:lang="no"][not(following-sibling::*)]/gamma[@xml:id="id1"][not(child::node())][following-sibling::gamma[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@object][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[contains(concat(@att,"$"),"alse$")][@xml:lang="en-GB"][not(child::node())][following-sibling::rho[@xml:lang="nb"]//tau[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@class][@xml:id="id5"]//mu[@class][not(preceding-sibling::*)][following-sibling::epsilon[contains(concat(@token,"$"),"%$")][@xml:lang="nb"][not(following-sibling::*)]]][position() = 1]]]</xpath> + <tree> + <delta xml:lang="en"> + <alpha string="solid 1px green" xml:lang="no"> + <gamma xml:id="id1"/> + <gamma xml:lang="no" xml:id="id2"> + <xi object="attribute value" xml:id="id3"/> + <zeta att="false" xml:lang="en-GB"/> + <rho xml:lang="nb"> + <tau xml:lang="no" xml:id="id4"> + <any class="123456789" xml:id="id5"> + <mu class="_blank"/> + <epsilon token="100%" xml:lang="nb"> + <green>This text must be green</green> + </epsilon> + </any> + </tau> + </rho> + </gamma> + </alpha> + </delta> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no"][@xml:id="id1"]//omicron[contains(concat(@true,"$"),"odeValue$")][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::epsilon[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[@class="100%"][not(preceding-sibling::*)][following-sibling::omega[following-sibling::zeta[@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta xml:lang="no" xml:id="id1"> + <omicron true="this.nodeValue" xml:id="id2"/> + <epsilon> + <delta class="100%"/> + <omega/> + <zeta xml:lang="nb" xml:id="id3"> + <green>This text must be green</green> + </zeta> + </epsilon> + </beta> + </tree> + </test> + <test> + <xpath>//omicron[@content]//xi[@xml:id="id1"]/omicron[@xml:lang="no-nb"][@xml:id="id2"][following-sibling::nu[@false][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::alpha[preceding-sibling::*[position() = 2]]/gamma[@xml:id="id4"][not(preceding-sibling::*)]//zeta[@number="attribute-value"][@xml:lang="no"][not(child::node())][following-sibling::psi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::omicron[contains(concat(@delete,"$"),"ue$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/upsilon[starts-with(@title,"another attribute value")][@xml:lang="en"][following-sibling::iota[starts-with(@or,"fal")][@xml:id="id5"][preceding-sibling::*[position() = 1]]/beta[@insert][@xml:lang="no-nb"][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::beta[@xml:lang="no"][@xml:id="id7"][not(child::node())][following-sibling::epsilon[@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/theta[starts-with(@true,"this.nodeValu")][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omicron content="true"> + <xi xml:id="id1"> + <omicron xml:lang="no-nb" xml:id="id2"/> + <nu false="this.nodeValue" xml:lang="no-nb" xml:id="id3"/> + <alpha> + <gamma xml:id="id4"> + <zeta number="attribute-value" xml:lang="no"/> + <psi xml:lang="no-nb"/> + <omicron delete="this-is-att-value" xml:lang="no-nb"> + <upsilon title="another attribute value" xml:lang="en"/> + <iota or="false" xml:id="id5"> + <beta insert="attribute-value" xml:lang="no-nb" xml:id="id6"/> + <beta xml:lang="no" xml:id="id7"/> + <epsilon xml:id="id8"> + <theta true="this.nodeValue"> + <green>This text must be green</green> + </theta> + </epsilon> + </iota> + </omicron> + </gamma> + </alpha> + </xi> + </omicron> + </tree> + </test> + <test> + <xpath>//chi[@data]/gamma[@data="123456789"][@xml:lang="en-US"][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::upsilon[@xml:lang="en-US"][@xml:id="id2"]//gamma[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)]//chi[@xml:id="id4"][not(child::node())][following-sibling::zeta[contains(concat(@class,"$"),"is-att-value$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::chi[starts-with(concat(@number,"-"),"attribute-")][@xml:lang="en-US"]//pi[@xml:lang="en"]]]]</xpath> + <tree> + <chi data="_blank"> + <gamma data="123456789" xml:lang="en-US" xml:id="id1"/> + <upsilon xml:lang="en-US" xml:id="id2"> + <gamma xml:lang="en-GB" xml:id="id3"> + <chi xml:id="id4"/> + <zeta class="this-is-att-value"> + <pi xml:lang="no-nb" xml:id="id5"/> + <chi number="attribute-value" xml:lang="en-US"> + <pi xml:lang="en"> + <green>This text must be green</green> + </pi> + </chi> + </zeta> + </gamma> + </upsilon> + </chi> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]/delta[starts-with(@true,"t")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)]/theta[starts-with(concat(@and,"-"),"100%-")][not(child::node())][following-sibling::delta[starts-with(@att,"attri")][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[contains(concat(@data,"$"),"ue$")][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::phi[starts-with(@insert,"attribute valu")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]//omega[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::psi[contains(@desciption,"t-value")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::psi[not(following-sibling::*)]//xi[@insert][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[starts-with(@number,"t")][@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[contains(concat(@src,"$")," 1px green$")][@xml:lang="no"][@xml:id="id9"][not(child::node())][following-sibling::alpha[@token="attribute-value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//iota[@xml:id="id10"][not(preceding-sibling::*)][following-sibling::gamma//alpha[@and][@xml:lang="en-US"]//epsilon[starts-with(concat(@abort,"-"),"attribute-")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:id="id11"][preceding-sibling::*[position() = 1]]//rho[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="en-GB"][@xml:id="id12"][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <xi xml:id="id1"> + <delta true="true" xml:lang="en-US" xml:id="id2"> + <theta and="100%"/> + <delta att="attribute" xml:id="id3"> + <sigma data="true" xml:id="id4"/> + <phi insert="attribute value" xml:lang="en-US"/> + <nu xml:lang="nb" xml:id="id5"> + <omega xml:lang="en-US"/> + <psi desciption="this-is-att-value" xml:lang="no"/> + <psi> + <xi insert="another attribute value"> + <gamma xml:lang="nb" xml:id="id6"/> + <iota xml:lang="en"> + <chi xml:lang="en-US" xml:id="id7"> + <sigma number="true" xml:lang="nb" xml:id="id8"/> + <chi src="solid 1px green" xml:lang="no" xml:id="id9"/> + <alpha token="attribute-value"> + <iota xml:id="id10"/> + <gamma> + <alpha and="123456789" xml:lang="en-US"> + <epsilon abort="attribute"/> + <theta xml:id="id11"> + <rho xml:lang="en-US"/> + <nu xml:lang="en-GB" xml:id="id12"> + <green>This text must be green</green> + </nu> + </theta> + </alpha> + </gamma> + </alpha> + </chi> + </iota> + </xi> + </psi> + </nu> + </delta> + </delta> + </xi> + </tree> + </test> + <test> + <xpath>//alpha[contains(concat(@class,"$"),"blank$")][@xml:lang="en-GB"][@xml:id="id1"]/zeta[@string="attribute-value"][@xml:id="id2"][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"][not(child::node())][following-sibling::sigma[@attribute="attribute"][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::beta[@xml:lang="no-nb"][not(following-sibling::*)]//chi[@data="false"][@xml:id="id5"][not(preceding-sibling::*)]//tau[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@xml:lang="no"][not(following-sibling::upsilon)][following-sibling::chi[@class][@xml:lang="nb"][following-sibling::psi[@xml:id="id7"][following-sibling::*[position()=2]][following-sibling::psi[@xml:lang="no"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::psi[@name="_blank"][@xml:lang="no"][@xml:id="id8"][preceding-sibling::*[position() = 4]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha class="_blank" xml:lang="en-GB" xml:id="id1"> + <zeta string="attribute-value" xml:id="id2"/> + <psi xml:lang="en-GB" xml:id="id3"/> + <epsilon xml:lang="en-GB"/> + <sigma attribute="attribute" xml:lang="no" xml:id="id4"/> + <beta xml:lang="no-nb"> + <chi data="false" xml:id="id5"> + <tau xml:lang="no" xml:id="id6"> + <upsilon xml:lang="no"/> + <chi class="this.nodeValue" xml:lang="nb"/> + <psi xml:id="id7"/> + <psi xml:lang="no"/> + <psi name="_blank" xml:lang="no" xml:id="id8"> + <green>This text must be green</green> + </psi> + </tau> + </chi> + </beta> + </alpha> + </tree> + </test> + <test> + <xpath>//omicron//theta[not(preceding-sibling::*)]/omega[@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]/tau[@xml:lang="en-US"][not(following-sibling::*)]//nu[@xml:lang="nb"]/theta[@desciption="123456789"][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::upsilon[@number="content"][@xml:lang="en"][following-sibling::tau[starts-with(@attr,"this-is-att")][@xml:id="id3"][preceding-sibling::*[position() = 2]][position() = 1]]]</xpath> + <tree> + <omicron> + <theta> + <omega xml:lang="en-US" xml:id="id1"> + <tau xml:lang="en-US"> + <nu xml:lang="nb"> + <theta desciption="123456789" xml:id="id2"/> + <upsilon number="content" xml:lang="en"/> + <tau attr="this-is-att-value" xml:id="id3"> + <green>This text must be green</green> + </tau> + </nu> + </tau> + </omega> + </theta> + </omicron> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]/kappa[@false]/phi[@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::xi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@xml:lang="no"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::omega[@attrib][@xml:lang="nb"][@xml:id="id4"]//sigma[@xml:lang="en-GB"][not(following-sibling::*)]//theta//omicron[not(preceding-sibling::*)]/rho[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en-GB"][not(following-sibling::*)]//rho[@abort][@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)]/omega[not(child::node())][following-sibling::sigma[contains(concat(@content,"$"),"e value$")][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::sigma)][following-sibling::lambda[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[contains(@attrib,"e")][@xml:lang="en"][@xml:id="id8"][following-sibling::*[position()=2]][not(child::node())][following-sibling::lambda[@and="solid 1px green"][@xml:lang="no"][@xml:id="id9"][not(child::node())][following-sibling::sigma[@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 5]][position() = 1]]]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota xml:id="id1"> + <kappa false="100%"> + <phi xml:lang="en-US" xml:id="id2"/> + <xi xml:lang="en-GB"/> + <sigma xml:lang="no" xml:id="id3"/> + <omega attrib="another attribute value" xml:lang="nb" xml:id="id4"> + <sigma xml:lang="en-GB"> + <theta> + <omicron> + <rho xml:id="id5"/> + <lambda xml:lang="en-GB"> + <rho abort="false" xml:lang="en-GB" xml:id="id6"> + <omega/> + <sigma content="attribute value" xml:lang="nb" xml:id="id7"/> + <lambda xml:lang="en-US"/> + <omega attrib="attribute value" xml:lang="en" xml:id="id8"/> + <lambda and="solid 1px green" xml:lang="no" xml:id="id9"/> + <sigma xml:lang="en" xml:id="id10"> + <green>This text must be green</green> + </sigma> + </rho> + </lambda> + </omicron> + </theta> + </sigma> + </omega> + </kappa> + </iota> + </tree> + </test> + <test> + <xpath>//xi[contains(@true,"e")][@xml:id="id1"]//nu[following-sibling::*[position()=5]][following-sibling::mu[@delete][@xml:id="id2"][not(child::node())][following-sibling::gamma[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::*[contains(concat(@false,"$"),"is-is-att-value$")][@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::theta[@and][preceding-sibling::*[position() = 4]][following-sibling::theta[@xml:lang="nb"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//delta[contains(concat(@attrib,"$"),"false$")][@xml:id="id5"][not(preceding-sibling::*)]/mu[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(concat(@content,"$"),"true$")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::iota[@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[not(child::node())][following-sibling::xi[contains(@att,"56789")][@xml:id="id8"][following-sibling::chi[preceding-sibling::*[position() = 5]][position() = 1]][position() = 1]]]]]][position() = 1]]]]]</xpath> + <tree> + <xi true="solid 1px green" xml:id="id1"> + <nu/> + <mu delete="solid 1px green" xml:id="id2"/> + <gamma xml:lang="en-US" xml:id="id3"/> + <any false="this-is-att-value" xml:lang="en" xml:id="id4"/> + <theta and="attribute"/> + <theta xml:lang="nb"> + <delta attrib="false" xml:id="id5"> + <mu xml:id="id6"/> + <mu content="true"/> + <iota xml:id="id7"/> + <omega/> + <xi att="123456789" xml:id="id8"/> + <chi> + <green>This text must be green</green> + </chi> + </delta> + </theta> + </xi> + </tree> + </test> + <test> + <xpath>//tau[@token][@xml:id="id1"]//theta[starts-with(@insert,"10")][@xml:lang="en-US"][not(following-sibling::*)]/kappa[@and][@xml:id="id2"]//alpha[contains(@data,"nt")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@src][preceding-sibling::*[position() = 1]]//delta[@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::*[@attribute="this.nodeValue"][@xml:id="id4"][not(following-sibling::*)]/omicron[@title][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//phi[starts-with(@string,"this-")][@xml:id="id6"][following-sibling::rho[starts-with(@name,"f")][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::zeta[not(following-sibling::*)]/gamma[contains(@token,"odeValue")][not(following-sibling::*)]/theta[contains(concat(@abort,"$"),"his.nodeValue$")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:id="id8"]//kappa[@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)]//upsilon[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@number][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[contains(concat(@desciption,"$"),"s-is-att-value$")][@xml:lang="en"][@xml:id="id10"][following-sibling::sigma[@xml:id="id11"][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <tau token="attribute value" xml:id="id1"> + <theta insert="100%" xml:lang="en-US"> + <kappa and="100%" xml:id="id2"> + <alpha data="content"/> + <upsilon src="solid 1px green"> + <delta xml:id="id3"/> + <any attribute="this.nodeValue" xml:id="id4"> + <omicron title="attribute-value" xml:id="id5"/> + <chi xml:lang="en-GB"> + <phi string="this-is-att-value" xml:id="id6"/> + <rho name="false" xml:id="id7"/> + <zeta> + <gamma token="this.nodeValue"> + <theta abort="this.nodeValue" xml:lang="en-US"/> + <sigma xml:id="id8"> + <kappa xml:lang="no" xml:id="id9"> + <upsilon xml:lang="nb"> + <tau number="content"/> + <sigma xml:lang="no"> + <tau desciption="this-is-att-value" xml:lang="en" xml:id="id10"/> + <sigma xml:id="id11"> + <green>This text must be green</green> + </sigma> + </sigma> + </upsilon> + </kappa> + </sigma> + </gamma> + </zeta> + </chi> + </any> + </upsilon> + </kappa> + </theta> + </tau> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]/xi[@xml:lang="nb"][@xml:id="id2"]/alpha[@number][not(preceding-sibling::*)][following-sibling::zeta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/delta[@or][not(child::node())][following-sibling::mu[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::lambda[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/xi[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@name][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[starts-with(@att,"soli")][following-sibling::delta[@number="_blank"][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]/beta[@xml:lang="en-GB"]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <xi xml:lang="nb" xml:id="id2"> + <alpha number="attribute-value"/> + <zeta xml:lang="en-US"> + <delta or="_blank"/> + <mu xml:lang="nb" xml:id="id3"/> + <gamma xml:id="id4"/> + <lambda xml:lang="no" xml:id="id5"> + <xi xml:lang="en"> + <mu name="_blank" xml:lang="en"/> + <phi att="solid 1px green"/> + <delta number="_blank" xml:lang="en" xml:id="id6"> + <beta xml:lang="en-GB"> + <green>This text must be green</green> + </beta> + </delta> + </xi> + </lambda> + </zeta> + </xi> + </phi> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-US"]//lambda[not(preceding-sibling::*)]//mu[@xml:lang="no-nb"][not(following-sibling::*)]//pi[@class][@xml:lang="no"][not(following-sibling::*)]/nu[@token][@xml:lang="no"][@xml:id="id1"]//xi[@xml:id="id2"][not(following-sibling::*)]//omega[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::zeta[preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[contains(concat(@attr,"$"),"tribute$")][@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::psi[@attribute="false"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//beta[contains(@false,"ut")][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@object][@xml:lang="en"]/*[@xml:lang="no-nb"][not(following-sibling::*)]//zeta[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::upsilon[@true][preceding-sibling::*[position() = 1]]//phi[@xml:id="id7"][following-sibling::iota[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[starts-with(concat(@object,"-"),"solid 1px green-")][preceding-sibling::*[position() = 2]]//pi[@content="this-is-att-value"][@xml:id="id8"][following-sibling::*[position()=2]][following-sibling::*[@xml:lang="no-nb"][not(child::node())][following-sibling::gamma[@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/beta[@att][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[@number][@xml:lang="no"][not(following-sibling::*)][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <any xml:lang="en-US"> + <lambda> + <mu xml:lang="no-nb"> + <pi class="another attribute value" xml:lang="no"> + <nu token="this-is-att-value" xml:lang="no" xml:id="id1"> + <xi xml:id="id2"> + <omega xml:lang="en-US" xml:id="id3"/> + <zeta/> + <nu attr="attribute" xml:lang="no-nb" xml:id="id4"/> + <psi attribute="false" xml:id="id5"> + <beta false="another attribute value" xml:id="id6"> + <lambda object="another attribute value" xml:lang="en"> + <any xml:lang="no-nb"> + <zeta xml:lang="nb"/> + <upsilon true="attribute value"> + <phi xml:id="id7"/> + <iota/> + <gamma object="solid 1px green"> + <pi content="this-is-att-value" xml:id="id8"/> + <any xml:lang="no-nb"/> + <gamma xml:lang="en-GB" xml:id="id9"> + <beta att="_blank" xml:lang="en-US"/> + <phi number="true" xml:lang="no"> + <green>This text must be green</green> + </phi> + </gamma> + </gamma> + </upsilon> + </any> + </lambda> + </beta> + </psi> + </xi> + </nu> + </pi> + </mu> + </lambda> + </any> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="en-GB"]/alpha[@xml:id="id1"][following-sibling::phi[contains(@data,"_bl")][@xml:lang="nb"][@xml:id="id2"][following-sibling::rho[@xml:lang="en-GB"][not(following-sibling::*)]/upsilon[contains(concat(@title,"$"),"this.nodeValue$")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::epsilon[@false="another attribute value"][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//pi[@xml:lang="no"][not(child::node())][following-sibling::eta[@desciption="attribute"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:id="id5"]/iota[@data][@xml:id="id6"]/iota[contains(concat(@false,"$"),"e$")][following-sibling::*[position()=3]][not(child::node())][following-sibling::mu[@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@xml:lang="en-GB"][@xml:id="id8"][not(child::node())][following-sibling::omega[starts-with(concat(@attr,"-"),"attribute value-")][@xml:id="id9"][preceding-sibling::*[position() = 3]]//phi//beta[@xml:lang="en-US"][@xml:id="id10"][not(following-sibling::*)]//sigma[not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::omicron[@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[contains(concat(@number,"$"),"e$")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id12"]//mu[contains(@delete,"olid 1px")][@xml:lang="nb"][@xml:id="id13"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::mu)]/psi[@class="content"][@xml:lang="no"][not(preceding-sibling::psi)][not(child::node())][following-sibling::upsilon[@xml:lang="en-US"][@xml:id="id14"][preceding-sibling::*[position() = 1]][following-sibling::tau[@xml:lang="nb"][@xml:id="id15"]]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <lambda xml:lang="en-GB"> + <alpha xml:id="id1"/> + <phi data="_blank" xml:lang="nb" xml:id="id2"/> + <rho xml:lang="en-GB"> + <upsilon title="this.nodeValue" xml:lang="nb"/> + <epsilon false="another attribute value" xml:lang="no-nb" xml:id="id3"> + <pi xml:lang="no"/> + <eta desciption="attribute" xml:id="id4"/> + <omega xml:id="id5"> + <iota data="attribute value" xml:id="id6"> + <iota false="true"/> + <mu xml:lang="en-US" xml:id="id7"/> + <any xml:lang="en-GB" xml:id="id8"/> + <omega attr="attribute value" xml:id="id9"> + <phi> + <beta xml:lang="en-US" xml:id="id10"> + <sigma/> + <omicron xml:id="id11"/> + <xi number="another attribute value"/> + <kappa xml:lang="en-GB" xml:id="id12"> + <mu delete="solid 1px green" xml:lang="nb" xml:id="id13"> + <psi class="content" xml:lang="no"/> + <upsilon xml:lang="en-US" xml:id="id14"/> + <tau xml:lang="nb" xml:id="id15"> + <green>This text must be green</green> + </tau> + </mu> + </kappa> + </beta> + </phi> + </omega> + </iota> + </omega> + </epsilon> + </rho> + </lambda> + </tree> + </test> + <test> + <xpath>//sigma[@att="123456789"][@xml:id="id1"]//omega[not(child::node())][following-sibling::upsilon[@xml:lang="no"]//sigma[@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::lambda[starts-with(concat(@object,"-"),"true-")][@xml:lang="en-US"]//sigma[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]//delta[@true][@xml:lang="en-GB"][@xml:id="id3"]/chi[following-sibling::*[position()=1]][following-sibling::beta[contains(@src,"lid 1px gr")][@xml:lang="no-nb"][not(following-sibling::*)]/*[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[contains(@insert,"-at")][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::*[@att][@xml:id="id6"][not(following-sibling::*)]//omega[@or="_blank"][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::phi[starts-with(concat(@attrib,"-"),"content-")][following-sibling::omega[not(following-sibling::*)]/kappa[@true="false"][@xml:id="id7"][not(following-sibling::*)]//omega[@xml:id="id8"][not(preceding-sibling::*)]/beta[@string][@xml:id="id9"][following-sibling::kappa[@desciption][@xml:id="id10"][preceding-sibling::*[position() = 1]]/pi[@attrib="false"][@xml:lang="no"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::pi[@xml:id="id12"][not(following-sibling::*)]//epsilon[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma att="123456789" xml:id="id1"> + <omega/> + <upsilon xml:lang="no"> + <sigma xml:lang="en"/> + <lambda object="true" xml:lang="en-US"> + <sigma xml:lang="en-US" xml:id="id2"> + <delta true="another attribute value" xml:lang="en-GB" xml:id="id3"> + <chi/> + <beta src="solid 1px green" xml:lang="no-nb"> + <any xml:id="id4"/> + <theta insert="this-is-att-value" xml:id="id5"/> + <any att="content" xml:id="id6"> + <omega or="_blank"/> + <mu xml:lang="no"/> + <phi attrib="content"/> + <omega> + <kappa true="false" xml:id="id7"> + <omega xml:id="id8"> + <beta string="false" xml:id="id9"/> + <kappa desciption="_blank" xml:id="id10"> + <pi attrib="false" xml:lang="no" xml:id="id11"/> + <pi xml:id="id12"> + <epsilon> + <green>This text must be green</green> + </epsilon> + </pi> + </kappa> + </omega> + </kappa> + </omega> + </any> + </beta> + </delta> + </sigma> + </lambda> + </upsilon> + </sigma> + </tree> + </test> + <test> + <xpath>//eta[@attrib="another attribute value"][@xml:lang="en-GB"]//upsilon[@xml:id="id1"][not(preceding-sibling::*)]/tau[starts-with(concat(@token,"-"),"false-")][@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]//delta[@string][not(preceding-sibling::*)][following-sibling::phi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[starts-with(@abort,"conten")][not(preceding-sibling::nu)][following-sibling::epsilon[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::beta[starts-with(@delete,"solid 1px gre")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id5"]/mu[not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-GB"][not(child::node())][following-sibling::epsilon[@xml:lang="en"][@xml:id="id6"][following-sibling::alpha[not(child::node())][following-sibling::rho[@number="true"][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/delta[@xml:lang="no"]//nu[@true="solid 1px green"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::alpha[@desciption][@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 2]]]]]]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <eta attrib="another attribute value" xml:lang="en-GB"> + <upsilon xml:id="id1"> + <tau token="false" xml:lang="no" xml:id="id2"> + <delta string="false"/> + <phi> + <xi xml:lang="nb" xml:id="id3"/> + <alpha xml:id="id4"> + <nu abort="content"/> + <epsilon xml:lang="no-nb"/> + <beta delete="solid 1px green" xml:lang="nb"/> + <tau xml:lang="en-GB" xml:id="id5"> + <mu/> + <omicron xml:lang="en-GB"/> + <epsilon xml:lang="en" xml:id="id6"/> + <alpha/> + <rho number="true" xml:lang="en" xml:id="id7"> + <delta xml:lang="no"> + <nu true="solid 1px green" xml:id="id8"/> + <eta xml:id="id9"/> + <alpha desciption="true" xml:lang="nb" xml:id="id10"> + <green>This text must be green</green> + </alpha> + </delta> + </rho> + </tau> + </alpha> + </phi> + </tau> + </upsilon> + </eta> + </tree> + </test> + <test> + <xpath>//gamma[starts-with(@src,"_bla")][@xml:lang="en-GB"]/nu[@xml:lang="en-US"][@xml:id="id1"]//theta//chi[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@number][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@token="_blank"][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[starts-with(@content,"tru")]//omicron[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::nu[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]]//upsilon[not(preceding-sibling::*)][following-sibling::gamma[not(following-sibling::*)]//delta[starts-with(@number,"1")]//psi[@xml:id="id9"][not(following-sibling::*)]//omicron[contains(concat(@class,"$"),"false$")][@xml:id="id10"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:id="id11"][preceding-sibling::*[position() = 1]]//psi[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <gamma src="_blank" xml:lang="en-GB"> + <nu xml:lang="en-US" xml:id="id1"> + <theta> + <chi xml:id="id2"> + <rho xml:lang="no-nb"> + <psi xml:lang="no" xml:id="id3"> + <lambda xml:id="id4"/> + <any number="_blank" xml:id="id5"> + <xi xml:lang="en-GB" xml:id="id6"/> + <epsilon token="_blank" xml:lang="en" xml:id="id7"> + <chi content="true"> + <omicron/> + <nu xml:lang="en-GB" xml:id="id8"> + <upsilon/> + <gamma> + <delta number="100%"> + <psi xml:id="id9"> + <omicron class="false" xml:id="id10"/> + <iota xml:id="id11"> + <psi> + <green>This text must be green</green> + </psi> + </iota> + </psi> + </delta> + </gamma> + </nu> + </chi> + </epsilon> + </any> + </psi> + </rho> + </chi> + </theta> + </nu> + </gamma> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]//tau[@desciption="attribute"][@xml:lang="en"][not(child::node())][following-sibling::rho[@and="true"][@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:id="id3"][not(preceding-sibling::*)]//epsilon[contains(@content,"ttr")][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::gamma)][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/gamma[@insert][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:lang="no-nb"][@xml:id="id6"][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:id="id1"> + <tau desciption="attribute" xml:lang="en"/> + <rho and="true" xml:lang="en-GB" xml:id="id2"> + <mu xml:id="id3"> + <epsilon content="attribute"/> + <gamma xml:lang="no-nb" xml:id="id4"/> + <any> + <gamma insert="false" xml:lang="en-US" xml:id="id5"/> + <lambda xml:lang="no-nb" xml:id="id6"> + <green>This text must be green</green> + </lambda> + </any> + </mu> + </rho> + </nu> + </tree> + </test> + <test> + <xpath>//sigma[contains(concat(@class,"$"),"9$")]/nu[@string][@xml:lang="en"][@xml:id="id1"][not(child::node())][following-sibling::iota[starts-with(concat(@abort,"-"),"attribute-")][@xml:lang="en"][@xml:id="id2"][following-sibling::mu[starts-with(concat(@number,"-"),"123456789-")][preceding-sibling::*[position() = 2]][not(preceding-sibling::mu)]//nu[@xml:lang="en-US"][@xml:id="id3"]/upsilon[@or="123456789"][@xml:lang="no"]//phi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::iota[starts-with(concat(@false,"-"),"100%-")][@xml:id="id4"]/chi[@number][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 1]][following-sibling::tau[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[preceding-sibling::*[position() = 3]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma class="123456789"> + <nu string="_blank" xml:lang="en" xml:id="id1"/> + <iota abort="attribute" xml:lang="en" xml:id="id2"/> + <mu number="123456789"> + <nu xml:lang="en-US" xml:id="id3"> + <upsilon or="123456789" xml:lang="no"> + <phi xml:lang="no"/> + <iota false="100%" xml:id="id4"> + <chi number="another attribute value" xml:lang="no" xml:id="id5"/> + <omega/> + <tau xml:lang="en-US" xml:id="id6"/> + <epsilon> + <green>This text must be green</green> + </epsilon> + </iota> + </upsilon> + </nu> + </mu> + </sigma> + </tree> + </test> + <test> + <xpath>//zeta[starts-with(@desciption,"_blank")]/theta[starts-with(@title,"_bl")][following-sibling::lambda[starts-with(@object,"1234")][not(following-sibling::*)]/phi[@xml:id="id1"]//omicron[not(preceding-sibling::*)][following-sibling::zeta[starts-with(@insert,"_blank")][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]]]</xpath> + <tree> + <zeta desciption="_blank"> + <theta title="_blank"/> + <lambda object="123456789"> + <phi xml:id="id1"> + <omicron/> + <zeta insert="_blank" xml:lang="nb" xml:id="id2"> + <green>This text must be green</green> + </zeta> + </phi> + </lambda> + </zeta> + </tree> + </test> + <test> + <xpath>//beta[@xml:id="id1"]//zeta[contains(@object,"de")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[not(preceding-sibling::*)]//lambda[@xml:lang="en-US"][not(following-sibling::*)]/psi[contains(concat(@number,"$"),"e$")][not(preceding-sibling::*)][not(following-sibling::*)]//xi[contains(concat(@name,"$"),"her attribute value$")][@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::omega[@xml:lang="no-nb"]//tau[@xml:id="id3"]/gamma[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <beta xml:id="id1"> + <zeta object="this.nodeValue" xml:lang="en-US" xml:id="id2"> + <lambda> + <lambda xml:lang="en-US"> + <psi number="false"> + <xi name="another attribute value" xml:lang="en-GB"/> + <omega xml:lang="no-nb"> + <tau xml:id="id3"> + <gamma xml:lang="en-US" xml:id="id4"> + <green>This text must be green</green> + </gamma> + </tau> + </omega> + </psi> + </lambda> + </lambda> + </zeta> + </beta> + </tree> + </test> + <test> + <xpath>//delta[@attr="solid 1px green"][@xml:lang="no"][@xml:id="id1"]//beta[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//eta[@src="attribute value"][@xml:id="id2"][not(following-sibling::*)]/phi[@token="true"][@xml:lang="en"][not(child::node())][following-sibling::phi[following-sibling::lambda[@xml:lang="en"][preceding-sibling::*[position() = 2]]/pi[contains(concat(@or,"$"),"lse$")][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta attr="solid 1px green" xml:lang="no" xml:id="id1"> + <beta xml:lang="en-US"/> + <omega xml:lang="en-GB"> + <eta src="attribute value" xml:id="id2"> + <phi token="true" xml:lang="en"/> + <phi/> + <lambda xml:lang="en"> + <pi or="false" xml:lang="en-US" xml:id="id3"/> + <iota xml:lang="no-nb" xml:id="id4"> + <green>This text must be green</green> + </iota> + </lambda> + </eta> + </omega> + </delta> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="en-US"][@xml:id="id1"]/iota[@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@xml:id="id3"]/*[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[following-sibling::*[position()=1]][following-sibling::xi[@number][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/mu[@src][@xml:lang="nb"][not(child::node())][following-sibling::delta[contains(concat(@abort,"$")," green$")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::nu[not(following-sibling::*)]/xi[starts-with(@name,"th")][@xml:lang="no"][not(following-sibling::*)][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <iota xml:lang="en-US" xml:id="id1"> + <iota xml:id="id2"/> + <omega xml:id="id3"> + <any xml:lang="en" xml:id="id4"/> + <xi/> + <xi number="this.nodeValue"> + <mu src="_blank" xml:lang="nb"/> + <delta abort="solid 1px green" xml:lang="no-nb" xml:id="id5"/> + <nu> + <xi name="this.nodeValue" xml:lang="no"> + <green>This text must be green</green> + </xi> + </nu> + </xi> + </omega> + </iota> + </tree> + </test> + <test> + <xpath>//gamma[@xml:lang="en-US"][@xml:id="id1"]//iota[@data][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::beta[contains(concat(@class,"$"),"x green$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::epsilon[starts-with(concat(@desciption,"-"),"solid 1px green-")][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@object][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::upsilon[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 4]]/psi[@xml:id="id5"][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 1]]//iota[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[not(following-sibling::*)]//theta[@xml:id="id7"][not(preceding-sibling::*)]/omega[contains(concat(@insert,"$"),"deValue$")][@xml:id="id8"][not(preceding-sibling::*)]/theta[@object][@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@token][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id11"][not(following-sibling::*)]/pi[contains(concat(@name,"$"),"rue$")][@xml:id="id12"][not(preceding-sibling::pi or following-sibling::pi)][not(child::node())][following-sibling::delta[@xml:lang="en-US"][@xml:id="id13"]//omicron[position() = 1]][position() = 1]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <gamma xml:lang="en-US" xml:id="id1"> + <iota data="_blank" xml:id="id2"/> + <beta class="solid 1px green" xml:lang="en-GB"/> + <epsilon desciption="solid 1px green" xml:id="id3"/> + <psi object="true"/> + <upsilon xml:lang="en" xml:id="id4"> + <psi xml:id="id5"/> + <xi> + <iota xml:lang="no" xml:id="id6"/> + <psi> + <theta xml:id="id7"> + <omega insert="this.nodeValue" xml:id="id8"> + <theta object="_blank" xml:lang="en" xml:id="id9"> + <theta token="another attribute value" xml:id="id10"/> + <gamma xml:lang="no-nb" xml:id="id11"> + <pi name="true" xml:id="id12"/> + <delta xml:lang="en-US" xml:id="id13"> + <omicron> + <green>This text must be green</green> + </omicron> + </delta> + </gamma> + </theta> + </omega> + </theta> + </psi> + </xi> + </upsilon> + </gamma> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="en-US"]//sigma[contains(concat(@object,"$"),"reen$")][not(preceding-sibling::*)]//nu[contains(concat(@delete,"$"),"te value$")][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="no"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::chi[@xml:lang="en-US"][preceding-sibling::*[position() = 2]]/mu[starts-with(concat(@name,"-"),"100%-")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[starts-with(concat(@data,"-"),"123456789-")][not(following-sibling::*)]/sigma[@abort][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:id="id3"][not(following-sibling::*)]//psi[@delete="true"][@xml:lang="no-nb"]/epsilon[contains(concat(@attribute,"$"),"ent$")][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@attr="this.nodeValue"][@xml:lang="nb"]/epsilon[@object][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[starts-with(@attrib,"c")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::beta[@attrib="solid 1px green"][@xml:lang="nb"][not(child::node())][following-sibling::pi[@xml:lang="no-nb"]//delta[contains(concat(@abort,"$"),"00%$")][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@xml:id="id6"][not(child::node())][following-sibling::eta[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@desciption]/delta[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@delete="another attribute value"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="en-US"> + <sigma object="solid 1px green"> + <nu delete="attribute value" xml:lang="en-GB" xml:id="id1"/> + <iota xml:lang="no" xml:id="id2"/> + <chi xml:lang="en-US"> + <mu name="100%" xml:lang="no"/> + <theta xml:lang="no-nb"> + <tau data="123456789"> + <sigma abort="true" xml:lang="en-GB"> + <chi xml:id="id3"> + <psi delete="true" xml:lang="no-nb"> + <epsilon attribute="content" xml:id="id4"/> + <theta attr="this.nodeValue" xml:lang="nb"> + <epsilon object="attribute value" xml:lang="en" xml:id="id5"/> + <pi attrib="content" xml:lang="no-nb"/> + <beta attrib="solid 1px green" xml:lang="nb"/> + <pi xml:lang="no-nb"> + <delta abort="100%"> + <omicron xml:id="id6"/> + <eta xml:lang="no"/> + <lambda desciption="123456789"> + <delta xml:id="id7"/> + <omega delete="another attribute value" xml:id="id8"> + <green>This text must be green</green> + </omega> + </lambda> + </delta> + </pi> + </theta> + </psi> + </chi> + </sigma> + </tau> + </theta> + </chi> + </sigma> + </omicron> + </tree> + </test> + <test> + <xpath>//pi[@and][@xml:lang="nb"]//mu[@content][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/*[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/zeta[starts-with(@content,"_b")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::eta[starts-with(concat(@name,"-"),"content-")][preceding-sibling::*[position() = 1]][following-sibling::*[@abort="true"][not(child::node())][following-sibling::eta[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 3]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <pi and="attribute" xml:lang="nb"> + <mu content="100%" xml:lang="en-GB" xml:id="id1"/> + <upsilon xml:id="id2"> + <any xml:lang="en-US" xml:id="id3"> + <zeta content="_blank" xml:lang="en-US"/> + <eta name="content"/> + <any abort="true"/> + <eta xml:lang="en-GB" xml:id="id4"> + <green>This text must be green</green> + </eta> + </any> + </upsilon> + </pi> + </tree> + </test> + <test> + <xpath>//omega[starts-with(concat(@false,"-"),"solid 1px green-")][@xml:id="id1"]//*[@class][@xml:lang="en-GB"][@xml:id="id2"][following-sibling::alpha[@xml:lang="en-US"][following-sibling::upsilon[@insert="attribute value"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/omicron[starts-with(@content,"this-is-att-v")][@xml:lang="no-nb"]/*[starts-with(@title,"solid 1px")][@xml:lang="en"][not(following-sibling::*)]//rho[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]/nu[contains(concat(@data,"$"),"bute$")][following-sibling::omega[not(child::node())][following-sibling::upsilon[not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/chi[contains(concat(@token,"$"),"ue$")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)]/theta[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::omicron[@string][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[contains(concat(@src,"$"),"ute value$")][@xml:id="id8"][not(child::node())][following-sibling::omega[starts-with(concat(@delete,"-"),"this.nodeValue-")][preceding-sibling::*[position() = 1]][following-sibling::psi[starts-with(concat(@false,"-"),"attribute value-")][@xml:lang="en-GB"][following-sibling::zeta[@data][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]]//phi[starts-with(@token,"a")][@xml:lang="nb"][@xml:id="id9"][following-sibling::epsilon[starts-with(concat(@data,"-"),"false-")][@xml:lang="no"][@xml:id="id10"]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega false="solid 1px green" xml:id="id1"> + <any class="123456789" xml:lang="en-GB" xml:id="id2"/> + <alpha xml:lang="en-US"/> + <upsilon insert="attribute value"/> + <rho xml:lang="no" xml:id="id3"> + <omicron content="this-is-att-value" xml:lang="no-nb"> + <any title="solid 1px green" xml:lang="en"> + <rho xml:lang="no-nb" xml:id="id4"> + <nu data="attribute"/> + <omega/> + <upsilon/> + <chi xml:lang="no" xml:id="id5"> + <chi token="attribute-value" xml:lang="no-nb" xml:id="id6"> + <theta xml:lang="en-US" xml:id="id7"/> + <omicron string="attribute value"> + <eta src="another attribute value" xml:id="id8"/> + <omega delete="this.nodeValue"/> + <psi false="attribute value" xml:lang="en-GB"/> + <zeta data="true" xml:lang="en-GB"> + <phi token="another attribute value" xml:lang="nb" xml:id="id9"/> + <epsilon data="false" xml:lang="no" xml:id="id10"> + <green>This text must be green</green> + </epsilon> + </zeta> + </omicron> + </chi> + </chi> + </rho> + </any> + </omicron> + </rho> + </omega> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en"]/mu[@false][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[@delete][@xml:lang="en-US"][@xml:id="id1"][not(child::node())][following-sibling::beta[@xml:id="id2"][preceding-sibling::*[position() = 1]]/sigma[@xml:id="id3"][not(following-sibling::*)]//psi[@content][@xml:id="id4"][following-sibling::epsilon[@attribute][@xml:id="id5"][position() = 1]]]</xpath> + <tree> + <kappa xml:lang="en"> + <mu false="attribute value" xml:lang="en"> + <chi delete="another attribute value" xml:lang="en-US" xml:id="id1"/> + <beta xml:id="id2"> + <sigma xml:id="id3"> + <psi content="_blank" xml:id="id4"/> + <epsilon attribute="content" xml:id="id5"> + <green>This text must be green</green> + </epsilon> + </sigma> + </beta> + </mu> + </kappa> + </tree> + </test> + <test> + <xpath>//*[@insert][@xml:id="id1"]//omicron[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta//beta[@xml:id="id2"][not(preceding-sibling::*)]/rho[@xml:lang="en-US"][following-sibling::*[position()=1]][following-sibling::upsilon[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[contains(concat(@attribute,"$"),"px green$")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@and][@xml:lang="en"]//eta[not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::psi[@content][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::psi[contains(concat(@attr,"$"),"is-is-att-value$")][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <any insert="another attribute value" xml:id="id1"> + <omicron xml:lang="en"> + <zeta> + <beta xml:id="id2"> + <rho xml:lang="en-US"/> + <upsilon xml:lang="no" xml:id="id3"> + <upsilon attribute="solid 1px green" xml:lang="no"/> + <sigma and="100%" xml:lang="en"> + <eta/> + <omicron xml:lang="no" xml:id="id4"/> + <psi content="attribute" xml:lang="en-US"/> + <psi attr="this-is-att-value"> + <green>This text must be green</green> + </psi> + </sigma> + </upsilon> + </beta> + </zeta> + </omicron> + </any> + </tree> + </test> + <test> + <xpath>//omega[@or][@xml:lang="no-nb"][@xml:id="id1"]/phi[starts-with(@or,"a")][@xml:lang="en-US"][not(child::node())][following-sibling::eta[@xml:lang="en-GB"][not(following-sibling::*)]/psi[contains(@name,"s-is-att-value")][@xml:lang="en"][not(child::node())][following-sibling::theta[@xml:id="id2"]/epsilon[@or][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]//tau[contains(concat(@and,"$"),"ue$")][not(child::node())][following-sibling::*[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[following-sibling::*[position()=5]][following-sibling::epsilon[@abort="123456789"][@xml:id="id4"][following-sibling::*[position()=4]][following-sibling::epsilon[@desciption="another attribute value"][@xml:lang="en-US"][not(child::node())][following-sibling::mu[@name][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::nu[@name][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][following-sibling::tau[contains(@name,"another attribute value")][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 5]]/alpha[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@class][not(child::node())][following-sibling::phi[@delete][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::nu[following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@desciption][@xml:id="id8"][preceding-sibling::*[position() = 4]]//delta[@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::delta)]/chi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::psi[starts-with(@data,"tr")][@xml:lang="no"][@xml:id="id10"]//xi[@number][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]]]</xpath> + <tree> + <omega or="attribute value" xml:lang="no-nb" xml:id="id1"> + <phi or="attribute value" xml:lang="en-US"/> + <eta xml:lang="en-GB"> + <psi name="this-is-att-value" xml:lang="en"/> + <theta xml:id="id2"> + <epsilon or="attribute-value"/> + <pi xml:lang="en" xml:id="id3"> + <tau and="this-is-att-value"/> + <any xml:lang="en-GB"> + <chi/> + <epsilon abort="123456789" xml:id="id4"/> + <epsilon desciption="another attribute value" xml:lang="en-US"/> + <mu name="_blank" xml:id="id5"/> + <nu name="this.nodeValue" xml:lang="no-nb"/> + <tau name="another attribute value" xml:lang="en" xml:id="id6"> + <alpha xml:id="id7"/> + <sigma class="attribute-value"/> + <phi delete="attribute-value" xml:lang="nb"/> + <nu/> + <nu desciption="solid 1px green" xml:id="id8"> + <delta xml:lang="nb" xml:id="id9"> + <chi xml:lang="en"/> + <psi data="true" xml:lang="no" xml:id="id10"> + <xi number="false" xml:id="id11"> + <green>This text must be green</green> + </xi> + </psi> + </delta> + </nu> + </tau> + </any> + </pi> + </theta> + </eta> + </omega> + </tree> + </test> + <test> + <xpath>//omega[contains(@token,"his-is-")][@xml:id="id1"]/omicron[@xml:lang="en-GB"][not(preceding-sibling::*)]//pi[starts-with(@object,"tr")][not(child::node())][following-sibling::eta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[@xml:lang="en"][@xml:id="id2"][not(child::node())][following-sibling::chi[@xml:lang="no"][not(following-sibling::*)]][position() = 1]]]</xpath> + <tree> + <omega token="this-is-att-value" xml:id="id1"> + <omicron xml:lang="en-GB"> + <pi object="true"/> + <eta xml:lang="en-GB"/> + <lambda xml:lang="en" xml:id="id2"/> + <chi xml:lang="no"> + <green>This text must be green</green> + </chi> + </omicron> + </omega> + </tree> + </test> + <test> + <xpath>//tau[starts-with(concat(@desciption,"-"),"false-")]/chi[@att][@xml:lang="no"][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[starts-with(concat(@token,"-"),"content-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/sigma[contains(concat(@number,"$")," attribute value$")][@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::delta[@false][@xml:lang="nb"][@xml:id="id3"][not(child::node())][following-sibling::eta[@attr][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::eta[@class="123456789"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/iota[starts-with(concat(@title,"-"),"true-")][@xml:lang="nb"][not(preceding-sibling::*)]//psi[starts-with(concat(@number,"-"),"100%-")][@xml:lang="no"][@xml:id="id5"]//omicron[@attribute="true"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@true][@xml:id="id7"][not(preceding-sibling::*)][not(preceding-sibling::beta or following-sibling::beta)]//pi[starts-with(concat(@number,"-"),"solid 1px green-")][@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::sigma[contains(@or,"t")][@xml:lang="en-GB"][not(following-sibling::*)]/chi[contains(concat(@abort,"$"),"%$")][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="no"][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/omicron[@or][not(preceding-sibling::*)]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <tau desciption="false"> + <chi att="false" xml:lang="no" xml:id="id1"/> + <rho token="content"> + <sigma number="another attribute value" xml:lang="nb" xml:id="id2"/> + <delta false="content" xml:lang="nb" xml:id="id3"/> + <eta attr="_blank" xml:lang="en-GB"/> + <eta class="123456789" xml:id="id4"> + <iota title="true" xml:lang="nb"> + <psi number="100%" xml:lang="no" xml:id="id5"> + <omicron attribute="true" xml:id="id6"> + <beta true="123456789" xml:id="id7"> + <pi number="solid 1px green" xml:lang="no" xml:id="id8"/> + <sigma or="content" xml:lang="en-GB"> + <chi abort="100%" xml:lang="nb"/> + <iota xml:lang="nb"/> + <tau xml:lang="no" xml:id="id9"> + <omicron or="content"> + <green>This text must be green</green> + </omicron> + </tau> + </sigma> + </beta> + </omicron> + </psi> + </iota> + </eta> + </rho> + </tau> + </tree> + </test> + <test> + <xpath>//delta[@xml:id="id1"]//pi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[@attrib][preceding-sibling::*[position() = 1]]//nu[@xml:id="id2"][not(following-sibling::*)]//chi[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[contains(concat(@true,"$"),"value$")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::*[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[starts-with(@attrib,"_bla")][@xml:lang="nb"][@xml:id="id5"]//mu[@token][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::kappa[@name="attribute"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[@data][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omicron[@att="solid 1px green"][@xml:id="id8"][not(following-sibling::*)]/delta[starts-with(@att,"attribute-")][@xml:id="id9"][not(following-sibling::*)]/sigma[@delete][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id10"][following-sibling::delta[@number][@xml:lang="no"]/tau[@false][@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[starts-with(@string,"12345")][@xml:lang="en-US"][@xml:id="id12"][not(following-sibling::*)]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <delta xml:id="id1"> + <pi xml:lang="no-nb"/> + <any attrib="another attribute value"> + <nu xml:id="id2"> + <chi xml:lang="nb" xml:id="id3"> + <beta true="attribute-value" xml:id="id4"/> + <any/> + <tau attrib="_blank" xml:lang="nb" xml:id="id5"> + <mu token="this.nodeValue" xml:lang="en-US"/> + <kappa name="attribute" xml:id="id6"> + <psi data="100%" xml:lang="en-GB" xml:id="id7"/> + <omicron att="solid 1px green" xml:id="id8"> + <delta att="attribute-value" xml:id="id9"> + <sigma delete="attribute"/> + <zeta xml:lang="en-GB" xml:id="id10"/> + <delta number="this.nodeValue" xml:lang="no"> + <tau false="attribute" xml:lang="no-nb" xml:id="id11"> + <chi string="123456789" xml:lang="en-US" xml:id="id12"> + <green>This text must be green</green> + </chi> + </tau> + </delta> + </delta> + </omicron> + </kappa> + </tau> + </chi> + </nu> + </any> + </delta> + </tree> + </test> + <test> + <xpath>//mu[@and]//*[starts-with(concat(@content,"-"),"attribute value-")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::epsilon[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::zeta[starts-with(@content,"another a")][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/mu[@name][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::sigma[not(child::node())][following-sibling::gamma[@xml:lang="no"]/upsilon[@xml:id="id3"][not(preceding-sibling::*)]//omicron[@att][@xml:lang="en"][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::gamma[@xml:lang="en"][not(following-sibling::*)]//gamma[@att="solid 1px green"]//epsilon[contains(concat(@attrib,"$"),"ue$")][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][following-sibling::chi[@abort][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omega[@xml:id="id7"][preceding-sibling::*[position() = 3]]//nu[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <mu and="false"> + <any content="attribute value" xml:lang="en-US" xml:id="id1"/> + <epsilon xml:lang="no"/> + <zeta content="another attribute value" xml:id="id2"> + <mu name="false" xml:lang="no-nb"/> + <sigma/> + <gamma xml:lang="no"> + <upsilon xml:id="id3"> + <omicron att="solid 1px green" xml:lang="en"/> + <psi xml:lang="en-GB" xml:id="id4"/> + <pi xml:lang="no-nb" xml:id="id5"/> + <gamma xml:lang="en"> + <gamma att="solid 1px green"> + <epsilon attrib="true"/> + <sigma xml:lang="en-GB"/> + <chi abort="attribute value" xml:lang="en-GB" xml:id="id6"/> + <omega xml:id="id7"> + <nu xml:lang="en"> + <green>This text must be green</green> + </nu> + </omega> + </gamma> + </gamma> + </upsilon> + </gamma> + </zeta> + </mu> + </tree> + </test> + <test> + <xpath>//mu[@xml:lang="en"]/chi[contains(concat(@and,"$"),"solid 1px green$")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)]//mu[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]/*[@xml:lang="nb"][not(child::node())][following-sibling::omega[@token="content"][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//beta[@att="attribute value"][@xml:lang="en-US"][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"][following-sibling::kappa[contains(concat(@object,"$"),"content$")][@xml:lang="en-GB"][not(following-sibling::*)]/gamma][position() = 1]]]</xpath> + <tree> + <mu xml:lang="en"> + <chi and="solid 1px green" xml:lang="en-US" xml:id="id1"> + <mu xml:lang="en-US" xml:id="id2"> + <any xml:lang="nb"/> + <omega token="content" xml:lang="en" xml:id="id3"> + <beta att="attribute value" xml:lang="en-US"/> + <epsilon xml:lang="en-GB"/> + <kappa object="content" xml:lang="en-GB"> + <gamma> + <green>This text must be green</green> + </gamma> + </kappa> + </omega> + </mu> + </chi> + </mu> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="nb"]//rho[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::theta[starts-with(@data,"f")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[not(following-sibling::pi)][not(child::node())][following-sibling::delta[@xml:lang="en"]//zeta[not(child::node())][following-sibling::epsilon[@xml:id="id2"][not(child::node())][following-sibling::lambda[contains(@or,"gre")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/kappa[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(following-sibling::kappa)][not(child::node())][following-sibling::sigma[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::iota[following-sibling::*[position()=1]][not(preceding-sibling::iota)][not(child::node())][following-sibling::omicron[starts-with(@class,"a")][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:lang="no-nb"][@xml:id="id8"][following-sibling::omega[@src][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[starts-with(@name,"a")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id10"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha xml:lang="nb"> + <rho xml:lang="en-US" xml:id="id1"/> + <theta data="false" xml:lang="no"/> + <pi/> + <delta xml:lang="en"> + <zeta/> + <epsilon xml:id="id2"/> + <lambda or="solid 1px green"> + <kappa xml:id="id3"/> + <sigma xml:lang="en-US"> + <delta xml:id="id4"/> + <iota/> + <omicron class="attribute value" xml:id="id5"> + <nu xml:lang="no" xml:id="id6"/> + <iota xml:lang="no-nb" xml:id="id7"> + <mu xml:lang="no-nb" xml:id="id8"/> + <omega src="true" xml:id="id9"> + <any name="attribute" xml:lang="nb"> + <upsilon xml:id="id10"> + <green>This text must be green</green> + </upsilon> + </any> + </omega> + </iota> + </omicron> + </sigma> + </lambda> + </delta> + </alpha> + </tree> + </test> + <test> + <xpath>//eta[contains(concat(@data,"$"),"ntent$")][@xml:lang="en-GB"][@xml:id="id1"]/xi[starts-with(concat(@false,"-"),"false-")][not(preceding-sibling::*)]/*[@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::epsilon[@false][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/*[@xml:lang="en-US"][not(child::node())][following-sibling::beta[@true="attribute"][@xml:lang="no"][not(following-sibling::*)]/mu[@abort="another attribute value"][not(child::node())][following-sibling::upsilon[@attrib][following-sibling::nu[contains(concat(@att,"$"),"ue$")]//alpha[@xml:id="id4"][not(following-sibling::*)]/omicron[@object][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::sigma[@number="this.nodeValue"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[starts-with(concat(@content,"-"),"this-")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::beta[@xml:lang="no-nb"]//*[not(preceding-sibling::*)][not(following-sibling::*)]/chi[not(preceding-sibling::*)][following-sibling::theta[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]]]][position() = 1]]</xpath> + <tree> + <eta data="content" xml:lang="en-GB" xml:id="id1"> + <xi false="false"> + <any xml:lang="en-GB" xml:id="id2"/> + <epsilon false="another attribute value" xml:id="id3"/> + <xi> + <any xml:lang="en-US"/> + <beta true="attribute" xml:lang="no"> + <mu abort="another attribute value"/> + <upsilon attrib="attribute"/> + <nu att="attribute-value"> + <alpha xml:id="id4"> + <omicron object="_blank" xml:id="id5"/> + <sigma number="this.nodeValue" xml:id="id6"> + <mu content="this-is-att-value" xml:lang="no"/> + <beta xml:lang="no-nb"> + <any> + <chi/> + <theta xml:lang="no" xml:id="id7"> + <green>This text must be green</green> + </theta> + </any> + </beta> + </sigma> + </alpha> + </nu> + </beta> + </xi> + </xi> + </eta> + </tree> + </test> + <test> + <xpath>//iota[starts-with(@false,"attribute ")]//lambda[@or][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[@attr][@xml:lang="en"][not(following-sibling::*)]/xi[@number][@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::xi)][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 2]][following-sibling::sigma[@xml:lang="en-GB"][not(child::node())][following-sibling::iota[@delete="attribute"]//beta[starts-with(concat(@class,"-"),"content-")][@xml:lang="en-US"][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[@insert][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::*[starts-with(concat(@title,"-"),"attribute-")]/psi[not(preceding-sibling::*)][not(following-sibling::*)]//tau[@xml:id="id4"][following-sibling::iota[starts-with(@attribute,"th")][@xml:lang="en-US"][following-sibling::tau[contains(@attr,"bute-value")][@xml:lang="en"][not(following-sibling::*)]//mu[@insert][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::eta[@string][@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::eta[@xml:lang="nb"][@xml:id="id6"]/rho[not(child::node())][following-sibling::*[@or][@xml:lang="en"]/xi[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota false="attribute value"> + <lambda or="this-is-att-value"/> + <xi attr="attribute-value" xml:lang="en"> + <xi number="attribute-value" xml:lang="en" xml:id="id1"/> + <xi/> + <zeta/> + <sigma xml:lang="en-GB"/> + <iota delete="attribute"> + <beta class="content" xml:lang="en-US" xml:id="id2"/> + <tau insert="false" xml:id="id3"/> + <any title="attribute"> + <psi> + <tau xml:id="id4"/> + <iota attribute="this.nodeValue" xml:lang="en-US"/> + <tau attr="attribute-value" xml:lang="en"> + <mu insert="attribute value" xml:lang="nb" xml:id="id5"/> + <eta string="this.nodeValue" xml:lang="no"/> + <eta xml:lang="nb" xml:id="id6"> + <rho/> + <any or="_blank" xml:lang="en"> + <xi xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </xi> + </any> + </eta> + </tau> + </psi> + </any> + </iota> + </xi> + </iota> + </tree> + </test> + <test> + <xpath>//mu/omega[@xml:id="id1"][not(preceding-sibling::*)]//iota[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[starts-with(@true,"100%")][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[starts-with(@title,"tru")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//lambda[@delete][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::upsilon[not(following-sibling::*)]//sigma[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[starts-with(concat(@att,"-"),"true-")][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[starts-with(@and,"conten")][not(following-sibling::*)]//xi[@class][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@or="_blank"][@xml:lang="en-US"][@xml:id="id8"][not(following-sibling::*)]/nu[starts-with(concat(@title,"-"),"attribute value-")][@xml:lang="en-GB"][@xml:id="id9"]//psi[@xml:id="id10"][not(child::node())][following-sibling::delta[@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 1]]//iota[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu> + <omega xml:id="id1"> + <iota xml:id="id2"/> + <nu true="100%" xml:lang="nb" xml:id="id3"/> + <beta title="true" xml:lang="no"> + <lambda delete="100%" xml:id="id4"/> + <upsilon> + <sigma xml:lang="no" xml:id="id5"> + <nu att="true" xml:id="id6"/> + <xi xml:lang="no-nb"/> + <alpha and="content"> + <xi class="false" xml:lang="en" xml:id="id7"> + <omicron or="_blank" xml:lang="en-US" xml:id="id8"> + <nu title="attribute value" xml:lang="en-GB" xml:id="id9"> + <psi xml:id="id10"/> + <delta xml:lang="no" xml:id="id11"> + <iota xml:lang="en-GB"/> + <nu> + <green>This text must be green</green> + </nu> + </delta> + </nu> + </omicron> + </xi> + </alpha> + </sigma> + </upsilon> + </beta> + </omega> + </mu> + </tree> + </test> + <test> + <xpath>//sigma[starts-with(@token,"this.no")]//*//*[@xml:lang="no-nb"][@xml:id="id1"][not(child::node())][following-sibling::tau[@attrib][@xml:id="id2"][preceding-sibling::*[position() = 1]]//*[@and][following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[starts-with(@class,"this-is-at")][@xml:lang="en-US"][following-sibling::omicron[contains(concat(@true,"$"),"attribute$")][@xml:lang="en-US"][@xml:id="id4"]/alpha[@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::beta[@xml:id="id6"][following-sibling::rho[not(child::node())][following-sibling::upsilon[@attr="false"][@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=4]][following-sibling::rho[@xml:lang="en-US"][preceding-sibling::*[position() = 4]][following-sibling::zeta[not(child::node())][following-sibling::nu[starts-with(concat(@desciption,"-"),"false-")][@xml:lang="en"][preceding-sibling::*[position() = 6]][following-sibling::sigma[@xml:lang="en-GB"][@xml:id="id8"]/zeta[starts-with(@string,"attribute valu")][@xml:lang="nb"][not(child::node())][following-sibling::epsilon[@token][@xml:lang="en-US"][@xml:id="id9"][not(following-sibling::*)]//mu[starts-with(concat(@insert,"-"),"123456789-")][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma token="this.nodeValue"> + <any> + <any xml:lang="no-nb" xml:id="id1"/> + <tau attrib="100%" xml:id="id2"> + <any and="solid 1px green"/> + <omega xml:id="id3"/> + <lambda class="this-is-att-value" xml:lang="en-US"/> + <omicron true="attribute" xml:lang="en-US" xml:id="id4"> + <alpha xml:lang="no" xml:id="id5"/> + <beta xml:id="id6"/> + <rho/> + <upsilon attr="false" xml:lang="en-GB" xml:id="id7"/> + <rho xml:lang="en-US"/> + <zeta/> + <nu desciption="false" xml:lang="en"/> + <sigma xml:lang="en-GB" xml:id="id8"> + <zeta string="attribute value" xml:lang="nb"/> + <epsilon token="content" xml:lang="en-US" xml:id="id9"> + <mu insert="123456789"> + <green>This text must be green</green> + </mu> + </epsilon> + </sigma> + </omicron> + </tau> + </any> + </sigma> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]/xi[starts-with(concat(@content,"-"),"123456789-")][following-sibling::rho[@insert][@xml:lang="no"][not(following-sibling::*)]//*[@content][@xml:lang="no-nb"][@xml:id="id2"]/iota[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::pi[@xml:id="id3"][not(child::node())][following-sibling::eta[@xml:lang="en"][not(following-sibling::*)][not(preceding-sibling::eta)]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha xml:id="id1"> + <xi content="123456789"/> + <rho insert="100%" xml:lang="no"> + <any content="attribute value" xml:lang="no-nb" xml:id="id2"> + <iota/> + <pi xml:id="id3"/> + <eta xml:lang="en"> + <green>This text must be green</green> + </eta> + </any> + </rho> + </alpha> + </tree> + </test> + <test> + <xpath>//phi[@xml:id="id1"]//psi[contains(concat(@true,"$"),"en$")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[@src="content"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//tau[contains(@name,"23")][not(following-sibling::*)]/chi[@xml:lang="nb"][@xml:id="id4"][following-sibling::eta[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[starts-with(@object,"this-is-")][@xml:lang="en"][@xml:id="id5"][not(child::node())][following-sibling::delta[contains(concat(@number,"$"),"reen$")][@xml:lang="no"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::sigma[starts-with(@insert,"1")][@xml:id="id6"][not(following-sibling::*)]//chi[@att][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@number][@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]//theta[@string][@xml:lang="en"][not(preceding-sibling::*)]//kappa[not(preceding-sibling::*)][not(following-sibling::*)]//xi[contains(concat(@data,"$"),"ue$")][@xml:lang="no"][not(following-sibling::*)]//pi[@attr][not(following-sibling::*)]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <phi xml:id="id1"> + <psi true="solid 1px green" xml:id="id2"/> + <omega xml:lang="en-US"/> + <chi src="content" xml:id="id3"> + <tau name="123456789"> + <chi xml:lang="nb" xml:id="id4"/> + <eta xml:lang="no"/> + <phi object="this-is-att-value" xml:lang="en" xml:id="id5"/> + <delta number="solid 1px green" xml:lang="no"/> + <sigma insert="100%" xml:id="id6"> + <chi att="123456789"/> + <eta number="attribute-value" xml:lang="en-GB" xml:id="id7"> + <theta string="123456789" xml:lang="en"> + <kappa> + <xi data="this.nodeValue" xml:lang="no"> + <pi attr="100%"> + <green>This text must be green</green> + </pi> + </xi> + </kappa> + </theta> + </eta> + </sigma> + </tau> + </chi> + </phi> + </tree> + </test> + <test> + <xpath>//epsilon[@or][@xml:lang="en"][@xml:id="id1"]/rho[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]/tau[@attrib][@xml:id="id3"]/xi[not(preceding-sibling::*)][not(child::node())][following-sibling::chi[contains(concat(@number,"$"),"true$")][@xml:lang="nb"][following-sibling::nu[contains(@name,"ue")][@xml:lang="en-US"]//lambda[@xml:lang="en"]//omicron[not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//upsilon[@xml:lang="en-GB"][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 2]][following-sibling::iota[@xml:id="id5"][not(following-sibling::*)]/omega[@xml:lang="nb"][not(preceding-sibling::*)]//alpha[@xml:id="id6"][not(following-sibling::*)]]]][position() = 1]]]]</xpath> + <tree> + <epsilon or="attribute value" xml:lang="en" xml:id="id1"> + <rho xml:lang="en-US" xml:id="id2"> + <tau attrib="attribute" xml:id="id3"> + <xi/> + <chi number="true" xml:lang="nb"/> + <nu name="attribute value" xml:lang="en-US"> + <lambda xml:lang="en"> + <omicron/> + <phi xml:lang="no-nb"> + <upsilon xml:lang="en-GB"/> + <chi xml:lang="no" xml:id="id4"/> + <kappa/> + <iota xml:id="id5"> + <omega xml:lang="nb"> + <alpha xml:id="id6"> + <green>This text must be green</green> + </alpha> + </omega> + </iota> + </phi> + </lambda> + </nu> + </tau> + </rho> + </epsilon> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="no"]/theta[@attribute][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(concat(@token,"$"),"t-value$")][not(following-sibling::*)]//gamma[starts-with(@delete,"solid 1px")][@xml:id="id1"]/phi[starts-with(@and,"f")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)]/*[following-sibling::*[position()=7]][following-sibling::lambda[@xml:lang="en"][@xml:id="id3"][following-sibling::delta[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::lambda[@content="_blank"][@xml:lang="en-GB"][following-sibling::*[position()=4]][following-sibling::epsilon[@false][@xml:lang="en"][preceding-sibling::*[position() = 4]][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@class][not(child::node())][following-sibling::alpha[starts-with(@or,"f")]/lambda[@xml:id="id5"]/xi//gamma[starts-with(@content,"tr")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)]/lambda[starts-with(concat(@delete,"-"),"_blank-")][@xml:lang="no"][@xml:id="id7"][not(child::node())][following-sibling::*[contains(concat(@true,"$"),"ute-value$")][@xml:id="id8"][following-sibling::*[position()=2]][following-sibling::zeta[@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi//mu[starts-with(concat(@and,"-"),"false-")][@xml:lang="no-nb"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[contains(@delete,"ibute value")][@xml:lang="no-nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@class][@xml:lang="en-US"][position() = 1]]][position() = 1]]]]]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <chi xml:lang="no"> + <theta attribute="solid 1px green"/> + <sigma token="this-is-att-value"> + <gamma delete="solid 1px green" xml:id="id1"> + <phi and="false" xml:lang="no" xml:id="id2"> + <any/> + <lambda xml:lang="en" xml:id="id3"/> + <delta xml:lang="no-nb"/> + <lambda content="_blank" xml:lang="en-GB"/> + <epsilon false="attribute value" xml:lang="en"/> + <sigma xml:lang="en-US" xml:id="id4"/> + <iota class="attribute-value"/> + <alpha or="false"> + <lambda xml:id="id5"> + <xi> + <gamma content="true" xml:lang="no-nb" xml:id="id6"> + <lambda delete="_blank" xml:lang="no" xml:id="id7"/> + <any true="attribute-value" xml:id="id8"/> + <zeta xml:lang="en-US"/> + <xi> + <mu and="false" xml:lang="no-nb" xml:id="id9"/> + <epsilon delete="another attribute value" xml:lang="no-nb" xml:id="id10"/> + <alpha class="_blank" xml:lang="en-US"> + <green>This text must be green</green> + </alpha> + </xi> + </gamma> + </xi> + </lambda> + </alpha> + </phi> + </gamma> + </sigma> + </chi> + </tree> + </test> + <test> + <xpath>//zeta[@class]//sigma[not(preceding-sibling::*)]//alpha[@xml:lang="en-US"][@xml:id="id1"][not(child::node())][following-sibling::beta[contains(concat(@delete,"$"),"nt$")][@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//iota[starts-with(concat(@attribute,"-"),"true-")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[starts-with(concat(@attr,"-"),"solid 1px green-")][@xml:lang="nb"]//omicron[@delete][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::gamma[preceding-sibling::*[position() = 1]]//mu[@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta class="attribute-value"> + <sigma> + <alpha xml:lang="en-US" xml:id="id1"/> + <beta delete="content" xml:lang="nb" xml:id="id2"> + <iota attribute="true" xml:id="id3"/> + <alpha attr="solid 1px green" xml:lang="nb"> + <omicron delete="attribute-value" xml:lang="nb" xml:id="id4"/> + <gamma> + <mu xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </mu> + </gamma> + </alpha> + </beta> + </sigma> + </zeta> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(concat(@token,"-"),"solid 1px green-")][@xml:id="id1"]//chi[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[contains(@attr,"ibute valu")][not(following-sibling::*)]/nu[contains(@and," value")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::psi[starts-with(@delete,"fals")][@xml:lang="en-GB"]/omicron[contains(@and,"eValue")][@xml:id="id3"][not(following-sibling::*)]/chi[@xml:lang="no"]/sigma[@xml:lang="no"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::nu[not(child::node())][following-sibling::tau[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(following-sibling::tau)]//theta[@xml:lang="no"][@xml:id="id5"]/upsilon[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::nu[contains(concat(@string,"$"),"ibute$")][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::chi[contains(concat(@and,"$"),"_blank$")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::beta[starts-with(@string,"another attribute ")][not(following-sibling::*)]/beta[@xml:lang="no-nb"][@xml:id="id7"][not(child::node())][following-sibling::beta[@xml:id="id8"][preceding-sibling::*[position() = 1]]//eta[@xml:lang="no"][not(following-sibling::*)]/nu[not(following-sibling::*)]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omicron token="solid 1px green" xml:id="id1"> + <chi xml:lang="en-GB" xml:id="id2"> + <chi attr="attribute value"> + <nu and="another attribute value" xml:lang="en-US"/> + <psi delete="false" xml:lang="en-GB"> + <omicron and="this.nodeValue" xml:id="id3"> + <chi xml:lang="no"> + <sigma xml:lang="no" xml:id="id4"/> + <nu/> + <tau xml:lang="en-GB"> + <theta xml:lang="no" xml:id="id5"> + <upsilon xml:lang="en-US"/> + <nu string="attribute" xml:lang="en-GB" xml:id="id6"/> + <chi and="_blank" xml:lang="nb"/> + <beta string="another attribute value"> + <beta xml:lang="no-nb" xml:id="id7"/> + <beta xml:id="id8"> + <eta xml:lang="no"> + <nu> + <green>This text must be green</green> + </nu> + </eta> + </beta> + </beta> + </theta> + </tau> + </chi> + </omicron> + </psi> + </chi> + </chi> + </omicron> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="nb"]//chi[@xml:id="id1"]//delta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[contains(concat(@data,"$"),"ttribute value$")][preceding-sibling::*[position() = 1]]/chi[not(preceding-sibling::*)]//upsilon[@attrib][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[starts-with(concat(@true,"-"),"true-")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::*[not(child::node())][following-sibling::omicron[@src][not(child::node())][following-sibling::xi[@token="content"][not(following-sibling::*)]//omicron[@title][not(following-sibling::*)]/upsilon[@title][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::mu[@xml:lang="no-nb"][not(child::node())][following-sibling::sigma[starts-with(@insert,"attribut")][not(following-sibling::*)]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <omega xml:lang="nb"> + <chi xml:id="id1"> + <delta xml:id="id2"/> + <any data="attribute value"> + <chi> + <upsilon attrib="true" xml:lang="no-nb" xml:id="id3"/> + <mu true="true" xml:id="id4"/> + <any/> + <omicron src="false"/> + <xi token="content"> + <omicron title="content"> + <upsilon title="attribute" xml:lang="en"/> + <mu xml:lang="no-nb"/> + <sigma insert="attribute"> + <green>This text must be green</green> + </sigma> + </omicron> + </xi> + </chi> + </any> + </chi> + </omega> + </tree> + </test> + <test> + <xpath>//omicron[contains(@false,"k")][@xml:lang="en-US"]/pi[starts-with(concat(@token,"-"),"this.nodeValue-")][@xml:lang="no-nb"][@xml:id="id1"][not(following-sibling::*)]//tau[starts-with(@name,"fals")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 2]]//lambda[@src="another attribute value"][@xml:id="id3"][not(child::node())][following-sibling::omega[not(following-sibling::*)]//zeta[@xml:lang="nb"][not(following-sibling::*)]/beta[@string="100%"][@xml:lang="no"]/omicron[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][not(following-sibling::*)]//epsilon[not(preceding-sibling::*)]/upsilon[@content][@xml:lang="en"]/gamma//sigma[contains(@attrib,"l")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omicron[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]]]]</xpath> + <tree> + <omicron false="_blank" xml:lang="en-US"> + <pi token="this.nodeValue" xml:lang="no-nb" xml:id="id1"> + <tau name="false" xml:lang="en-US"/> + <sigma xml:lang="en-US"/> + <phi xml:lang="no-nb" xml:id="id2"> + <lambda src="another attribute value" xml:id="id3"/> + <omega> + <zeta xml:lang="nb"> + <beta string="100%" xml:lang="no"> + <omicron xml:lang="no-nb"/> + <tau xml:lang="no-nb"> + <epsilon> + <upsilon content="attribute" xml:lang="en"> + <gamma> + <sigma attrib="false" xml:id="id4"/> + <omicron xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </omicron> + </gamma> + </upsilon> + </epsilon> + </tau> + </beta> + </zeta> + </omega> + </phi> + </pi> + </omicron> + </tree> + </test> + <test> + <xpath>//gamma[starts-with(concat(@class,"-"),"attribute value-")][@xml:lang="no-nb"][@xml:id="id1"]//psi[@xml:lang="en-GB"][@xml:id="id2"]/xi[@number]//lambda[@xml:id="id3"][not(following-sibling::*)]//chi[@attr][@xml:lang="no-nb"][not(following-sibling::*)]//tau[starts-with(@att,"another")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::phi[@data="solid 1px green"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::omicron[@title][@xml:lang="no-nb"][@xml:id="id6"]/beta[@desciption][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@xml:id="id7"][not(following-sibling::*)]/phi[starts-with(@name,"t")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::zeta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]]//alpha[@xml:id="id9"][not(preceding-sibling::*)]//zeta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@delete="_blank"][@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@content][@xml:lang="en"][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[@att="attribute-value"][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//upsilon[@xml:id="id12"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::rho[contains(concat(@string,"$"),"ank$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[starts-with(@string,"this-is-at")][not(following-sibling::*)]/zeta[@xml:lang="en"][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <gamma class="attribute value" xml:lang="no-nb" xml:id="id1"> + <psi xml:lang="en-GB" xml:id="id2"> + <xi number="this-is-att-value"> + <lambda xml:id="id3"> + <chi attr="solid 1px green" xml:lang="no-nb"> + <tau att="another attribute value" xml:lang="en-US" xml:id="id4"/> + <phi data="solid 1px green" xml:id="id5"/> + <omicron title="100%" xml:lang="no-nb" xml:id="id6"> + <beta desciption="100%"> + <nu xml:id="id7"> + <phi name="true" xml:lang="no-nb"/> + <zeta xml:lang="no-nb"/> + <upsilon xml:lang="en-GB" xml:id="id8"> + <alpha xml:id="id9"> + <zeta xml:lang="no-nb"> + <kappa delete="_blank" xml:lang="nb" xml:id="id10"> + <tau content="content" xml:lang="en"/> + <alpha xml:id="id11"/> + <gamma att="attribute-value" xml:lang="nb"> + <upsilon xml:id="id12"/> + <rho string="_blank"/> + <omega string="this-is-att-value"> + <zeta xml:lang="en"> + <green>This text must be green</green> + </zeta> + </omega> + </gamma> + </kappa> + </zeta> + </alpha> + </upsilon> + </nu> + </beta> + </omicron> + </chi> + </lambda> + </xi> + </psi> + </gamma> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="en-US"]/xi[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id2"]/nu[following-sibling::iota[following-sibling::lambda[@insert="false"][@xml:id="id3"][not(child::node())][following-sibling::lambda[contains(concat(@number,"$"),"alue$")][@xml:lang="en"][not(child::node())][following-sibling::gamma[starts-with(@attr,"at")][@xml:id="id4"]//iota[@att][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma//rho[starts-with(@attr,"attribut")][@xml:lang="en"][@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@title][@xml:id="id6"][preceding-sibling::*[position() = 1]]//xi[contains(concat(@src,"$"),"s-att-value$")][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::sigma[contains(concat(@abort,"$"),"se$")][@xml:lang="en-US"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 2]]/delta[@xml:lang="no"][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id9"]/theta[starts-with(concat(@attrib,"-"),"this-")][@xml:lang="en-GB"][@xml:id="id10"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="nb"][@xml:id="id11"][not(following-sibling::*)]//phi[@attr][@xml:lang="en"][@xml:id="id12"][not(preceding-sibling::*)]//lambda[@xml:lang="en-GB"][not(child::node())][following-sibling::alpha[contains(concat(@src,"$"),"00%$")][@xml:lang="en"][@xml:id="id13"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@object][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="en-US"> + <xi xml:lang="en-GB" xml:id="id1"/> + <omicron xml:lang="no" xml:id="id2"> + <nu/> + <iota/> + <lambda insert="false" xml:id="id3"/> + <lambda number="attribute value" xml:lang="en"/> + <gamma attr="attribute" xml:id="id4"> + <iota att="123456789"/> + <sigma> + <rho attr="attribute" xml:lang="en" xml:id="id5"/> + <any title="100%" xml:id="id6"> + <xi src="this-is-att-value" xml:lang="en" xml:id="id7"/> + <sigma abort="false" xml:lang="en-US"/> + <psi xml:lang="nb" xml:id="id8"> + <delta xml:lang="no"/> + <chi xml:lang="no" xml:id="id9"> + <theta attrib="this-is-att-value" xml:lang="en-GB" xml:id="id10"/> + <psi xml:lang="nb" xml:id="id11"> + <phi attr="another attribute value" xml:lang="en" xml:id="id12"> + <lambda xml:lang="en-GB"/> + <alpha src="100%" xml:lang="en" xml:id="id13"> + <pi object="attribute"> + <green>This text must be green</green> + </pi> + </alpha> + </phi> + </psi> + </chi> + </psi> + </any> + </sigma> + </gamma> + </omicron> + </omicron> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]/theta[@string][@xml:id="id2"][not(following-sibling::*)]//*[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/eta[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::eta)]//*[@object][@xml:id="id5"][position() = 1]]</xpath> + <tree> + <sigma xml:id="id1"> + <theta string="this.nodeValue" xml:id="id2"> + <any xml:lang="nb"/> + <tau xml:lang="en" xml:id="id3"> + <eta xml:id="id4"> + <any object="attribute-value" xml:id="id5"> + <green>This text must be green</green> + </any> + </eta> + </tau> + </theta> + </sigma> + </tree> + </test> + <test> + <xpath>//kappa[starts-with(@att,"12345")]//chi[contains(@attribute,"te")][@xml:id="id1"][not(child::node())][following-sibling::*[starts-with(@content,"tru")][@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[starts-with(@desciption,"att")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::mu[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@content]/zeta[starts-with(@false,"attribute-value")][@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]/beta[@att][@xml:lang="en-US"][@xml:id="id4"]/chi[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@class][not(preceding-sibling::*)][following-sibling::epsilon[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[contains(concat(@object,"$"),"00%$")][@xml:lang="en-GB"][@xml:id="id7"]//alpha[@xml:lang="no-nb"][@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::rho[starts-with(concat(@and,"-"),"true-")][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]][position() = 1]]]</xpath> + <tree> + <kappa att="123456789"> + <chi attribute="attribute" xml:id="id1"/> + <any content="true" xml:lang="nb" xml:id="id2"> + <iota desciption="attribute-value" xml:lang="nb"/> + <mu> + <alpha content="another attribute value"> + <zeta false="attribute-value" xml:lang="no" xml:id="id3"> + <beta att="solid 1px green" xml:lang="en-US" xml:id="id4"> + <chi xml:lang="no-nb" xml:id="id5"> + <rho class="123456789"/> + <epsilon xml:lang="en-US" xml:id="id6"> + <tau object="100%" xml:lang="en-GB" xml:id="id7"> + <alpha xml:lang="no-nb" xml:id="id8"/> + <rho and="true" xml:id="id9"> + <green>This text must be green</green> + </rho> + </tau> + </epsilon> + </chi> + </beta> + </zeta> + </alpha> + </mu> + </any> + </kappa> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en"][@xml:id="id1"]/mu[starts-with(@attribute,"attri")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/gamma[@content="this.nodeValue"][@xml:id="id3"][not(following-sibling::*)]/omicron[@and][not(preceding-sibling::*)]//phi[@delete][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@att="_blank"][@xml:lang="no"][preceding-sibling::*[position() = 1]]/kappa[@false="another attribute value"][@xml:id="id5"][not(preceding-sibling::*)]//zeta[@delete="attribute-value"][@xml:id="id6"][not(child::node())][following-sibling::alpha[@xml:lang="nb"][not(child::node())][following-sibling::omega[starts-with(@number,"con")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/theta[@abort][@xml:lang="no-nb"][not(following-sibling::*)]/beta[following-sibling::upsilon[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::pi//phi[starts-with(@false,"conten")][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::rho[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omega[@attribute="false"][@xml:id="id8"][following-sibling::upsilon[starts-with(@attrib,"another attrib")][following-sibling::*[position()=1]][following-sibling::zeta[@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/theta[starts-with(@attrib,"conten")][@xml:id="id10"][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <delta xml:lang="en" xml:id="id1"> + <mu attribute="attribute value" xml:lang="en"/> + <psi xml:lang="no" xml:id="id2"/> + <pi xml:lang="en-US"> + <gamma content="this.nodeValue" xml:id="id3"> + <omicron and="this.nodeValue"> + <phi delete="100%" xml:id="id4"/> + <lambda att="_blank" xml:lang="no"> + <kappa false="another attribute value" xml:id="id5"> + <zeta delete="attribute-value" xml:id="id6"/> + <alpha xml:lang="nb"/> + <omega number="content" xml:lang="en-US" xml:id="id7"> + <theta abort="attribute" xml:lang="no-nb"> + <beta/> + <upsilon xml:lang="no-nb"/> + <pi> + <phi false="content"/> + <rho xml:lang="en-US"> + <omega attribute="false" xml:id="id8"/> + <upsilon attrib="another attribute value"/> + <zeta xml:id="id9"> + <theta attrib="content" xml:id="id10"> + <green>This text must be green</green> + </theta> + </zeta> + </rho> + </pi> + </theta> + </omega> + </kappa> + </lambda> + </omicron> + </gamma> + </pi> + </delta> + </tree> + </test> + <test> + <xpath>//mu[contains(@content,"his.no")][@xml:lang="nb"]/psi[contains(concat(@true,"$"),"id 1px green$")][@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(concat(@name,"$"),"odeValue$")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@object="100%"][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/omicron[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:lang="no-nb"][not(child::node())][following-sibling::gamma[starts-with(@att,"fa")][preceding-sibling::*[position() = 3]]//phi[contains(concat(@and,"$"),"other attribute value$")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[contains(@title,"2345")][@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]/beta[contains(@abort,"se")][not(preceding-sibling::*)]//epsilon[contains(concat(@attrib,"$"),"nother attribute value$")][@xml:id="id5"][not(child::node())][following-sibling::iota[@xml:lang="no"][@xml:id="id6"][following-sibling::theta[@xml:lang="en-GB"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::sigma[@object="_blank"][@xml:id="id8"][not(following-sibling::*)]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu content="this.nodeValue" xml:lang="nb"> + <psi true="solid 1px green" xml:lang="en" xml:id="id1"/> + <mu name="this.nodeValue"/> + <rho object="100%" xml:lang="no-nb"> + <omicron xml:lang="en-US"/> + <epsilon xml:lang="nb" xml:id="id2"/> + <lambda xml:lang="no-nb"/> + <gamma att="false"> + <phi and="another attribute value" xml:id="id3"> + <alpha title="123456789" xml:lang="en" xml:id="id4"> + <beta abort="false"> + <epsilon attrib="another attribute value" xml:id="id5"/> + <iota xml:lang="no" xml:id="id6"/> + <theta xml:lang="en-GB" xml:id="id7"/> + <sigma object="_blank" xml:id="id8"> + <green>This text must be green</green> + </sigma> + </beta> + </alpha> + </phi> + </gamma> + </rho> + </mu> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="no-nb"][@xml:id="id1"]/zeta[@delete="another attribute value"][not(preceding-sibling::*)]//mu[@xml:lang="nb"]/zeta[@xml:id="id2"][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//kappa[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[contains(@or,"his.nodeValue")][@xml:id="id5"]//eta[@xml:id="id6"][not(child::node())][following-sibling::chi[contains(@desciption,"attri")][preceding-sibling::*[position() = 1]]//delta[@xml:lang="no"][not(preceding-sibling::*)]/phi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[starts-with(@object,"conten")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@true="false"][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta xml:lang="no-nb" xml:id="id1"> + <zeta delete="another attribute value"> + <mu xml:lang="nb"> + <zeta xml:id="id2"/> + <beta/> + <nu xml:id="id3"> + <kappa xml:lang="nb" xml:id="id4"/> + <kappa or="this.nodeValue" xml:id="id5"> + <eta xml:id="id6"/> + <chi desciption="attribute"> + <delta xml:lang="no"> + <phi xml:lang="en-GB"> + <alpha object="content" xml:lang="no" xml:id="id7"/> + <delta true="false" xml:lang="en-GB" xml:id="id8"> + <green>This text must be green</green> + </delta> + </phi> + </delta> + </chi> + </kappa> + </nu> + </mu> + </zeta> + </theta> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en-GB"][@xml:id="id1"]//tau[contains(concat(@token,"$"),"t-value$")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::*[contains(@attrib,"attribute val")][@xml:lang="en-GB"][not(following-sibling::*)]/nu[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omicron[starts-with(@string,"f")][@xml:lang="nb"][@xml:id="id3"]/beta[@title="content"][not(following-sibling::*)]/kappa[@or][@xml:lang="en-GB"][not(following-sibling::*)]/omega[not(preceding-sibling::*)][following-sibling::kappa[@data][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[@xml:lang="en-US"][not(following-sibling::*)]/gamma[starts-with(@name,"attribute-valu")][@xml:lang="nb"][@xml:id="id5"]/nu[@src="solid 1px green"][@xml:id="id6"][not(preceding-sibling::*)]//phi[@xml:id="id7"][not(preceding-sibling::*)]//chi[@xml:lang="nb"][not(following-sibling::*)]/phi[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta xml:lang="en-GB" xml:id="id1"> + <tau token="this-is-att-value" xml:lang="en-US"/> + <omega xml:lang="en-GB" xml:id="id2"/> + <any attrib="attribute value" xml:lang="en-GB"> + <nu xml:lang="en-US"/> + <omicron string="false" xml:lang="nb" xml:id="id3"> + <beta title="content"> + <kappa or="solid 1px green" xml:lang="en-GB"> + <omega/> + <kappa data="attribute-value" xml:lang="en-GB" xml:id="id4"> + <beta xml:lang="en"/> + <any xml:lang="en-US"> + <gamma name="attribute-value" xml:lang="nb" xml:id="id5"> + <nu src="solid 1px green" xml:id="id6"> + <phi xml:id="id7"> + <chi xml:lang="nb"> + <phi xml:lang="en" xml:id="id8"/> + <omicron xml:lang="en-US"> + <green>This text must be green</green> + </omicron> + </chi> + </phi> + </nu> + </gamma> + </any> + </kappa> + </kappa> + </beta> + </omicron> + </any> + </delta> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]/mu[@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::upsilon[@and="attribute value"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[following-sibling::*[position()=1]][following-sibling::lambda[preceding-sibling::*[position() = 3]]/tau[@xml:lang="nb"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::lambda[@or="true"][@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//kappa[@xml:lang="en"][@xml:id="id6"][following-sibling::*[position()=3]][following-sibling::kappa[@xml:lang="no-nb"][@xml:id="id7"][not(child::node())][following-sibling::omicron[@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 3]][not(following-sibling::*)]/rho[@delete][not(preceding-sibling::*)]]]]][position() = 1]]]]</xpath> + <tree> + <zeta xml:id="id1"> + <mu xml:lang="en-GB" xml:id="id2"/> + <upsilon and="attribute value" xml:id="id3"/> + <any/> + <lambda> + <tau xml:lang="nb" xml:id="id4"/> + <lambda or="true" xml:lang="nb" xml:id="id5"> + <kappa xml:lang="en" xml:id="id6"/> + <kappa xml:lang="no-nb" xml:id="id7"/> + <omicron xml:lang="no-nb"/> + <psi> + <rho delete="this-is-att-value"> + <green>This text must be green</green> + </rho> + </psi> + </lambda> + </lambda> + </zeta> + </tree> + </test> + <test> + <xpath>//pi[contains(concat(@true,"$"),"value$")][@xml:lang="no"][@xml:id="id1"]//iota[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[not(following-sibling::*)][not(parent::*/*[position()=2])]//rho[contains(concat(@token,"$"),"ontent$")][@xml:lang="no"][following-sibling::iota[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(following-sibling::iota)]//epsilon//beta[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[preceding-sibling::*[position() = 1]]/delta[@xml:id="id4"][not(following-sibling::*)]/psi[@content][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)]//mu[@xml:id="id6"]/delta[not(following-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <pi true="attribute value" xml:lang="no" xml:id="id1"> + <iota xml:lang="no-nb" xml:id="id2"/> + <gamma xml:lang="en" xml:id="id3"> + <lambda> + <rho token="content" xml:lang="no"/> + <iota xml:lang="en"> + <epsilon> + <beta xml:lang="no-nb"/> + <epsilon> + <delta xml:id="id4"> + <psi content="another attribute value" xml:lang="nb" xml:id="id5"> + <mu xml:id="id6"> + <delta> + <green>This text must be green</green> + </delta> + </mu> + </psi> + </delta> + </epsilon> + </epsilon> + </iota> + </lambda> + </gamma> + </pi> + </tree> + </test> + <test> + <xpath>//omega/*[@xml:id="id1"][following-sibling::*[position()=2]][following-sibling::tau[@xml:lang="en-US"][@xml:id="id2"][following-sibling::*[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/eta[@xml:id="id3"][following-sibling::rho[preceding-sibling::*[position() = 1]]/phi[starts-with(@abort,"this-is-att-va")][not(following-sibling::*)]/pi[@xml:id="id4"][following-sibling::kappa[starts-with(@token,"1234567")][@xml:lang="nb"][following-sibling::lambda[starts-with(@or,"_b")][@xml:lang="en"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::*[@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]//alpha[@data][@xml:lang="nb"][@xml:id="id7"][not(following-sibling::*)][not(preceding-sibling::alpha)]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <omega> + <any xml:id="id1"/> + <tau xml:lang="en-US" xml:id="id2"/> + <any xml:lang="en-GB"> + <eta xml:id="id3"/> + <rho> + <phi abort="this-is-att-value"> + <pi xml:id="id4"/> + <kappa token="123456789" xml:lang="nb"/> + <lambda or="_blank" xml:lang="en" xml:id="id5"/> + <any xml:lang="en-US" xml:id="id6"> + <alpha data="content" xml:lang="nb" xml:id="id7"> + <green>This text must be green</green> + </alpha> + </any> + </phi> + </rho> + </any> + </omega> + </tree> + </test> + <test> + <xpath>//beta[@xml:id="id1"]//delta[contains(@insert,"rue")][@xml:lang="en-GB"][not(child::node())][following-sibling::mu[following-sibling::upsilon/omicron[contains(concat(@content,"$"),"rue$")][@xml:lang="en-GB"][not(following-sibling::*)]//delta[starts-with(@abort,"1234")][@xml:lang="nb"]/mu[@xml:lang="en-GB"][@xml:id="id2"]//omicron[@xml:id="id3"][not(preceding-sibling::*)]/tau[@insert][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[contains(@attribute,"ue")][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::iota[@xml:id="id6"][not(child::node())][following-sibling::kappa[@xml:lang="en"][following-sibling::omicron[not(preceding-sibling::omicron or following-sibling::omicron)][following-sibling::pi[not(following-sibling::pi)][not(child::node())][following-sibling::epsilon[@desciption][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 5]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta xml:id="id1"> + <delta insert="true" xml:lang="en-GB"/> + <mu/> + <upsilon> + <omicron content="true" xml:lang="en-GB"> + <delta abort="123456789" xml:lang="nb"> + <mu xml:lang="en-GB" xml:id="id2"> + <omicron xml:id="id3"> + <tau insert="content" xml:id="id4"> + <rho attribute="attribute value" xml:lang="en-US" xml:id="id5"/> + <iota xml:id="id6"/> + <kappa xml:lang="en"/> + <omicron/> + <pi/> + <epsilon desciption="100%" xml:lang="en-US" xml:id="id7"> + <green>This text must be green</green> + </epsilon> + </tau> + </omicron> + </mu> + </delta> + </omicron> + </upsilon> + </beta> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@true,"-"),"123456789-")]/gamma[@insert="another attribute value"][@xml:id="id1"][following-sibling::*[@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::phi[starts-with(@data,"so")][@xml:lang="no"][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id4"]//mu[not(child::node())][following-sibling::upsilon[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:id="id6"][following-sibling::theta[starts-with(@and,"sol")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:id="id7"][not(child::node())][following-sibling::gamma[@xml:id="id8"][not(following-sibling::*)]//rho[starts-with(@data,"attribute")][@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][not(preceding-sibling::rho)][not(child::node())][following-sibling::eta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]//upsilon[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::*[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/chi[@title][following-sibling::gamma[@xml:lang="no"][following-sibling::rho[contains(@name,"his.nodeVal")][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[contains(concat(@or,"$"),"k$")][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::iota[@attrib="false"][@xml:id="id11"][not(following-sibling::*)]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <delta true="123456789"> + <gamma insert="another attribute value" xml:id="id1"/> + <any xml:lang="nb" xml:id="id2"/> + <phi data="solid 1px green" xml:lang="no" xml:id="id3"/> + <epsilon xml:lang="en-GB"/> + <tau xml:lang="no-nb" xml:id="id4"> + <mu/> + <upsilon xml:lang="no" xml:id="id5"> + <mu xml:id="id6"/> + <theta and="solid 1px green" xml:lang="en-US"/> + <theta xml:id="id7"/> + <gamma xml:id="id8"> + <rho data="attribute value" xml:lang="en" xml:id="id9"/> + <eta xml:lang="en-US"> + <upsilon xml:lang="en"/> + <any/> + <xi xml:lang="nb" xml:id="id10"> + <chi title="100%"/> + <gamma xml:lang="no"/> + <rho name="this.nodeValue"/> + <theta or="_blank"/> + <iota attrib="false" xml:id="id11"> + <green>This text must be green</green> + </iota> + </xi> + </eta> + </gamma> + </upsilon> + </tau> + </delta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="nb"][@xml:id="id1"]//beta[contains(concat(@true,"$"),"value$")][@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]/lambda[starts-with(concat(@delete,"-"),"attribute-")][@xml:id="id3"][following-sibling::*[position()=2]][following-sibling::eta[@content][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::theta[not(following-sibling::*)]//kappa[not(child::node())][following-sibling::gamma[starts-with(@src,"_")][not(following-sibling::*)]//delta[contains(@or,"att-")][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[@number][@xml:lang="nb"][@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[not(following-sibling::*)]]][position() = 1]]]]</xpath> + <tree> + <sigma xml:lang="nb" xml:id="id1"> + <beta true="this-is-att-value" xml:lang="en" xml:id="id2"> + <lambda delete="attribute" xml:id="id3"/> + <eta content="100%"/> + <theta> + <kappa/> + <gamma src="_blank"> + <delta or="this-is-att-value" xml:id="id4"/> + <zeta number="solid 1px green" xml:lang="nb" xml:id="id5"/> + <chi> + <green>This text must be green</green> + </chi> + </gamma> + </theta> + </beta> + </sigma> + </tree> + </test> + <test> + <xpath>//omega[starts-with(concat(@delete,"-"),"false-")]/iota[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[starts-with(concat(@delete,"-"),"false-")][@xml:id="id1"][not(preceding-sibling::epsilon)]//phi[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[contains(concat(@and,"$"),"tribute-value$")]//zeta[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@xml:lang="en-GB"][not(preceding-sibling::*)]/rho[@xml:lang="en-US"][following-sibling::gamma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[@att][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:lang="no"]/*[@attrib="this-is-att-value"][not(following-sibling::*)]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega delete="false"> + <iota xml:lang="nb"/> + <epsilon delete="false" xml:id="id1"> + <phi xml:id="id2"/> + <nu xml:lang="nb"> + <phi and="attribute-value"> + <zeta xml:lang="no" xml:id="id3"> + <psi xml:lang="en-GB"> + <rho xml:lang="en-US"/> + <gamma> + <psi att="true" xml:id="id4"> + <eta xml:lang="no"> + <any attrib="this-is-att-value"> + <green>This text must be green</green> + </any> + </eta> + </psi> + </gamma> + </psi> + </zeta> + </phi> + </nu> + </epsilon> + </omega> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no"]//tau[starts-with(@class,"attri")][@xml:id="id1"]/pi[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[starts-with(@name,"anothe")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)]/upsilon[contains(concat(@number,"$"),"ute value$")][@xml:id="id3"][not(preceding-sibling::*)]//*[starts-with(concat(@or,"-"),"this-")][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]//upsilon[starts-with(concat(@attr,"-"),"this-")][@xml:id="id5"]//tau[@xml:id="id6"][not(preceding-sibling::*)]/delta[contains(@name,"ue")][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::gamma[starts-with(concat(@number,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::tau[@xml:lang="en-US"][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/nu[@class][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[contains(concat(@data,"$"),"rue$")][@xml:lang="nb"][@xml:id="id10"][following-sibling::upsilon[contains(@object,"%")][@xml:id="id11"][not(following-sibling::*)]/nu[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::lambda[@data][not(child::node())][following-sibling::tau[@data="another attribute value"][@xml:id="id12"][not(following-sibling::*)]//nu[starts-with(concat(@content,"-"),"this.nodeValue-")][@xml:id="id13"]//beta[starts-with(concat(@class,"-"),"123456789-")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="no-nb"][@xml:id="id14"]//eta[contains(concat(@delete,"$"),"n$")][@xml:id="id15"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[starts-with(concat(@or,"-"),"_blank-")][not(preceding-sibling::*)]/theta[@xml:id="id16"][not(preceding-sibling::*)][not(following-sibling::*)]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta xml:lang="no"> + <tau class="attribute-value" xml:id="id1"> + <pi xml:lang="en"> + <sigma name="another attribute value" xml:lang="en-US" xml:id="id2"> + <upsilon number="attribute value" xml:id="id3"> + <any or="this-is-att-value" xml:lang="no-nb" xml:id="id4"> + <upsilon attr="this-is-att-value" xml:id="id5"> + <tau xml:id="id6"> + <delta name="true" xml:id="id7"/> + <gamma number="attribute" xml:lang="en-GB" xml:id="id8"/> + <tau xml:lang="en-US" xml:id="id9"> + <nu class="another attribute value" xml:lang="no"> + <kappa data="true" xml:lang="nb" xml:id="id10"/> + <upsilon object="100%" xml:id="id11"> + <nu xml:lang="no-nb"/> + <lambda data="solid 1px green"/> + <tau data="another attribute value" xml:id="id12"> + <nu content="this.nodeValue" xml:id="id13"> + <beta class="123456789" xml:lang="nb"/> + <iota xml:lang="no-nb" xml:id="id14"> + <eta delete="solid 1px green" xml:id="id15"> + <omicron or="_blank"> + <theta xml:id="id16"> + <green>This text must be green</green> + </theta> + </omicron> + </eta> + </iota> + </nu> + </tau> + </upsilon> + </nu> + </tau> + </tau> + </upsilon> + </any> + </upsilon> + </sigma> + </pi> + </tau> + </beta> + </tree> + </test> + <test> + <xpath>//rho[@true="attribute"][@xml:lang="en-GB"]//phi[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/phi[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@true][@xml:id="id3"][not(following-sibling::*)]/gamma[starts-with(concat(@delete,"-"),"123456789-")][not(preceding-sibling::*)][not(following-sibling::*)]/*[contains(@attribute,"lan")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:id="id5"]/alpha//tau[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[contains(@data,"te value")][@xml:lang="no-nb"][@xml:id="id7"][following-sibling::*[position()=3]][following-sibling::upsilon[starts-with(@abort,"attri")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"][@xml:id="id8"][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@xml:id="id9"]//tau[starts-with(concat(@true,"-"),"this.nodeValue-")][@xml:lang="en"][@xml:id="id10"][not(preceding-sibling::*)]/lambda[@class][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="no"][@xml:id="id13"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <rho true="attribute" xml:lang="en-GB"> + <phi xml:lang="nb" xml:id="id1"/> + <phi xml:lang="no-nb" xml:id="id2"> + <phi xml:lang="no"/> + <phi true="false" xml:id="id3"> + <gamma delete="123456789"> + <any attribute="_blank" xml:lang="en" xml:id="id4"/> + <lambda xml:id="id5"> + <alpha> + <tau xml:lang="en-GB" xml:id="id6"> + <iota data="another attribute value" xml:lang="no-nb" xml:id="id7"/> + <upsilon abort="attribute"/> + <epsilon xml:lang="en-GB" xml:id="id8"/> + <xi xml:id="id9"> + <tau true="this.nodeValue" xml:lang="en" xml:id="id10"> + <lambda class="this-is-att-value" xml:id="id11"> + <chi xml:id="id12"> + <zeta xml:lang="no" xml:id="id13"> + <green>This text must be green</green> + </zeta> + </chi> + </lambda> + </tau> + </xi> + </tau> + </alpha> + </lambda> + </gamma> + </phi> + </phi> + </rho> + </tree> + </test> + <test> + <xpath>//lambda[contains(@att,"ute val")][@xml:id="id1"]/kappa[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@class][@xml:lang="nb"][not(child::node())][following-sibling::omega//iota[contains(concat(@insert,"$"),"is-att-value$")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[not(preceding-sibling::*)][not(preceding-sibling::omega)][following-sibling::epsilon[starts-with(@content,"attribute")]/delta[@xml:id="id3"][not(preceding-sibling::*)]//zeta[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::nu[starts-with(@attribute,"solid 1px gr")]/omega[@xml:id="id5"][not(preceding-sibling::*)]/upsilon[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[contains(@and,"on")][@xml:id="id7"]//phi[starts-with(@or,"10")][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[@attrib][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="no"][following-sibling::rho[@xml:lang="no"][@xml:id="id9"]//tau[@xml:id="id10"][not(following-sibling::*)]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda att="another attribute value" xml:id="id1"> + <kappa xml:id="id2"/> + <rho class="attribute-value" xml:lang="nb"/> + <omega> + <iota insert="this-is-att-value" xml:lang="en"> + <omega/> + <epsilon content="attribute value"> + <delta xml:id="id3"> + <zeta xml:id="id4"/> + <nu attribute="solid 1px green"> + <omega xml:id="id5"> + <upsilon xml:id="id6"/> + <upsilon and="content" xml:id="id7"> + <phi or="100%"> + <zeta attrib="solid 1px green" xml:id="id8"/> + <lambda xml:lang="no"/> + <rho xml:lang="no" xml:id="id9"> + <tau xml:id="id10"> + <green>This text must be green</green> + </tau> + </rho> + </phi> + </upsilon> + </omega> + </nu> + </delta> + </epsilon> + </iota> + </omega> + </lambda> + </tree> + </test> + <test> + <xpath>//psi[starts-with(@and,"attr")][@xml:lang="no-nb"][@xml:id="id1"]/lambda[not(following-sibling::*)]//theta[@xml:lang="no-nb"][not(preceding-sibling::*)]//iota[@xml:id="id2"][not(child::node())][following-sibling::nu[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@content][@xml:lang="en"][@xml:id="id3"]/phi[@xml:lang="en"][@xml:id="id4"][not(child::node())][following-sibling::pi[@attribute][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//gamma[@xml:lang="en-US"][@xml:id="id6"][following-sibling::mu/*[contains(@title,"this.nodeVal")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[contains(@false,"89")][not(child::node())][following-sibling::delta[contains(concat(@title,"$"),"value$")][@xml:lang="en-US"][not(following-sibling::*)]//lambda[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::chi[@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::rho[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/alpha[starts-with(@class,"this-is-att-va")][@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <psi and="attribute value" xml:lang="no-nb" xml:id="id1"> + <lambda> + <theta xml:lang="no-nb"> + <iota xml:id="id2"/> + <nu xml:lang="no"/> + <sigma content="this-is-att-value" xml:lang="en" xml:id="id3"> + <phi xml:lang="en" xml:id="id4"/> + <pi attribute="solid 1px green" xml:lang="en-US" xml:id="id5"> + <gamma xml:lang="en-US" xml:id="id6"/> + <mu> + <any title="this.nodeValue" xml:lang="en"> + <psi false="123456789"/> + <delta title="attribute-value" xml:lang="en-US"> + <lambda xml:lang="no"/> + <chi xml:lang="nb" xml:id="id7"/> + <rho xml:lang="en-GB"> + <alpha class="this-is-att-value" xml:lang="en-GB" xml:id="id8"> + <green>This text must be green</green> + </alpha> + </rho> + </delta> + </any> + </mu> + </pi> + </sigma> + </theta> + </lambda> + </psi> + </tree> + </test> + <test> + <xpath>//gamma/upsilon[@att][@xml:lang="en"][following-sibling::theta[@xml:lang="nb"][@xml:id="id1"][not(following-sibling::*)]/xi[starts-with(@src,"attribute va")][not(preceding-sibling::*)][following-sibling::*[position()=7]][following-sibling::phi[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=6]][following-sibling::lambda[@xml:lang="en"][following-sibling::theta[@or][@xml:id="id2"][following-sibling::upsilon[@xml:id="id3"][preceding-sibling::*[position() = 4]][following-sibling::tau[@xml:lang="en"][following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[@string="false"][preceding-sibling::*[position() = 6]][following-sibling::alpha[@number][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <gamma> + <upsilon att="123456789" xml:lang="en"/> + <theta xml:lang="nb" xml:id="id1"> + <xi src="attribute value"/> + <phi xml:lang="nb"/> + <lambda xml:lang="en"/> + <theta or="true" xml:id="id2"/> + <upsilon xml:id="id3"/> + <tau xml:lang="en"/> + <tau string="false"/> + <alpha number="this-is-att-value"> + <green>This text must be green</green> + </alpha> + </theta> + </gamma> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="nb"][@xml:id="id1"]/sigma[@title][not(following-sibling::*)]/theta[contains(@data,"23")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::tau[@true="attribute value"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@xml:lang="en-US"][@xml:id="id4"][following-sibling::chi[preceding-sibling::*[position() = 1]]/rho[@xml:lang="en"]//rho[@desciption]/theta[@or="123456789"][@xml:lang="en-US"][not(following-sibling::*)]/theta[@title][@xml:lang="en-GB"][not(preceding-sibling::*)]//phi[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[not(child::node())][following-sibling::rho[@xml:lang="nb"][preceding-sibling::*[position() = 2]]//xi[@xml:id="id6"][not(child::node())][following-sibling::sigma[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:lang="nb" xml:id="id1"> + <sigma title="100%"> + <theta data="123456789" xml:id="id2"/> + <tau true="attribute value" xml:id="id3"> + <chi xml:lang="en-US" xml:id="id4"/> + <chi> + <rho xml:lang="en"> + <rho desciption="attribute"> + <theta or="123456789" xml:lang="en-US"> + <theta title="_blank" xml:lang="en-GB"> + <phi xml:id="id5"/> + <omicron/> + <rho xml:lang="nb"> + <xi xml:id="id6"/> + <sigma xml:id="id7"> + <green>This text must be green</green> + </sigma> + </rho> + </theta> + </theta> + </rho> + </rho> + </chi> + </tau> + </sigma> + </nu> + </tree> + </test> + <test> + <xpath>//psi[starts-with(concat(@token,"-"),"solid 1px green-")]/nu[contains(concat(@true,"$"),"ue$")]/lambda[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::eta[contains(@true,"bla")]/*[contains(concat(@data,"$"),"789$")][@xml:id="id1"][not(preceding-sibling::*)]/delta[following-sibling::sigma[@xml:lang="nb"][following-sibling::*[position()=3]][following-sibling::*[@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::nu[@xml:id="id2"][not(child::node())][following-sibling::lambda[contains(concat(@src,"$"),"tent$")][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//gamma[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::sigma[starts-with(@data,"t")][@xml:lang="en-US"]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi token="solid 1px green"> + <nu true="attribute value"> + <lambda xml:lang="en-US"/> + <eta true="_blank"> + <any data="123456789" xml:id="id1"> + <delta/> + <sigma xml:lang="nb"/> + <any xml:lang="en"/> + <nu xml:id="id2"/> + <lambda src="content" xml:lang="no-nb" xml:id="id3"> + <gamma xml:id="id4"/> + <sigma data="this-is-att-value" xml:lang="en-US"> + <green>This text must be green</green> + </sigma> + </lambda> + </any> + </eta> + </nu> + </psi> + </tree> + </test> + <test> + <xpath>//rho[@number][@xml:id="id1"]//nu[@class][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::omicron[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]//beta[@number][not(child::node())][following-sibling::rho[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[@class][@xml:lang="no-nb"][@xml:id="id5"][following-sibling::omicron[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 3]]/chi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::beta[@true="_blank"][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]]/iota[contains(@attribute,"56789")][@xml:lang="en-GB"][@xml:id="id8"][not(child::node())][following-sibling::delta[starts-with(@title,"at")][@xml:lang="no"][@xml:id="id9"][not(child::node())][following-sibling::alpha[@xml:id="id10"]//delta[@xml:id="id11"][not(following-sibling::*)]/gamma[contains(concat(@delete,"$"),"alse$")]/gamma[@true][@xml:lang="no-nb"][@xml:id="id12"][not(preceding-sibling::*)][following-sibling::beta[@and][@xml:id="id13"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//theta[starts-with(@insert,"tr")][not(following-sibling::*)]//iota[@xml:lang="no"]//eta[@xml:lang="en"][not(following-sibling::*)]/rho[@xml:lang="en"][@xml:id="id14"][not(following-sibling::*)]/nu[starts-with(@name,"another attribute valu")][@xml:lang="nb"][@xml:id="id15"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id16"][not(following-sibling::*)]//kappa[@xml:lang="no-nb"][@xml:id="id17"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]]]][position() = 1]]]</xpath> + <tree> + <rho number="solid 1px green" xml:id="id1"> + <nu class="false" xml:lang="no" xml:id="id2"/> + <omicron xml:id="id3"> + <rho xml:lang="en" xml:id="id4"> + <beta number="solid 1px green"/> + <rho xml:lang="en"/> + <lambda class="content" xml:lang="no-nb" xml:id="id5"/> + <omicron xml:lang="no" xml:id="id6"> + <chi xml:lang="no"/> + <beta true="_blank" xml:lang="en" xml:id="id7"> + <iota attribute="123456789" xml:lang="en-GB" xml:id="id8"/> + <delta title="attribute" xml:lang="no" xml:id="id9"/> + <alpha xml:id="id10"> + <delta xml:id="id11"> + <gamma delete="false"> + <gamma true="attribute value" xml:lang="no-nb" xml:id="id12"/> + <beta and="123456789" xml:id="id13"> + <theta insert="true"> + <iota xml:lang="no"> + <eta xml:lang="en"> + <rho xml:lang="en" xml:id="id14"> + <nu name="another attribute value" xml:lang="nb" xml:id="id15"/> + <sigma xml:lang="en-US" xml:id="id16"> + <kappa xml:lang="no-nb" xml:id="id17"> + <green>This text must be green</green> + </kappa> + </sigma> + </rho> + </eta> + </iota> + </theta> + </beta> + </gamma> + </delta> + </alpha> + </beta> + </omicron> + </rho> + </omicron> + </rho> + </tree> + </test> + <test> + <xpath>//theta[starts-with(concat(@delete,"-"),"content-")]/pi[@attribute][@xml:lang="en"][not(child::node())][following-sibling::delta[following-sibling::*[contains(@data,"e")][not(child::node())][following-sibling::alpha[@xml:id="id1"]//gamma[@xml:lang="no-nb"][following-sibling::rho[@title][preceding-sibling::*[position() = 1]]/delta[@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]//rho[@insert][@xml:id="id3"]/theta[@desciption][@xml:id="id4"][not(following-sibling::*)]//delta[@att="_blank"][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)]/psi[@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@false][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="en-US"][preceding-sibling::*[position() = 2]]//xi[@xml:lang="en-GB"][following-sibling::omicron[@token][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]]//chi[not(preceding-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <theta delete="content"> + <pi attribute="content" xml:lang="en"/> + <delta/> + <any data="false"/> + <alpha xml:id="id1"> + <gamma xml:lang="no-nb"/> + <rho title="content"> + <delta xml:lang="no-nb" xml:id="id2"> + <rho insert="attribute value" xml:id="id3"> + <theta desciption="this.nodeValue" xml:id="id4"> + <delta att="_blank" xml:lang="en-US" xml:id="id5"> + <psi xml:lang="en" xml:id="id6"/> + <any false="this.nodeValue"/> + <phi xml:lang="en-US"> + <xi xml:lang="en-GB"/> + <omicron token="false" xml:lang="en" xml:id="id7"> + <chi> + <green>This text must be green</green> + </chi> + </omicron> + </phi> + </delta> + </theta> + </rho> + </delta> + </rho> + </alpha> + </theta> + </tree> + </test> + <test> + <xpath>//alpha//gamma[contains(@string,"nk")][not(preceding-sibling::*)]/lambda[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau//iota[following-sibling::tau[not(child::node())][following-sibling::psi[@xml:lang="en-GB"][not(following-sibling::*)]]]]</xpath> + <tree> + <alpha> + <gamma string="_blank"> + <lambda xml:lang="en" xml:id="id1"/> + <tau> + <iota/> + <tau/> + <psi xml:lang="en-GB"> + <green>This text must be green</green> + </psi> + </tau> + </gamma> + </alpha> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="no-nb"]/lambda[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::gamma[@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::tau[not(following-sibling::*)]/omicron[@object][following-sibling::theta[@and="_blank"][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[starts-with(@token,"anot")][@xml:lang="en"][@xml:id="id3"][following-sibling::eta[@xml:id="id4"][following-sibling::*[position()=1]][not(preceding-sibling::eta)][not(child::node())][following-sibling::gamma[not(following-sibling::*)]//*[starts-with(concat(@name,"-"),"_blank-")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:id="id6"]/rho[contains(@content,"s.n")][@xml:lang="en"][@xml:id="id7"]/pi[@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::pi)][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <rho xml:lang="no-nb"> + <lambda/> + <gamma xml:lang="en-GB" xml:id="id1"/> + <tau> + <omicron object="solid 1px green"/> + <theta and="_blank" xml:lang="no-nb" xml:id="id2"> + <delta token="another attribute value" xml:lang="en" xml:id="id3"/> + <eta xml:id="id4"/> + <gamma> + <any name="_blank" xml:id="id5"> + <chi xml:id="id6"> + <rho content="this.nodeValue" xml:lang="en" xml:id="id7"> + <pi xml:id="id8"> + <green>This text must be green</green> + </pi> + </rho> + </chi> + </any> + </gamma> + </theta> + </tau> + </rho> + </tree> + </test> + <test> + <xpath>//xi[contains(concat(@src,"$"),"another attribute value$")][@xml:id="id1"]//eta[contains(concat(@and,"$"),"e$")]//nu[@true][@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[@att][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[starts-with(concat(@abort,"-"),"attribute value-")][@xml:id="id3"][not(following-sibling::*)][position() = 1]]</xpath> + <tree> + <xi src="another attribute value" xml:id="id1"> + <eta and="true"> + <nu true="_blank" xml:lang="no" xml:id="id2"/> + <gamma> + <rho att="false" xml:lang="en-US"> + <phi abort="attribute value" xml:id="id3"> + <green>This text must be green</green> + </phi> + </rho> + </gamma> + </eta> + </xi> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]//*[starts-with(concat(@insert,"-"),"solid 1px green-")][@xml:id="id2"][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[starts-with(@token,"12345")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@class]/psi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::upsilon[starts-with(@src,"a")][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/pi[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::sigma[@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::gamma[starts-with(concat(@att,"-"),"content-")][@xml:lang="en-US"][@xml:id="id7"]/omega[starts-with(@attribute,"attribute-val")][@xml:lang="no"][@xml:id="id8"][not(following-sibling::*)]//gamma[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@and][@xml:lang="nb"][not(following-sibling::*)]/lambda[contains(@desciption,"la")][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu//rho[@xml:lang="en-US"][@xml:id="id10"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@insert][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[starts-with(@number,"_blan")][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[starts-with(@insert,"attri")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/iota[starts-with(concat(@class,"-"),"false-")][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <rho xml:id="id1"> + <any insert="solid 1px green" xml:id="id2"/> + <chi> + <delta token="123456789" xml:lang="en-US"> + <sigma class="solid 1px green"> + <psi xml:lang="no"/> + <upsilon src="attribute" xml:lang="en-US" xml:id="id3"> + <pi xml:lang="no" xml:id="id4"/> + <sigma xml:lang="nb" xml:id="id5"/> + <tau xml:lang="en-GB" xml:id="id6"/> + <gamma att="content" xml:lang="en-US" xml:id="id7"> + <omega attribute="attribute-value" xml:lang="no" xml:id="id8"> + <gamma xml:id="id9"> + <sigma/> + <pi and="attribute value" xml:lang="nb"> + <lambda desciption="_blank" xml:lang="no"/> + <mu> + <rho xml:lang="en-US" xml:id="id10"/> + <iota insert="_blank"> + <psi number="_blank"/> + <alpha insert="attribute-value" xml:lang="en-US"> + <iota class="false"> + <green>This text must be green</green> + </iota> + </alpha> + </iota> + </mu> + </pi> + </gamma> + </omega> + </gamma> + </upsilon> + </sigma> + </delta> + </chi> + </rho> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-US"][@xml:id="id1"]//iota[@xml:id="id2"][not(following-sibling::*)]/theta[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:id="id4"][not(child::node())][following-sibling::upsilon[@object][@xml:lang="nb"][@xml:id="id5"][following-sibling::psi[contains(concat(@src,"$"),"tribute$")][@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 4]][not(following-sibling::*)]/psi[@content][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@att][@xml:id="id7"][not(following-sibling::*)]/phi[@xml:lang="en"][following-sibling::*[position()=1]][not(preceding-sibling::phi or following-sibling::phi)][not(child::node())][following-sibling::omega[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/zeta[@xml:id="id8"][following-sibling::nu[@xml:lang="en"][@xml:id="id9"]/omicron[contains(concat(@string,"$"),"alue$")]/lambda[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="no"][@xml:id="id10"][not(following-sibling::*)]/eta[starts-with(@number,"cont")][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[@xml:id="id12"][not(preceding-sibling::*)][following-sibling::beta[starts-with(concat(@attribute,"-"),"123456789-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@attribute="this-is-att-value"][@xml:lang="en-US"][@xml:id="id13"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any xml:lang="en-US" xml:id="id1"> + <iota xml:id="id2"> + <theta xml:id="id3"/> + <beta xml:id="id4"/> + <upsilon object="true" xml:lang="nb" xml:id="id5"/> + <psi src="attribute" xml:lang="no-nb" xml:id="id6"/> + <rho> + <psi content="attribute-value"/> + <eta att="content" xml:id="id7"> + <phi xml:lang="en"/> + <omega xml:lang="en-US"> + <zeta xml:id="id8"/> + <nu xml:lang="en" xml:id="id9"> + <omicron string="this.nodeValue"> + <lambda xml:lang="en-US"/> + <xi xml:lang="no" xml:id="id10"> + <eta number="content" xml:id="id11"> + <pi xml:id="id12"/> + <beta attribute="123456789"> + <any attribute="this-is-att-value" xml:lang="en-US" xml:id="id13"> + <green>This text must be green</green> + </any> + </beta> + </eta> + </xi> + </omicron> + </nu> + </omega> + </eta> + </rho> + </iota> + </any> + </tree> + </test> + <test> + <xpath>//lambda[@desciption="false"][@xml:lang="en"]/pi[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@or][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[starts-with(concat(@name,"-"),"123456789-")][@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//sigma[@xml:id="id4"]/omega[@or="solid 1px green"][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]//eta[following-sibling::iota[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[@and][@xml:id="id6"][not(child::node())][following-sibling::omicron[starts-with(concat(@attrib,"-"),"123456789-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[@xml:id="id7"][not(preceding-sibling::*)]/upsilon[@xml:lang="en-GB"][not(child::node())][following-sibling::phi[@number][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//delta[not(preceding-sibling::*)]/mu[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@and][@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@abort][@xml:id="id9"]/mu[starts-with(@or,"at")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[starts-with(@data,"attr")][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::gamma[@xml:lang="en"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::rho[@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::eta[@xml:id="id12"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/theta[starts-with(@attribute,"12")][@xml:lang="no"][not(following-sibling::*)]/eta[@string][@xml:lang="no-nb"][@xml:id="id13"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <lambda desciption="false" xml:lang="en"> + <pi xml:lang="en-US" xml:id="id1"> + <eta or="this.nodeValue" xml:id="id2"/> + <pi name="123456789" xml:lang="no" xml:id="id3"> + <sigma xml:id="id4"> + <omega or="solid 1px green" xml:lang="nb" xml:id="id5"> + <eta/> + <iota> + <rho and="another attribute value" xml:id="id6"/> + <omicron attrib="123456789"> + <upsilon xml:id="id7"> + <upsilon xml:lang="en-GB"/> + <phi number="false" xml:lang="no-nb"> + <delta> + <mu xml:lang="nb"> + <xi and="_blank" xml:lang="no-nb" xml:id="id8"/> + <tau abort="attribute" xml:id="id9"> + <mu or="attribute-value" xml:lang="no-nb"/> + <omega data="attribute-value" xml:id="id10"/> + <gamma xml:lang="en"/> + <rho xml:lang="nb" xml:id="id11"/> + <eta xml:id="id12"> + <theta attribute="123456789" xml:lang="no"> + <eta string="this.nodeValue" xml:lang="no-nb" xml:id="id13"> + <green>This text must be green</green> + </eta> + </theta> + </eta> + </tau> + </mu> + </delta> + </phi> + </upsilon> + </omicron> + </iota> + </omega> + </sigma> + </pi> + </pi> + </lambda> + </tree> + </test> + <test> + <xpath>//sigma[@token][@xml:lang="no-nb"][@xml:id="id1"]/phi[starts-with(@desciption,"th")][@xml:id="id2"][not(following-sibling::*)]/zeta[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::epsilon[contains(@and,"id 1px green")][following-sibling::chi[@xml:id="id4"]/omicron[@class][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <sigma token="solid 1px green" xml:lang="no-nb" xml:id="id1"> + <phi desciption="this.nodeValue" xml:id="id2"> + <zeta xml:lang="no" xml:id="id3"/> + <epsilon and="solid 1px green"/> + <chi xml:id="id4"> + <omicron class="another attribute value"> + <green>This text must be green</green> + </omicron> + </chi> + </phi> + </sigma> + </tree> + </test> + <test> + <xpath>//upsilon//eta[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::lambda[@string="true"][@xml:lang="no-nb"][not(following-sibling::*)]/epsilon[@xml:lang="en"][@xml:id="id1"][not(following-sibling::*)]/tau[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[not(child::node())][following-sibling::chi[@xml:id="id2"][not(child::node())][following-sibling::psi[starts-with(@att,"10")][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 3]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <upsilon> + <eta xml:lang="en-US"/> + <lambda string="true" xml:lang="no-nb"> + <epsilon xml:lang="en" xml:id="id1"> + <tau xml:lang="no-nb"/> + <tau/> + <chi xml:id="id2"/> + <psi att="100%" xml:lang="no-nb" xml:id="id3"> + <green>This text must be green</green> + </psi> + </epsilon> + </lambda> + </upsilon> + </tree> + </test> + <test> + <xpath>//kappa[contains(concat(@name,"$"),"3456789$")][@xml:id="id1"]/mu[@xml:id="id2"][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[@true][@xml:lang="no"][not(child::node())][following-sibling::omega[@and][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::xi[contains(@class,"e")][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[@and="content"][@xml:lang="no"][@xml:id="id4"][following-sibling::mu[starts-with(@attr,"1234")][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/lambda[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[starts-with(concat(@number,"-"),"attribute-")][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::phi[@xml:id="id7"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::nu[@xml:lang="no"][@xml:id="id8"]//alpha[starts-with(@src,"another ")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::theta[@xml:id="id9"][not(following-sibling::*)]/zeta[@xml:id="id10"][not(preceding-sibling::*)][not(preceding-sibling::zeta)]/iota[starts-with(concat(@abort,"-"),"attribute-")][@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)]/upsilon[starts-with(@attrib,"attribute v")][@xml:id="id12"]/omicron[contains(@true,"se")][@xml:lang="en"][not(preceding-sibling::*)][position() = 1]]]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <kappa name="123456789" xml:id="id1"> + <mu xml:id="id2"/> + <beta xml:id="id3"> + <pi true="this.nodeValue" xml:lang="no"/> + <omega and="this-is-att-value"/> + <xi class="false"/> + <xi and="content" xml:lang="no" xml:id="id4"/> + <mu attr="123456789"> + <lambda xml:lang="no-nb" xml:id="id5"/> + <eta number="attribute-value" xml:id="id6"/> + <phi xml:id="id7"/> + <nu xml:lang="no" xml:id="id8"> + <alpha src="another attribute value" xml:lang="en-US"/> + <theta xml:id="id9"> + <zeta xml:id="id10"> + <iota abort="attribute" xml:lang="no-nb" xml:id="id11"> + <upsilon attrib="attribute value" xml:id="id12"> + <omicron true="false" xml:lang="en"> + <green>This text must be green</green> + </omicron> + </upsilon> + </iota> + </zeta> + </theta> + </nu> + </mu> + </beta> + </kappa> + </tree> + </test> + <test> + <xpath>//epsilon[@or]/sigma[starts-with(concat(@class,"-"),"another attribute value-")][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::rho[@xml:lang="no"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[@insert][@xml:id="id2"][following-sibling::rho[@and][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 3]]//tau[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::kappa[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//kappa[@number="attribute value"][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)]/beta[not(preceding-sibling::*)][not(following-sibling::*)]//*[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)]/sigma[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="en"][preceding-sibling::*[position() = 1]]/omega[@xml:lang="en-US"][not(child::node())][following-sibling::omega[@xml:id="id8"][not(following-sibling::*)]//psi[@xml:id="id9"][not(preceding-sibling::*)][following-sibling::pi[@data="100%"][@xml:lang="en"][@xml:id="id10"]/zeta[@abort][@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@insert][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(following-sibling::any)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <epsilon or="attribute"> + <sigma class="another attribute value"/> + <rho xml:lang="no" xml:id="id1"/> + <psi insert="true" xml:id="id2"/> + <rho and="_blank" xml:lang="no" xml:id="id3"> + <tau xml:lang="en-GB" xml:id="id4"/> + <kappa xml:lang="en-GB"> + <kappa number="attribute value" xml:lang="en-GB" xml:id="id5"> + <beta> + <any xml:lang="en-GB" xml:id="id6"> + <sigma xml:lang="en-US" xml:id="id7"/> + <sigma xml:lang="en"> + <omega xml:lang="en-US"/> + <omega xml:id="id8"> + <psi xml:id="id9"/> + <pi data="100%" xml:lang="en" xml:id="id10"> + <zeta abort="content" xml:id="id11"/> + <beta xml:lang="en"/> + <any insert="false"> + <green>This text must be green</green> + </any> + </pi> + </omega> + </sigma> + </any> + </beta> + </kappa> + </kappa> + </rho> + </epsilon> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en-US"][@xml:id="id1"]/chi[@attr][@xml:id="id2"]//pi[starts-with(concat(@and,"-"),"content-")]//eta[@class][@xml:id="id3"][not(child::node())][following-sibling::lambda[@attribute]/omicron[starts-with(@number,"co")][@xml:lang="en-GB"][not(following-sibling::*)]/chi[@object="another attribute value"][not(preceding-sibling::*)][following-sibling::omega[starts-with(concat(@att,"-"),"another attribute value-")][not(following-sibling::*)]/pi[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]/nu[not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="en-US" xml:id="id1"> + <chi attr="false" xml:id="id2"> + <pi and="content"> + <eta class="false" xml:id="id3"/> + <lambda attribute="content"> + <omicron number="content" xml:lang="en-GB"> + <chi object="another attribute value"/> + <omega att="another attribute value"> + <pi xml:lang="no" xml:id="id4"> + <nu> + <green>This text must be green</green> + </nu> + </pi> + </omega> + </omicron> + </lambda> + </pi> + </chi> + </upsilon> + </tree> + </test> + <test> + <xpath>//mu[@class="attribute value"][@xml:lang="no-nb"]//xi[contains(concat(@name,"$"),"ibute-value$")][not(following-sibling::*)][not(parent::*/*[position()=2])]//chi[contains(concat(@token,"$"),"tribute-value$")][@xml:id="id1"]//theta[@xml:lang="en-GB"][following-sibling::eta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::gamma[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::theta[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::psi[@attrib="this-is-att-value"][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::pi[contains(concat(@name,"$"),"alse$")][@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]/sigma[contains(@attr,"%")][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::mu[starts-with(@data,"tr")][not(following-sibling::*)]//theta[@and="attribute value"]//alpha[not(preceding-sibling::*)][following-sibling::sigma[contains(@false,"value")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::mu[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::mu[@attr][@xml:id="id7"][not(following-sibling::*)]//iota[@xml:id="id8"][not(following-sibling::*)]/tau[@data="attribute value"][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)]/kappa[@attribute="false"][@xml:lang="en-GB"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::delta[@xml:id="id12"][not(following-sibling::*)]//theta[@xml:lang="no"][@xml:id="id13"][not(child::node())][following-sibling::alpha[@xml:lang="en-US"]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <mu class="attribute value" xml:lang="no-nb"> + <xi name="attribute-value"> + <chi token="attribute-value" xml:id="id1"> + <theta xml:lang="en-GB"/> + <eta xml:lang="no-nb"/> + <gamma/> + <theta xml:lang="no-nb" xml:id="id2"/> + <psi attrib="this-is-att-value" xml:lang="no-nb" xml:id="id3"/> + <pi name="false" xml:lang="no" xml:id="id4"> + <sigma attr="100%"/> + <beta xml:lang="no" xml:id="id5"/> + <mu data="true"> + <theta and="attribute value"> + <alpha/> + <sigma false="this-is-att-value" xml:lang="en-US" xml:id="id6"/> + <mu xml:lang="en-US"/> + <mu attr="123456789" xml:id="id7"> + <iota xml:id="id8"> + <tau data="attribute value" xml:lang="nb" xml:id="id9"> + <pi xml:lang="en-US" xml:id="id10"> + <kappa attribute="false" xml:lang="en-GB" xml:id="id11"/> + <delta xml:id="id12"> + <theta xml:lang="no" xml:id="id13"/> + <alpha xml:lang="en-US"> + <green>This text must be green</green> + </alpha> + </delta> + </pi> + </tau> + </iota> + </mu> + </theta> + </mu> + </pi> + </chi> + </xi> + </mu> + </tree> + </test> + <test> + <xpath>//gamma[@class]//epsilon[@attr="_blank"][not(following-sibling::*)]/beta[@attrib="solid 1px green"][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@xml:id="id3"]//iota[not(child::node())][following-sibling::upsilon[starts-with(concat(@abort,"-"),"attribute value-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[@number="_blank"][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::sigma[contains(@src,"56")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[not(child::node())][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]/zeta[@xml:lang="en-US"][not(following-sibling::*)]//eta[@xml:lang="no"][following-sibling::rho[contains(@abort,"3")][@xml:lang="en-US"][@xml:id="id8"][following-sibling::xi[@xml:lang="en"]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <gamma class="content"> + <epsilon attr="_blank"> + <beta attrib="solid 1px green" xml:lang="en-US" xml:id="id1"/> + <alpha xml:id="id2"> + <pi xml:id="id3"> + <iota/> + <upsilon abort="attribute value" xml:lang="no-nb"> + <zeta number="_blank" xml:lang="en-US" xml:id="id4"> + <epsilon xml:lang="nb" xml:id="id5"/> + <sigma src="123456789" xml:lang="en-US" xml:id="id6"/> + <any/> + <tau xml:lang="no-nb" xml:id="id7"> + <zeta xml:lang="en-US"> + <eta xml:lang="no"/> + <rho abort="123456789" xml:lang="en-US" xml:id="id8"/> + <xi xml:lang="en"> + <green>This text must be green</green> + </xi> + </zeta> + </tau> + </zeta> + </upsilon> + </pi> + </alpha> + </epsilon> + </gamma> + </tree> + </test> + <test> + <xpath>//chi[@name="attribute"][@xml:lang="en-US"][@xml:id="id1"]/xi[@name][@xml:lang="en"][@xml:id="id2"]//tau[following-sibling::*[position()=2]][following-sibling::kappa[@token="solid 1px green"][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::sigma[@true][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//mu[contains(@title,"ibut")]//omega[starts-with(concat(@att,"-"),"attribute-")][@xml:id="id3"]/pi[@xml:id="id4"][not(preceding-sibling::*)]/kappa[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@and][preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:id="id6"][following-sibling::theta[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]//upsilon[@xml:id="id8"][not(child::node())][following-sibling::alpha[contains(@true,"tribute valu")][@xml:lang="nb"][not(following-sibling::*)]/delta[not(following-sibling::*)]/phi[@xml:id="id9"][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[@xml:lang="en-US"]/nu[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::zeta[starts-with(concat(@name,"-"),"false-")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/omega//nu[contains(@object,"a")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@attribute][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::mu[starts-with(concat(@insert,"-"),"attribute value-")][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi name="attribute" xml:lang="en-US" xml:id="id1"> + <xi name="123456789" xml:lang="en" xml:id="id2"> + <tau/> + <kappa token="solid 1px green" xml:lang="no-nb"/> + <sigma true="true" xml:lang="en-US"> + <mu title="attribute"> + <omega att="attribute" xml:id="id3"> + <pi xml:id="id4"> + <kappa xml:lang="nb" xml:id="id5"/> + <phi and="100%"/> + <omega xml:id="id6"/> + <theta xml:lang="en-GB" xml:id="id7"> + <upsilon xml:id="id8"/> + <alpha true="attribute value" xml:lang="nb"> + <delta> + <phi xml:id="id9"/> + <any> + <phi xml:lang="en-US"> + <nu xml:lang="en-US"/> + <zeta name="false" xml:lang="en-US"> + <omega> + <nu object="attribute" xml:lang="no-nb"/> + <omicron attribute="solid 1px green" xml:id="id10"/> + <mu insert="attribute value"> + <green>This text must be green</green> + </mu> + </omega> + </zeta> + </phi> + </any> + </delta> + </alpha> + </theta> + </pi> + </omega> + </mu> + </sigma> + </xi> + </chi> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="no"]//xi[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[not(child::node())][following-sibling::omicron[starts-with(@title,"false")][@xml:lang="no"]/kappa[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@string][not(preceding-sibling::*)]//nu[@or][@xml:lang="nb"][@xml:id="id2"][position() = 1]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="no"> + <xi xml:lang="no"/> + <alpha/> + <omicron title="false" xml:lang="no"> + <kappa xml:id="id1"> + <mu string="another attribute value"> + <nu or="true" xml:lang="nb" xml:id="id2"> + <green>This text must be green</green> + </nu> + </mu> + </kappa> + </omicron> + </upsilon> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="nb"][@xml:id="id1"]/phi[starts-with(concat(@class,"-"),"false-")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::omicron[@xml:lang="no-nb"][not(following-sibling::*)]/*[following-sibling::theta[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/upsilon[@object][@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][position() = 1]]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="nb" xml:id="id1"> + <phi class="false" xml:lang="no-nb"> + <delta xml:lang="en" xml:id="id2"/> + <omicron xml:lang="no-nb"> + <any/> + <theta xml:lang="nb" xml:id="id3"> + <upsilon object="attribute" xml:lang="en-US"/> + <epsilon xml:lang="no-nb"> + <green>This text must be green</green> + </epsilon> + </theta> + </omicron> + </phi> + </kappa> + </tree> + </test> + <test> + <xpath>//lambda[@src]//rho[starts-with(concat(@content,"-"),"another attribute value-")][@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)]/beta[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@xml:id="id3"][not(following-sibling::*)]//theta[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]/omega[@att][@xml:lang="en-GB"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::tau[@abort][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@desciption][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::theta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@token][@xml:lang="no-nb"]/kappa[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <lambda src="123456789"> + <rho content="another attribute value" xml:lang="no" xml:id="id1"> + <beta xml:lang="no-nb" xml:id="id2"> + <psi xml:id="id3"> + <theta xml:lang="en" xml:id="id4"> + <omega att="attribute" xml:lang="en-GB" xml:id="id5"/> + <tau abort="this.nodeValue" xml:id="id6"> + <any desciption="solid 1px green" xml:lang="no"/> + <theta> + <beta token="this.nodeValue" xml:lang="no-nb"> + <kappa xml:lang="en"> + <green>This text must be green</green> + </kappa> + </beta> + </theta> + </tau> + </theta> + </psi> + </beta> + </rho> + </lambda> + </tree> + </test> + <test> + <xpath>//mu[starts-with(@attrib,"true")][@xml:lang="en"]//phi[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[contains(@src,"attribut")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]//xi[following-sibling::gamma[not(child::node())][following-sibling::iota[contains(concat(@false,"$"),"56789$")][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::lambda[@xml:id="id4"]//upsilon[@xml:lang="no-nb"][@xml:id="id5"][following-sibling::*[position()=2]][following-sibling::iota[contains(@title,"alue")][@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@class][@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 2]]/phi[@number="this.nodeValue"][@xml:lang="nb"][@xml:id="id8"][following-sibling::omicron[@false][@xml:lang="no"][following-sibling::xi[@xml:id="id9"][not(following-sibling::*)]/xi[@xml:lang="en"][@xml:id="id10"][following-sibling::beta[starts-with(concat(@or,"-"),"solid 1px green-")][@xml:lang="no-nb"][not(child::node())][following-sibling::omega[contains(concat(@or,"$"),"1px green$")][preceding-sibling::*[position() = 2]]//phi[contains(@content,"attri")][@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::epsilon[@object][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <mu attrib="true" xml:lang="en"> + <phi xml:lang="no" xml:id="id1"> + <psi src="attribute value" xml:lang="nb" xml:id="id2"> + <xi/> + <gamma/> + <iota false="123456789" xml:lang="en" xml:id="id3"/> + <lambda xml:id="id4"> + <upsilon xml:lang="no-nb" xml:id="id5"/> + <iota title="attribute-value" xml:lang="nb" xml:id="id6"/> + <iota class="_blank" xml:lang="no" xml:id="id7"> + <phi number="this.nodeValue" xml:lang="nb" xml:id="id8"/> + <omicron false="100%" xml:lang="no"/> + <xi xml:id="id9"> + <xi xml:lang="en" xml:id="id10"/> + <beta or="solid 1px green" xml:lang="no-nb"/> + <omega or="solid 1px green"> + <phi content="another attribute value" xml:lang="no-nb" xml:id="id11"/> + <epsilon object="true" xml:lang="nb"> + <green>This text must be green</green> + </epsilon> + </omega> + </xi> + </iota> + </lambda> + </psi> + </phi> + </mu> + </tree> + </test> + <test> + <xpath>//mu[@xml:lang="no-nb"]/mu[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::mu)]//lambda[starts-with(@desciption,"att")][following-sibling::sigma[@xml:id="id1"][preceding-sibling::*[position() = 1]]/pi[@class][not(preceding-sibling::*)]/phi[@xml:lang="en-US"]]</xpath> + <tree> + <mu xml:lang="no-nb"> + <mu xml:lang="no"> + <lambda desciption="attribute"/> + <sigma xml:id="id1"> + <pi class="123456789"> + <phi xml:lang="en-US"> + <green>This text must be green</green> + </phi> + </pi> + </sigma> + </mu> + </mu> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(@object,"12345")][@xml:lang="nb"]/phi[contains(@object,"k")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id1"][following-sibling::gamma[@attrib="attribute value"][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]/beta[@desciption="100%"][@xml:id="id3"][not(preceding-sibling::*)]/alpha[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@src]]]</xpath> + <tree> + <omicron object="123456789" xml:lang="nb"> + <phi object="_blank"/> + <omicron xml:lang="en-US" xml:id="id1"/> + <gamma attrib="attribute value" xml:lang="nb" xml:id="id2"> + <beta desciption="100%" xml:id="id3"> + <alpha xml:id="id4"> + <rho src="attribute value"> + <green>This text must be green</green> + </rho> + </alpha> + </beta> + </gamma> + </omicron> + </tree> + </test> + <test> + <xpath>//beta[contains(@attrib,"but")][@xml:id="id1"]//rho[following-sibling::*[position()=3]][following-sibling::*[@data][@xml:lang="en-GB"][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::epsilon[starts-with(concat(@att,"-"),"solid 1px green-")][@xml:id="id3"][not(following-sibling::*)]/xi[@or="123456789"][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(preceding-sibling::kappa or following-sibling::kappa)][following-sibling::pi[@abort="solid 1px green"][@xml:lang="en-GB"][following-sibling::omicron[@false="this.nodeValue"][@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::iota[@xml:lang="nb"][preceding-sibling::*[position() = 3]]/theta[@xml:lang="no"]/omega[@object][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@and][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[@title="123456789"][not(child::node())][following-sibling::pi[@insert="100%"][@xml:id="id6"]/iota[@xml:lang="nb"][@xml:id="id7"][not(following-sibling::*)]/tau[contains(concat(@src,"$"),"tribute$")][@xml:id="id8"][following-sibling::phi[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:lang="nb"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <beta attrib="attribute" xml:id="id1"> + <rho/> + <any data="false" xml:lang="en-GB"/> + <psi xml:lang="en-GB" xml:id="id2"/> + <epsilon att="solid 1px green" xml:id="id3"> + <xi or="123456789" xml:lang="no-nb" xml:id="id4"> + <kappa xml:id="id5"/> + <pi abort="solid 1px green" xml:lang="en-GB"/> + <omicron false="this.nodeValue" xml:lang="en-GB"/> + <iota xml:lang="nb"> + <theta xml:lang="no"> + <omega object="solid 1px green" xml:lang="no"/> + <zeta> + <mu and="_blank" xml:lang="en-US"> + <omega title="123456789"/> + <pi insert="100%" xml:id="id6"> + <iota xml:lang="nb" xml:id="id7"> + <tau src="attribute" xml:id="id8"/> + <phi/> + <beta xml:lang="nb"> + <green>This text must be green</green> + </beta> + </iota> + </pi> + </mu> + </zeta> + </theta> + </iota> + </xi> + </epsilon> + </beta> + </tree> + </test> + <test> + <xpath>//omega[contains(@attr,"t")][@xml:lang="nb"]//mu[contains(concat(@src,"$"),"bute$")][not(following-sibling::*)]//epsilon[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::tau[@xml:id="id2"][not(following-sibling::*)]//gamma[@xml:lang="en-US"][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/phi[contains(concat(@att,"$"),"56789$")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::pi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::omicron[@false][@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::upsilon[starts-with(@and,"attribute-v")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 3]]//eta[starts-with(@false,"another attribute ")][@xml:lang="no-nb"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega attr="content" xml:lang="nb"> + <mu src="attribute"> + <epsilon xml:id="id1"/> + <tau xml:id="id2"> + <gamma xml:lang="en-US"/> + <tau xml:lang="en-GB" xml:id="id3"> + <phi att="123456789" xml:id="id4"/> + <pi xml:lang="no-nb"/> + <omicron false="another attribute value" xml:lang="en-US" xml:id="id5"/> + <upsilon and="attribute-value" xml:lang="en-US" xml:id="id6"> + <eta false="another attribute value" xml:lang="no-nb"> + <green>This text must be green</green> + </eta> + </upsilon> + </tau> + </tau> + </mu> + </omega> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="no"]//omicron[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::iota[contains(concat(@data,"$"),"t-value$")][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@class][@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//theta[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::zeta[@title][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//zeta[@att][@xml:lang="no"]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda xml:lang="no"> + <omicron xml:id="id1"/> + <tau xml:lang="en"/> + <iota data="this-is-att-value" xml:lang="no" xml:id="id2"/> + <zeta class="true" xml:lang="no-nb"> + <theta xml:lang="no-nb"/> + <zeta title="solid 1px green" xml:lang="nb"/> + <nu xml:lang="no-nb" xml:id="id3"> + <zeta att="solid 1px green" xml:lang="no"> + <green>This text must be green</green> + </zeta> + </nu> + </zeta> + </lambda> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en-US"]/zeta[@object="this-is-att-value"][@xml:lang="nb"][@xml:id="id1"][not(following-sibling::*)]/sigma[starts-with(concat(@string,"-"),"another attribute value-")][following-sibling::eta[@xml:id="id2"]//alpha[starts-with(@false,"another")][@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::beta[starts-with(concat(@desciption,"-"),"this.nodeValue-")][@xml:lang="no-nb"]/epsilon[starts-with(@true,"con")][not(child::node())][following-sibling::epsilon[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]]//alpha[starts-with(@insert,"this.nodeV")][@xml:id="id5"]//nu[contains(@attr,"67")][@xml:id="id6"][not(child::node())][following-sibling::lambda[@xml:lang="en"]//phi[not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="en-US"][@xml:id="id7"]/lambda[@xml:id="id8"]/beta[@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@xml:lang="en"][@xml:id="id10"][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id11"][preceding-sibling::*[position() = 1]]//delta/epsilon[@insert][@xml:id="id12"]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="en-US"> + <zeta object="this-is-att-value" xml:lang="nb" xml:id="id1"> + <sigma string="another attribute value"/> + <eta xml:id="id2"> + <alpha false="another attribute value" xml:lang="en-GB" xml:id="id3"/> + <beta desciption="this.nodeValue" xml:lang="no-nb"> + <epsilon true="content"/> + <epsilon xml:lang="no" xml:id="id4"> + <alpha insert="this.nodeValue" xml:id="id5"> + <nu attr="123456789" xml:id="id6"/> + <lambda xml:lang="en"> + <phi> + <phi xml:lang="en-US" xml:id="id7"> + <lambda xml:id="id8"> + <beta xml:lang="nb" xml:id="id9"> + <theta xml:lang="en" xml:id="id10"/> + <epsilon xml:lang="no-nb" xml:id="id11"> + <delta> + <epsilon insert="123456789" xml:id="id12"> + <green>This text must be green</green> + </epsilon> + </delta> + </epsilon> + </beta> + </lambda> + </phi> + </phi> + </lambda> + </alpha> + </epsilon> + </beta> + </eta> + </zeta> + </kappa> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@token,"-"),"100%-")][@xml:lang="no"][@xml:id="id1"]//upsilon[contains(concat(@attr,"$"),".nodeValue$")][@xml:lang="en-US"][not(child::node())][following-sibling::alpha[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@object="attribute-value"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::pi[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 3]][following-sibling::chi[not(following-sibling::*)]]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta token="100%" xml:lang="no" xml:id="id1"> + <upsilon attr="this.nodeValue" xml:lang="en-US"/> + <alpha xml:lang="en"/> + <zeta object="attribute-value" xml:id="id2"/> + <pi xml:lang="en-GB" xml:id="id3"/> + <chi> + <green>This text must be green</green> + </chi> + </delta> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="no"]//sigma[@true]//chi[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[contains(@attrib,"e")][@xml:lang="en"][@xml:id="id2"][following-sibling::iota[contains(concat(@abort,"$"),"ibute$")][following-sibling::*[position()=1]][following-sibling::xi[contains(@and,"1")][@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <delta xml:lang="no"> + <sigma true="_blank"> + <chi xml:lang="nb" xml:id="id1"> + <kappa attrib="attribute-value" xml:lang="en" xml:id="id2"/> + <iota abort="attribute"/> + <xi and="solid 1px green" xml:lang="en-GB"> + <green>This text must be green</green> + </xi> + </chi> + </sigma> + </delta> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="no-nb"][@xml:id="id1"]/beta[starts-with(concat(@data,"-"),"attribute-")][not(preceding-sibling::*)][following-sibling::xi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[not(preceding-sibling::*)]/kappa[@xml:lang="en-US"][not(preceding-sibling::*)]/theta[not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::theta)]//chi[starts-with(concat(@number,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/iota[@data="another attribute value"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="nb"][not(child::node())][following-sibling::xi[@delete][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@content="attribute-value"][@xml:lang="nb"][preceding-sibling::*[position() = 3]]/phi[@att][@xml:id="id5"][not(preceding-sibling::*)]/chi[@xml:id="id6"][not(preceding-sibling::*)]/mu[contains(concat(@content,"$"),"e$")][@xml:lang="en-GB"][not(following-sibling::*)]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <eta xml:lang="no-nb" xml:id="id1"> + <beta data="attribute"/> + <xi> + <chi> + <kappa xml:lang="en-US"> + <theta> + <chi number="this.nodeValue" xml:lang="nb" xml:id="id2"/> + <lambda xml:lang="en-GB" xml:id="id3"> + <iota data="another attribute value" xml:id="id4"/> + <upsilon xml:lang="nb"/> + <xi delete="attribute-value"/> + <psi content="attribute-value" xml:lang="nb"> + <phi att="another attribute value" xml:id="id5"> + <chi xml:id="id6"> + <mu content="attribute-value" xml:lang="en-GB"> + <green>This text must be green</green> + </mu> + </chi> + </phi> + </psi> + </lambda> + </theta> + </kappa> + </chi> + </xi> + </eta> + </tree> + </test> + <test> + <xpath>//upsilon//iota[contains(@class,"56789")][not(child::node())][following-sibling::omicron[following-sibling::*[position()=2]][following-sibling::theta[@number][@xml:lang="en"][@xml:id="id1"][following-sibling::xi[@xml:lang="en-US"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//delta[not(following-sibling::*)]/nu[@xml:id="id2"][following-sibling::chi[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::alpha[@xml:lang="no"][@xml:id="id4"]/pi[contains(concat(@attrib,"$"),"tribute value$")][@xml:lang="en"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <upsilon> + <iota class="123456789"/> + <omicron/> + <theta number="123456789" xml:lang="en" xml:id="id1"/> + <xi xml:lang="en-US"> + <delta> + <nu xml:id="id2"/> + <chi xml:id="id3"/> + <delta xml:lang="en-GB"/> + <alpha xml:lang="no" xml:id="id4"> + <pi attrib="attribute value" xml:lang="en"> + <green>This text must be green</green> + </pi> + </alpha> + </delta> + </xi> + </upsilon> + </tree> + </test> + <test> + <xpath>//sigma[@true][@xml:id="id1"]//delta[@string][@xml:id="id2"]/omicron[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::lambda[contains(@false,"e")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]]/upsilon[contains(concat(@data,"$"),"odeValue$")][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::sigma[@object][@xml:id="id6"][following-sibling::pi[contains(@attrib,"n")][@xml:lang="nb"][@xml:id="id7"][following-sibling::theta[contains(@att,"t")][preceding-sibling::*[position() = 3]]/delta[@xml:lang="en"][@xml:id="id8"]/omega[starts-with(@string,"cont")][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@or][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]]</xpath> + <tree> + <sigma true="123456789" xml:id="id1"> + <delta string="_blank" xml:id="id2"> + <omicron xml:lang="no-nb" xml:id="id3"/> + <lambda false="another attribute value" xml:lang="no" xml:id="id4"> + <upsilon data="this.nodeValue" xml:lang="en-US" xml:id="id5"/> + <sigma object="123456789" xml:id="id6"/> + <pi attrib="solid 1px green" xml:lang="nb" xml:id="id7"/> + <theta att="attribute"> + <delta xml:lang="en" xml:id="id8"> + <omega string="content"> + <kappa or="solid 1px green"> + <green>This text must be green</green> + </kappa> + </omega> + </delta> + </theta> + </lambda> + </delta> + </sigma> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]/mu[starts-with(@attribute,"this.node")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::mu[@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[@content][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::lambda[@xml:lang="nb"][not(following-sibling::*)]/epsilon[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[starts-with(concat(@data,"-"),"100%-")][following-sibling::beta[starts-with(@insert,"100%")][@xml:id="id5"][preceding-sibling::*[position() = 2]]/omega[@attrib][not(child::node())][following-sibling::lambda[@abort][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::lambda[starts-with(@insert,"content")][@xml:lang="nb"][@xml:id="id7"][not(child::node())][following-sibling::rho/xi[not(child::node())][following-sibling::iota[@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[preceding-sibling::*[position() = 2]][following-sibling::kappa[starts-with(concat(@insert,"-"),"this.nodeValue-")][@xml:lang="en-GB"][@xml:id="id9"]//omega[@xml:lang="nb"][not(preceding-sibling::*)]/lambda[not(preceding-sibling::*)][not(following-sibling::*)]//delta[@title][@xml:lang="nb"][not(child::node())][following-sibling::pi[@xml:lang="no"][@xml:id="id10"][not(following-sibling::*)]/omega[contains(@string,"0%")][@xml:lang="no-nb"][@xml:id="id11"]//upsilon[starts-with(@false,"1")][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi xml:id="id1"> + <mu attribute="this.nodeValue" xml:lang="nb"/> + <mu xml:lang="en-GB" xml:id="id2"/> + <eta content="content" xml:lang="en-US" xml:id="id3"/> + <lambda xml:lang="nb"> + <epsilon xml:lang="no" xml:id="id4"/> + <theta data="100%"/> + <beta insert="100%" xml:id="id5"> + <omega attrib="this.nodeValue"/> + <lambda abort="this.nodeValue" xml:id="id6"/> + <lambda insert="content" xml:lang="nb" xml:id="id7"/> + <rho> + <xi/> + <iota xml:id="id8"/> + <any/> + <kappa insert="this.nodeValue" xml:lang="en-GB" xml:id="id9"> + <omega xml:lang="nb"> + <lambda> + <delta title="true" xml:lang="nb"/> + <pi xml:lang="no" xml:id="id10"> + <omega string="100%" xml:lang="no-nb" xml:id="id11"> + <upsilon false="100%"> + <green>This text must be green</green> + </upsilon> + </omega> + </pi> + </lambda> + </omega> + </kappa> + </rho> + </beta> + </lambda> + </chi> + </tree> + </test> + <test> + <xpath>//upsilon[contains(@and,"al")][@xml:lang="nb"]/gamma[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[contains(@insert,"%")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//upsilon[not(child::node())][following-sibling::alpha[@data][not(following-sibling::*)]/pi[@xml:lang="no"][@xml:id="id2"][following-sibling::mu[contains(concat(@src,"$"),"_blank$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/theta[contains(@att,"Value")][@xml:id="id3"][not(following-sibling::*)][not(preceding-sibling::theta or following-sibling::theta)][not(preceding-sibling::theta)]//beta[@class][@xml:lang="en-US"]//phi[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id6"]//delta[starts-with(@object,"this.nod")][@xml:lang="en-GB"][@xml:id="id7"][following-sibling::tau[preceding-sibling::*[position() = 1]][following-sibling::alpha[following-sibling::psi[@att][@xml:lang="en-US"][@xml:id="id8"][not(following-sibling::*)]//omega[@xml:id="id9"][not(preceding-sibling::*)]]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <upsilon and="false" xml:lang="nb"> + <gamma xml:id="id1"/> + <epsilon insert="100%"> + <upsilon/> + <alpha data="false"> + <pi xml:lang="no" xml:id="id2"/> + <mu src="_blank"> + <theta att="this.nodeValue" xml:id="id3"> + <beta class="this.nodeValue" xml:lang="en-US"> + <phi xml:id="id4"> + <mu xml:id="id5"/> + <omicron xml:lang="en-US" xml:id="id6"> + <delta object="this.nodeValue" xml:lang="en-GB" xml:id="id7"/> + <tau/> + <alpha/> + <psi att="this-is-att-value" xml:lang="en-US" xml:id="id8"> + <omega xml:id="id9"> + <green>This text must be green</green> + </omega> + </psi> + </omicron> + </phi> + </beta> + </theta> + </mu> + </alpha> + </epsilon> + </upsilon> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="en-GB"][@xml:id="id1"]//*[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::gamma[starts-with(concat(@data,"-"),"this-")][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[starts-with(concat(@src,"-"),"100%-")][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//*[@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)]//mu[starts-with(concat(@src,"-"),"false-")][not(child::node())][following-sibling::delta[starts-with(@object,"_b")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@xml:id="id6"][position() = 1]][position() = 1]]]</xpath> + <tree> + <beta xml:lang="en-GB" xml:id="id1"> + <any xml:lang="nb"/> + <gamma data="this-is-att-value" xml:lang="en" xml:id="id2"/> + <phi src="100%" xml:id="id3"> + <any xml:lang="en-GB" xml:id="id4"> + <mu src="false"/> + <delta object="_blank" xml:id="id5"> + <phi xml:id="id6"> + <green>This text must be green</green> + </phi> + </delta> + </any> + </phi> + </beta> + </tree> + </test> + <test> + <xpath>//omicron[contains(@src,"4")][@xml:id="id1"]/xi[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::phi[@attribute][@xml:lang="no-nb"][not(child::node())][following-sibling::beta[@att][@xml:lang="no"][not(child::node())][following-sibling::*[@attr][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 3]]//omicron[@title][@xml:lang="en-US"]//eta[@number][@xml:lang="no"]/phi[@token]/alpha[@xml:lang="nb"][@xml:id="id4"]//pi[contains(@number,"tt")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@string="true"][not(following-sibling::*)]//delta[@true][@xml:id="id6"][not(preceding-sibling::*)]//phi[contains(@object,"6789")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@src="this-is-att-value"][@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][position() = 1]]]]]</xpath> + <tree> + <omicron src="123456789" xml:id="id1"> + <xi xml:id="id2"/> + <phi attribute="this.nodeValue" xml:lang="no-nb"/> + <beta att="false" xml:lang="no"/> + <any attr="content" xml:lang="en" xml:id="id3"> + <omicron title="false" xml:lang="en-US"> + <eta number="attribute-value" xml:lang="no"> + <phi token="100%"> + <alpha xml:lang="nb" xml:id="id4"> + <pi number="attribute" xml:id="id5"> + <theta string="true"> + <delta true="false" xml:id="id6"> + <phi object="123456789" xml:lang="en-GB"/> + <epsilon src="this-is-att-value" xml:lang="nb" xml:id="id7"> + <green>This text must be green</green> + </epsilon> + </delta> + </theta> + </pi> + </alpha> + </phi> + </eta> + </omicron> + </any> + </omicron> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no"][@xml:id="id1"]//omicron[contains(concat(@name,"$"),"tt-value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[preceding-sibling::*[position() = 1]]//upsilon[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[following-sibling::phi[contains(@token,"een")][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/eta[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::omicron[contains(@name,"e")][@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@xml:id="id5"]/gamma[@false][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@or,"$"),"value$")][@xml:lang="en-US"][@xml:id="id7"]//omicron[@desciption][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <kappa xml:lang="no" xml:id="id1"> + <omicron name="this-is-att-value" xml:lang="no-nb"/> + <epsilon> + <upsilon xml:lang="en-GB" xml:id="id2"> + <phi/> + <phi token="solid 1px green" xml:lang="no-nb" xml:id="id3"> + <eta xml:lang="en"/> + <omicron name="attribute value" xml:lang="en-US" xml:id="id4"/> + <rho xml:id="id5"> + <gamma false="100%" xml:id="id6"/> + <alpha or="attribute value" xml:lang="en-US" xml:id="id7"> + <omicron desciption="attribute-value"> + <green>This text must be green</green> + </omicron> + </alpha> + </rho> + </phi> + </upsilon> + </epsilon> + </kappa> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="en-GB"][@xml:id="id1"]//pi[not(preceding-sibling::*)]/sigma[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(preceding-sibling::sigma or following-sibling::sigma)][following-sibling::phi[@false][not(following-sibling::*)]/kappa[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//*//sigma[contains(@class,"12345")][following-sibling::gamma[@xml:id="id3"][preceding-sibling::*[position() = 1]]//nu[contains(@data,"lue")][@xml:lang="no-nb"][not(preceding-sibling::*)]/psi[@or][@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]//eta[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::*[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::mu[contains(@attrib,"te value")][@xml:lang="no-nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omicron[@xml:lang="nb"][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[@number][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:id="id9"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:lang="no-nb"][@xml:id="id10"]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="en-GB" xml:id="id1"> + <pi> + <sigma xml:lang="en-US" xml:id="id2"/> + <phi false="attribute"> + <kappa xml:lang="en-US"> + <any> + <sigma class="123456789"/> + <gamma xml:id="id3"> + <nu data="this-is-att-value" xml:lang="no-nb"> + <psi or="another attribute value" xml:lang="nb" xml:id="id4"> + <eta xml:lang="no" xml:id="id5"/> + <any xml:lang="en-US" xml:id="id6"/> + <mu attrib="attribute value" xml:lang="no-nb" xml:id="id7"> + <omicron xml:lang="nb"/> + <rho number="solid 1px green" xml:id="id8"/> + <nu xml:id="id9"/> + <omicron xml:lang="no-nb" xml:id="id10"> + <green>This text must be green</green> + </omicron> + </mu> + </psi> + </nu> + </gamma> + </any> + </kappa> + </phi> + </pi> + </omicron> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="nb"][@xml:id="id1"]/psi[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::gamma[contains(concat(@token,"$"),"ttribute$")][preceding-sibling::*[position() = 1]][following-sibling::chi[@false][@xml:id="id3"]//omicron[not(child::node())][following-sibling::tau[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id4"]//upsilon[not(following-sibling::*)]/pi[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::iota[@class="attribute value"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::phi[@xml:id="id6"][preceding-sibling::*[position() = 2]]//theta[contains(concat(@src,"$"),"ttribute value$")][@xml:lang="no"][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[contains(concat(@src,"$"),"ute value$")][@xml:lang="en"][not(following-sibling::*)]/pi[starts-with(@src,"another")][@xml:lang="no-nb"][not(preceding-sibling::pi)][not(child::node())][following-sibling::epsilon[@xml:id="id8"][following-sibling::*[position()=4]][following-sibling::xi[@xml:lang="no-nb"][following-sibling::delta[@xml:lang="nb"][not(child::node())][following-sibling::kappa[@xml:id="id9"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::kappa[@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 5]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <any xml:lang="nb" xml:id="id1"> + <psi xml:id="id2"/> + <gamma token="attribute"/> + <chi false="content" xml:id="id3"> + <omicron/> + <tau token="attribute" xml:lang="nb" xml:id="id4"> + <upsilon> + <pi xml:lang="en-GB"/> + <iota class="attribute value" xml:id="id5"/> + <phi xml:id="id6"> + <theta src="attribute value" xml:lang="no"/> + <rho xml:lang="en-GB" xml:id="id7"/> + <theta src="attribute value" xml:lang="en"> + <pi src="another attribute value" xml:lang="no-nb"/> + <epsilon xml:id="id8"/> + <xi xml:lang="no-nb"/> + <delta xml:lang="nb"/> + <kappa xml:id="id9"/> + <kappa xml:lang="en" xml:id="id10"> + <green>This text must be green</green> + </kappa> + </theta> + </phi> + </upsilon> + </tau> + </chi> + </any> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]//theta[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::kappa[contains(@class,"56789")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[starts-with(@attr,"attri")][@xml:lang="en"]//xi[contains(@att,"0%")][not(preceding-sibling::*)]/zeta[@name][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="no"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi xml:id="id1"> + <theta xml:lang="en" xml:id="id2"/> + <kappa class="123456789"/> + <upsilon attr="attribute" xml:lang="en"> + <xi att="100%"> + <zeta name="false" xml:id="id3"> + <phi xml:id="id4"/> + <tau xml:lang="no"> + <green>This text must be green</green> + </tau> + </zeta> + </xi> + </upsilon> + </xi> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="nb"][@xml:id="id1"]/zeta[@true][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[@delete="this-is-att-value"][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[starts-with(concat(@class,"-"),"content-")][@xml:lang="en-GB"][not(following-sibling::*)]/chi[contains(@object,"tru")][@xml:id="id4"][following-sibling::beta[@xml:lang="en"][@xml:id="id5"]//nu[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::xi[@object="100%"][@xml:id="id7"]//upsilon/omicron[starts-with(concat(@content,"-"),"solid 1px green-")][@xml:lang="nb"][@xml:id="id8"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@desciption][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:id="id10"]/lambda[starts-with(concat(@and,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@xml:lang="nb"][@xml:id="id12"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <alpha xml:lang="nb" xml:id="id1"> + <zeta true="solid 1px green" xml:lang="en-GB" xml:id="id2"/> + <delta delete="this-is-att-value" xml:lang="en" xml:id="id3"> + <epsilon class="content" xml:lang="en-GB"> + <chi object="true" xml:id="id4"/> + <beta xml:lang="en" xml:id="id5"> + <nu xml:lang="en-GB" xml:id="id6"/> + <xi object="100%" xml:id="id7"> + <upsilon> + <omicron content="solid 1px green" xml:lang="nb" xml:id="id8"/> + <chi desciption="this.nodeValue"> + <beta xml:lang="nb" xml:id="id9"/> + <upsilon xml:id="id10"> + <lambda and="this.nodeValue" xml:lang="nb" xml:id="id11"/> + <nu xml:lang="nb" xml:id="id12"> + <green>This text must be green</green> + </nu> + </upsilon> + </chi> + </upsilon> + </xi> + </beta> + </epsilon> + </delta> + </alpha> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]//alpha[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::beta[@xml:lang="no"][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id6"]/gamma[@and="100%"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@src][@xml:id="id7"][not(child::node())][following-sibling::tau[@xml:lang="en"]/pi[@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/omicron[@object][not(following-sibling::*)]//chi[@xml:lang="nb"][following-sibling::omega[contains(@or," value")][@xml:lang="en-GB"][following-sibling::xi[@xml:lang="en"][@xml:id="id9"]//*[starts-with(concat(@content,"-"),"this-")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en"][not(following-sibling::*)]//tau[@xml:lang="no-nb"][@xml:id="id10"][not(following-sibling::*)]/xi[@xml:lang="en"][@xml:id="id11"]//tau[@number][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:id="id12"][preceding-sibling::*[position() = 1]][following-sibling::*[contains(concat(@string,"$"),"reen$")][@xml:id="id13"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//pi[@number][@xml:lang="en-GB"][@xml:id="id14"][not(following-sibling::*)][position() = 1]][position() = 1]]]]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma xml:id="id1"> + <alpha xml:lang="en" xml:id="id2"/> + <tau xml:lang="no-nb" xml:id="id3"/> + <beta xml:lang="no" xml:id="id4"/> + <lambda xml:lang="en-US" xml:id="id5"/> + <epsilon xml:lang="no-nb" xml:id="id6"> + <gamma and="100%"> + <omicron src="attribute value" xml:id="id7"/> + <tau xml:lang="en"> + <pi xml:id="id8"/> + <alpha xml:lang="en-US"> + <omicron object="solid 1px green"> + <chi xml:lang="nb"/> + <omega or="attribute value" xml:lang="en-GB"/> + <xi xml:lang="en" xml:id="id9"> + <any content="this-is-att-value" xml:lang="no"/> + <gamma/> + <lambda xml:lang="en"> + <tau xml:lang="no-nb" xml:id="id10"> + <xi xml:lang="en" xml:id="id11"> + <tau number="attribute value"/> + <tau xml:id="id12"/> + <any string="solid 1px green" xml:id="id13"> + <pi number="false" xml:lang="en-GB" xml:id="id14"> + <green>This text must be green</green> + </pi> + </any> + </xi> + </tau> + </lambda> + </xi> + </omicron> + </alpha> + </tau> + </gamma> + </epsilon> + </sigma> + </tree> + </test> + <test> + <xpath>//psi[contains(@desciption,"456789")][@xml:lang="nb"]//eta[@attribute="123456789"][@xml:id="id1"][not(following-sibling::*)]/gamma[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::mu[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[not(following-sibling::*)]//iota[@xml:lang="no"][not(child::node())][following-sibling::lambda[@insert="false"][@xml:id="id4"]//kappa[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::*[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/iota[@xml:lang="no"][not(following-sibling::*)]/sigma[contains(concat(@true,"$"),"ibute value$")][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]//theta[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::mu//mu[@attribute][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::mu)][following-sibling::sigma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//alpha[starts-with(@desciption,"another attribute valu")][@xml:lang="no"][@xml:id="id8"]/eta[contains(concat(@token,"$"),"bute$")][@xml:id="id9"][not(following-sibling::*)]/mu[@xml:lang="nb"]/beta[@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]]][position() = 1]]</xpath> + <tree> + <psi desciption="123456789" xml:lang="nb"> + <eta attribute="123456789" xml:id="id1"> + <gamma xml:id="id2"/> + <mu xml:lang="en" xml:id="id3"/> + <pi> + <iota xml:lang="no"/> + <lambda insert="false" xml:id="id4"> + <kappa xml:id="id5"/> + <any xml:lang="en-US"> + <iota xml:lang="no"> + <sigma true="another attribute value" xml:lang="en" xml:id="id6"> + <theta xml:lang="no"/> + <mu> + <mu attribute="solid 1px green" xml:lang="en-GB" xml:id="id7"/> + <sigma> + <alpha desciption="another attribute value" xml:lang="no" xml:id="id8"> + <eta token="attribute" xml:id="id9"> + <mu xml:lang="nb"> + <beta xml:lang="en-US" xml:id="id10"> + <green>This text must be green</green> + </beta> + </mu> + </eta> + </alpha> + </sigma> + </mu> + </sigma> + </iota> + </any> + </lambda> + </pi> + </eta> + </psi> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en-GB"]/xi[@att][not(preceding-sibling::*)][not(following-sibling::*)]/tau[starts-with(@or,"1234")][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:id="id2"][preceding-sibling::*[position() = 1]]//xi[contains(@and,"lue")][@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[contains(concat(@true,"$"),"tribute value$")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]]//psi[starts-with(concat(@insert,"-"),"this-")][@xml:id="id4"]//epsilon[following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:id="id5"][preceding-sibling::*[position() = 1]]//nu[@xml:lang="no-nb"][following-sibling::nu/iota[not(following-sibling::*)][position() = 1]]]]]]</xpath> + <tree> + <chi xml:lang="en-GB"> + <xi att="attribute value"> + <tau or="123456789" xml:id="id1"/> + <omicron xml:id="id2"> + <xi and="attribute-value" xml:lang="en-GB" xml:id="id3"/> + <omicron xml:lang="en"/> + <xi true="attribute value" xml:lang="en-US"> + <psi insert="this-is-att-value" xml:id="id4"> + <epsilon/> + <tau xml:id="id5"> + <nu xml:lang="no-nb"/> + <nu> + <iota> + <green>This text must be green</green> + </iota> + </nu> + </tau> + </psi> + </xi> + </omicron> + </xi> + </chi> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="nb"][@xml:id="id1"]//epsilon[@class][@xml:id="id2"][not(preceding-sibling::*)]//omicron[not(following-sibling::*)]//beta[starts-with(@content,"this.no")][@xml:lang="en-GB"][not(following-sibling::*)]//mu[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::mu[not(following-sibling::*)]/sigma[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[starts-with(@title,"at")][@xml:id="id5"][preceding-sibling::*[position() = 1]]/lambda[starts-with(@number,"attr")][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::kappa[starts-with(concat(@content,"-"),"this-")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[not(following-sibling::*)]//epsilon[@xml:id="id8"][not(following-sibling::*)]//omicron[@delete][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[@att][@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="nb" xml:id="id1"> + <epsilon class="_blank" xml:id="id2"> + <omicron> + <beta content="this.nodeValue" xml:lang="en-GB"> + <mu xml:lang="en-GB" xml:id="id3"/> + <mu> + <sigma xml:id="id4"/> + <upsilon title="attribute value" xml:id="id5"> + <lambda number="attribute-value" xml:lang="en-GB" xml:id="id6"/> + <kappa content="this-is-att-value" xml:id="id7"> + <any> + <epsilon xml:id="id8"> + <omicron delete="_blank" xml:lang="no" xml:id="id9"> + <gamma att="true" xml:lang="nb" xml:id="id10"> + <green>This text must be green</green> + </gamma> + </omicron> + </epsilon> + </any> + </kappa> + </upsilon> + </mu> + </beta> + </omicron> + </epsilon> + </omicron> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="en"]//omega[@xml:id="id1"][not(preceding-sibling::*)][not(preceding-sibling::omega)]//theta[@xml:lang="nb"][@xml:id="id2"]/epsilon[@object][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::zeta[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="no-nb"][not(following-sibling::*)]]]</xpath> + <tree> + <rho xml:lang="en"> + <omega xml:id="id1"> + <theta xml:lang="nb" xml:id="id2"> + <epsilon object="another attribute value" xml:lang="en-US" xml:id="id3"/> + <zeta xml:id="id4"/> + <psi xml:lang="no-nb"> + <green>This text must be green</green> + </psi> + </theta> + </omega> + </rho> + </tree> + </test> + <test> + <xpath>//epsilon/alpha//rho[@string][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[starts-with(@number,"_bla")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::omicron[not(following-sibling::*)]]]</xpath> + <tree> + <epsilon> + <alpha> + <rho string="_blank" xml:lang="nb"> + <kappa number="_blank" xml:lang="no"/> + <upsilon xml:lang="en"/> + <omicron> + <green>This text must be green</green> + </omicron> + </rho> + </alpha> + </epsilon> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="en-GB"][@xml:id="id1"]/sigma[@string="solid 1px green"][@xml:lang="en-US"][@xml:id="id2"][following-sibling::pi[@xml:id="id3"][following-sibling::*[position()=2]][following-sibling::zeta[preceding-sibling::*[position() = 2]][following-sibling::alpha[@string]/kappa[contains(@content,"ank")][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]//omega[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::omega)]/nu[@xml:lang="no"][not(preceding-sibling::*)]//epsilon[@or][@xml:lang="en-GB"][@xml:id="id6"]/lambda[not(preceding-sibling::*)][following-sibling::delta[@delete][preceding-sibling::*[position() = 1]][following-sibling::nu[@object][@xml:id="id7"][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 3]]/omega[@xml:id="id8"][not(preceding-sibling::*)]//delta[@xml:lang="no-nb"][not(preceding-sibling::*)]//pi[not(preceding-sibling::*)][following-sibling::phi[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::phi[preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <epsilon xml:lang="en-GB" xml:id="id1"> + <sigma string="solid 1px green" xml:lang="en-US" xml:id="id2"/> + <pi xml:id="id3"/> + <zeta/> + <alpha string="_blank"> + <kappa content="_blank" xml:lang="no-nb" xml:id="id4"> + <omega xml:lang="no-nb" xml:id="id5"> + <nu xml:lang="no"> + <epsilon or="solid 1px green" xml:lang="en-GB" xml:id="id6"> + <lambda/> + <delta delete="attribute-value"/> + <nu object="attribute-value" xml:id="id7"/> + <zeta> + <omega xml:id="id8"> + <delta xml:lang="no-nb"> + <pi/> + <phi xml:id="id9"/> + <phi> + <green>This text must be green</green> + </phi> + </delta> + </omega> + </zeta> + </epsilon> + </nu> + </omega> + </kappa> + </alpha> + </epsilon> + </tree> + </test> + <test> + <xpath>//theta[@or="this-is-att-value"]//beta[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::omega[starts-with(@attr,"at")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[starts-with(@desciption,"solid 1px gre")][@xml:lang="en-US"]//epsilon[@true][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::gamma[contains(@data,"234")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//zeta[@content][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::upsilon[contains(@number,"attribute valu")][@xml:id="id5"]//theta[@xml:id="id6"][not(child::node())][following-sibling::theta[contains(concat(@false,"$"),"e$")][following-sibling::chi//beta[contains(concat(@attribute,"$"),"100%$")]//iota[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)]/phi[@token][@xml:lang="nb"][@xml:id="id8"][not(following-sibling::*)][not(preceding-sibling::phi)]/zeta[@xml:lang="en-US"]/omicron[@xml:id="id9"][not(preceding-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <theta or="this-is-att-value"> + <beta xml:lang="en" xml:id="id1"/> + <omega attr="attribute value" xml:lang="en-GB"> + <nu desciption="solid 1px green" xml:lang="en-US"> + <epsilon true="_blank" xml:lang="en-GB" xml:id="id2"/> + <gamma data="123456789"/> + <sigma/> + <sigma xml:lang="no-nb" xml:id="id3"> + <zeta content="attribute-value" xml:id="id4"/> + <upsilon number="another attribute value" xml:id="id5"> + <theta xml:id="id6"/> + <theta false="true"/> + <chi> + <beta attribute="100%"> + <iota xml:lang="en-US" xml:id="id7"> + <phi token="content" xml:lang="nb" xml:id="id8"> + <zeta xml:lang="en-US"> + <omicron xml:id="id9"> + <green>This text must be green</green> + </omicron> + </zeta> + </phi> + </iota> + </beta> + </chi> + </upsilon> + </sigma> + </nu> + </omega> + </theta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="no"]//eta[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:lang="en-US"]/eta//rho[@insert="_blank"][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <sigma xml:lang="no"> + <eta xml:id="id1"> + <theta xml:id="id2"/> + <omicron xml:lang="en-US"> + <eta> + <rho insert="_blank"> + <green>This text must be green</green> + </rho> + </eta> + </omicron> + </eta> + </sigma> + </tree> + </test> + <test> + <xpath>//xi[@class][@xml:lang="en-GB"]/theta[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[starts-with(concat(@data,"-"),"attribute value-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]/omicron[@xml:lang="en-US"][not(child::node())][following-sibling::zeta[@delete][@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]]/pi[contains(@false,"olid 1px green")][@xml:lang="nb"][not(following-sibling::*)]//zeta[@token="attribute value"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[following-sibling::rho[@attribute="solid 1px green"]/*[@false][@xml:lang="no"]//delta[contains(concat(@or,"$"),"_blank$")][not(preceding-sibling::*)]//iota[starts-with(@token,"att")][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:id="id2"][not(child::node())][following-sibling::tau[@data][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::upsilon[contains(concat(@src,"$"),"false$")][preceding-sibling::*[position() = 3]][following-sibling::kappa//epsilon[@or="this-is-att-value"][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::*[contains(@class,"bute value")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]]]]]]</xpath> + <tree> + <xi class="content" xml:lang="en-GB"> + <theta xml:lang="no"> + <nu xml:lang="no-nb"/> + <zeta data="attribute value" xml:lang="no-nb"> + <omicron xml:lang="en-US"/> + <zeta delete="_blank" xml:lang="no-nb" xml:id="id1"> + <pi false="solid 1px green" xml:lang="nb"> + <zeta token="attribute value"> + <xi/> + <rho attribute="solid 1px green"> + <any false="solid 1px green" xml:lang="no"> + <delta or="_blank"> + <iota token="attribute"/> + <any xml:id="id2"/> + <tau data="false"/> + <upsilon src="false"/> + <kappa> + <epsilon or="this-is-att-value" xml:lang="en-GB" xml:id="id3"/> + <any class="another attribute value" xml:lang="en-GB"> + <green>This text must be green</green> + </any> + </kappa> + </delta> + </any> + </rho> + </zeta> + </pi> + </zeta> + </zeta> + </theta> + </xi> + </tree> + </test> + <test> + <xpath>//phi[@and="this.nodeValue"][@xml:id="id1"]//chi[@xml:id="id2"][not(preceding-sibling::*)]//psi[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::iota[@src][@xml:lang="en"][following-sibling::*[position()=3]][following-sibling::rho[starts-with(concat(@number,"-"),"true-")][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::eta[@delete][@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][following-sibling::beta[contains(@attribute,"100")][@xml:id="id5"][preceding-sibling::*[position() = 4]]//psi[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[@false="attribute-value"][@xml:lang="nb"]/kappa[@xml:id="id7"][following-sibling::xi[@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 1]]/tau[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[starts-with(@true,"attri")][@xml:lang="no"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/*[following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[@xml:id="id11"][not(preceding-sibling::*)][following-sibling::alpha[starts-with(concat(@name,"-"),"false-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[@false="true"][@xml:lang="nb"][following-sibling::rho[@name][@xml:lang="nb"][@xml:id="id12"][preceding-sibling::*[position() = 3]][following-sibling::zeta[@xml:id="id13"][following-sibling::*[position()=1]][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]/alpha[@xml:lang="no"][not(preceding-sibling::alpha)]/zeta[@xml:id="id14"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi and="this.nodeValue" xml:id="id1"> + <chi xml:id="id2"> + <psi xml:id="id3"/> + <iota src="100%" xml:lang="en"/> + <rho number="true" xml:id="id4"/> + <eta delete="123456789" xml:lang="no-nb"/> + <beta attribute="100%" xml:id="id5"> + <psi xml:lang="no" xml:id="id6"/> + <phi false="attribute-value" xml:lang="nb"> + <kappa xml:id="id7"/> + <xi xml:lang="en" xml:id="id8"> + <tau xml:id="id9"> + <omicron true="attribute" xml:lang="no" xml:id="id10"> + <any/> + <zeta> + <omega xml:id="id11"/> + <alpha name="false"/> + <upsilon false="true" xml:lang="nb"/> + <rho name="content" xml:lang="nb" xml:id="id12"/> + <zeta xml:id="id13"/> + <omega xml:lang="en-GB"> + <alpha xml:lang="no"> + <zeta xml:id="id14"> + <green>This text must be green</green> + </zeta> + </alpha> + </omega> + </zeta> + </omicron> + </tau> + </xi> + </phi> + </beta> + </chi> + </phi> + </tree> + </test> + <test> + <xpath>//alpha[contains(@number," 1px gre")]/eta[not(child::node())][following-sibling::iota[@xml:lang="en"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::nu[@object][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//psi[@attrib][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::nu[@delete][preceding-sibling::*[position() = 1]]//beta/tau[@xml:id="id3"]/chi[starts-with(concat(@true,"-"),"content-")][@xml:id="id4"][not(preceding-sibling::*)]/phi[@xml:id="id5"][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]]//iota[not(following-sibling::*)]/upsilon[contains(concat(@name,"$"),"k$")]/eta[@data="attribute"][not(child::node())][following-sibling::tau[@xml:id="id7"][preceding-sibling::*[position() = 1]]//eta[@token="attribute-value"][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::kappa[@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@xml:id="id9"][preceding-sibling::*[position() = 2]]//lambda[@desciption="123456789"]/gamma[@attr][@xml:id="id10"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@xml:id="id11"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <alpha number="solid 1px green"> + <eta/> + <iota xml:lang="en" xml:id="id1"/> + <nu object="content"> + <psi attrib="another attribute value" xml:id="id2"/> + <nu delete="_blank"> + <beta> + <tau xml:id="id3"> + <chi true="content" xml:id="id4"> + <phi xml:id="id5"/> + <psi xml:lang="en-GB" xml:id="id6"> + <iota> + <upsilon name="_blank"> + <eta data="attribute"/> + <tau xml:id="id7"> + <eta token="attribute-value" xml:lang="en"/> + <kappa xml:id="id8"/> + <iota xml:id="id9"> + <lambda desciption="123456789"> + <gamma attr="attribute value" xml:id="id10"/> + <beta xml:id="id11"> + <green>This text must be green</green> + </beta> + </lambda> + </iota> + </tau> + </upsilon> + </iota> + </psi> + </chi> + </tau> + </beta> + </nu> + </nu> + </alpha> + </tree> + </test> + <test> + <xpath>//epsilon[starts-with(@insert,"fa")][@xml:lang="en-US"][@xml:id="id1"]/eta[contains(concat(@class,"$"),"e$")][@xml:lang="en"]//nu[starts-with(concat(@string,"-"),"this-")][@xml:id="id2"][following-sibling::alpha[contains(concat(@name,"$"),"tribute$")][@xml:lang="en-US"][following-sibling::upsilon[preceding-sibling::*[position() = 2]]//nu[not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="en-GB"][not(child::node())][following-sibling::zeta[starts-with(@class,"con")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 3]][not(following-sibling::*)]/omicron[following-sibling::iota[not(child::node())][following-sibling::theta[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::sigma[@xml:id="id4"][not(child::node())][following-sibling::alpha[@xml:id="id5"][following-sibling::sigma[starts-with(@content,"10")][@xml:id="id6"][not(child::node())][following-sibling::omicron[@content="true"][@xml:id="id7"][position() = 1]]]][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon insert="false" xml:lang="en-US" xml:id="id1"> + <eta class="true" xml:lang="en"> + <nu string="this-is-att-value" xml:id="id2"/> + <alpha name="attribute" xml:lang="en-US"/> + <upsilon> + <nu/> + <upsilon xml:lang="en-GB"/> + <zeta class="content" xml:lang="en-US"/> + <alpha> + <omicron/> + <iota/> + <theta xml:lang="no" xml:id="id3"/> + <sigma xml:id="id4"/> + <alpha xml:id="id5"/> + <sigma content="100%" xml:id="id6"/> + <omicron content="true" xml:id="id7"> + <green>This text must be green</green> + </omicron> + </alpha> + </upsilon> + </eta> + </epsilon> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]//iota[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[preceding-sibling::*[position() = 1]]//delta[@insert][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@data][@xml:lang="no-nb"][not(following-sibling::*)]//lambda[@xml:id="id2"][following-sibling::epsilon[@insert][@xml:lang="no"][preceding-sibling::*[position() = 1]]/phi[@xml:id="id3"][not(preceding-sibling::*)]//rho[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="en-US"][not(child::node())][following-sibling::psi[@name][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@xml:lang="en"][not(following-sibling::*)]//omicron[starts-with(@attr,"c")]/upsilon[contains(concat(@name,"$")," 1px green$")][@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]/delta[not(following-sibling::*)]/beta[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::omicron[@content][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[contains(concat(@token,"$"),"ue$")][@xml:id="id7"][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <xi xml:id="id1"> + <iota/> + <phi> + <delta insert="123456789"> + <sigma data="false" xml:lang="no-nb"> + <lambda xml:id="id2"/> + <epsilon insert="attribute-value" xml:lang="no"> + <phi xml:id="id3"> + <rho xml:lang="no-nb"/> + <delta xml:lang="en-US"/> + <psi name="_blank" xml:id="id4"/> + <upsilon xml:lang="en"> + <omicron attr="content"> + <upsilon name="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <delta> + <beta xml:lang="no" xml:id="id6"/> + <omicron content="attribute value" xml:lang="no-nb"> + <sigma token="this.nodeValue" xml:id="id7"> + <green>This text must be green</green> + </sigma> + </omicron> + </delta> + </upsilon> + </omicron> + </upsilon> + </phi> + </epsilon> + </sigma> + </delta> + </phi> + </xi> + </tree> + </test> + <test> + <xpath>//theta[contains(@string,"ontent")][@xml:lang="nb"]//iota[contains(@token,"t-v")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@xml:id="id1"]//kappa[@xml:id="id2"][not(preceding-sibling::*)]//beta[@attribute="this-is-att-value"][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[starts-with(concat(@true,"-"),"solid 1px green-")][@xml:id="id4"][following-sibling::omega[@and="attribute"][@xml:lang="no"][not(following-sibling::*)]//pi[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]</xpath> + <tree> + <theta string="content" xml:lang="nb"> + <iota token="this-is-att-value" xml:lang="en"> + <theta xml:id="id1"> + <kappa xml:id="id2"> + <beta attribute="this-is-att-value" xml:lang="en" xml:id="id3"> + <zeta true="solid 1px green" xml:id="id4"/> + <omega and="attribute" xml:lang="no"> + <pi xml:lang="en"> + <green>This text must be green</green> + </pi> + </omega> + </beta> + </kappa> + </theta> + </iota> + </theta> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en-US"]//alpha[@xml:id="id1"][not(preceding-sibling::*)]/delta[@xml:id="id2"][following-sibling::alpha[starts-with(concat(@src,"-"),"this-")][@xml:lang="en"][@xml:id="id3"][following-sibling::*[position()=3]][following-sibling::beta[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::*[preceding-sibling::*[position() = 3]][following-sibling::epsilon[starts-with(concat(@attribute,"-"),"solid 1px green-")][not(following-sibling::*)]//sigma[@class][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:id="id5"][preceding-sibling::*[position() = 1]]/kappa[@delete="123456789"][@xml:lang="no"][following-sibling::epsilon[@xml:id="id6"][not(following-sibling::*)]/kappa[@xml:id="id7"][not(following-sibling::*)]/sigma[contains(@attr,"12345")][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[preceding-sibling::*[position() = 1]]/eta[@false][@xml:lang="en-GB"][@xml:id="id8"][not(child::node())][following-sibling::xi[starts-with(concat(@and,"-"),"another attribute value-")][@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)]//*[contains(concat(@title,"$"),"tribute value$")][not(preceding-sibling::*)][not(following-sibling::any)][following-sibling::omega[@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::kappa[@class="attribute"][@xml:id="id11"][preceding-sibling::*[position() = 2]][following-sibling::psi[@true="another attribute value"][@xml:id="id12"][not(child::node())][following-sibling::nu[contains(concat(@src,"$"),"false$")][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::psi[@xml:id="id13"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omega xml:lang="en-US"> + <alpha xml:id="id1"> + <delta xml:id="id2"/> + <alpha src="this-is-att-value" xml:lang="en" xml:id="id3"/> + <beta xml:lang="nb"/> + <any/> + <epsilon attribute="solid 1px green"> + <sigma class="this-is-att-value" xml:id="id4"/> + <beta xml:id="id5"> + <kappa delete="123456789" xml:lang="no"/> + <epsilon xml:id="id6"> + <kappa xml:id="id7"> + <sigma attr="123456789"/> + <rho> + <eta false="solid 1px green" xml:lang="en-GB" xml:id="id8"/> + <xi and="another attribute value" xml:lang="en" xml:id="id9"> + <any title="another attribute value"/> + <omega xml:id="id10"/> + <kappa class="attribute" xml:id="id11"/> + <psi true="another attribute value" xml:id="id12"/> + <nu src="false"/> + <psi xml:id="id13"> + <green>This text must be green</green> + </psi> + </xi> + </rho> + </kappa> + </epsilon> + </beta> + </epsilon> + </alpha> + </omega> + </tree> + </test> + <test> + <xpath>//theta[@attribute][@xml:id="id1"]//nu[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 1]]//*[starts-with(concat(@attr,"-"),"_blank-")][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]/omicron[contains(@delete,"ther attribute value")][@xml:id="id3"]/pi[@xml:lang="no"]//kappa[@xml:lang="en"][@xml:id="id4"]//delta[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[not(following-sibling::*)][not(following-sibling::iota)]/eta[starts-with(concat(@delete,"-"),"solid 1px green-")][@xml:lang="nb"][not(child::node())][following-sibling::*[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[starts-with(concat(@attrib,"-"),"solid 1px green-")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[not(preceding-sibling::*)][not(following-sibling::*)]/lambda[contains(@or,"alse")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]]]</xpath> + <tree> + <theta attribute="_blank" xml:id="id1"> + <nu xml:lang="no"/> + <phi> + <any attr="_blank" xml:lang="nb" xml:id="id2"> + <omicron delete="another attribute value" xml:id="id3"> + <pi xml:lang="no"> + <kappa xml:lang="en" xml:id="id4"> + <delta xml:lang="no" xml:id="id5"> + <iota> + <eta delete="solid 1px green" xml:lang="nb"/> + <any xml:lang="en-US" xml:id="id6"> + <epsilon attrib="solid 1px green" xml:lang="en"> + <mu> + <lambda or="false" xml:lang="en-US"> + <green>This text must be green</green> + </lambda> + </mu> + </epsilon> + </any> + </iota> + </delta> + </kappa> + </pi> + </omicron> + </any> + </phi> + </theta> + </tree> + </test> + <test> + <xpath>//iota[contains(@data,"ank")][@xml:id="id1"]//*[@xml:id="id2"][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[following-sibling::*[@title][@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]//psi[@xml:id="id4"]//chi[@xml:id="id5"][not(child::node())][following-sibling::kappa[contains(@desciption,"%")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]]//psi[@class][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="no"]//omicron[starts-with(@abort,"1")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[@name="false"][@xml:lang="no"][not(preceding-sibling::*)]//zeta[@content][@xml:lang="nb"]/psi[@att="content"][@xml:lang="en"][@xml:id="id9"][following-sibling::rho[@xml:id="id10"][not(following-sibling::*)]/kappa[@xml:lang="en-US"]//lambda[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::pi[starts-with(@string,"at")][@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 1]]/kappa[starts-with(@number,"th")][@xml:id="id12"]//mu[@xml:id="id13"][not(preceding-sibling::mu)][following-sibling::kappa[not(preceding-sibling::kappa)]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <iota data="_blank" xml:id="id1"> + <any xml:id="id2"/> + <beta/> + <iota/> + <any title="content" xml:lang="en-US" xml:id="id3"> + <psi xml:id="id4"> + <chi xml:id="id5"/> + <kappa desciption="100%"/> + <zeta xml:lang="en-GB" xml:id="id6"> + <psi class="100%" xml:id="id7"> + <mu xml:lang="no"> + <omicron abort="100%" xml:lang="en"/> + <lambda xml:lang="nb" xml:id="id8"> + <pi name="false" xml:lang="no"> + <zeta content="content" xml:lang="nb"> + <psi att="content" xml:lang="en" xml:id="id9"/> + <rho xml:id="id10"> + <kappa xml:lang="en-US"> + <lambda content="attribute" xml:lang="no-nb"/> + <pi string="attribute" xml:lang="no" xml:id="id11"> + <kappa number="this.nodeValue" xml:id="id12"> + <mu xml:id="id13"/> + <kappa> + <green>This text must be green</green> + </kappa> + </kappa> + </pi> + </kappa> + </rho> + </zeta> + </pi> + </lambda> + </mu> + </psi> + </zeta> + </psi> + </any> + </iota> + </tree> + </test> + <test> + <xpath>//pi[@xml:id="id1"]//lambda[@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::rho[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[@object="this.nodeValue"][@xml:lang="en-GB"][not(following-sibling::*)]/gamma[contains(concat(@delete,"$"),"tribute-value$")][@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]/mu[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::sigma[@and][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:lang="en-US"][following-sibling::phi[@attrib][@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 3]]//alpha/*[starts-with(@and,"this-is-at")][@xml:id="id7"][following-sibling::eta[@xml:id="id8"]//epsilon[contains(@token,"gree")][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@false][@xml:lang="no-nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]]//sigma[@xml:lang="en-GB"][not(following-sibling::*)]//gamma[@xml:lang="en-GB"][not(child::node())][following-sibling::theta[starts-with(concat(@attrib,"-"),"solid 1px green-")][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@xml:id="id12"][preceding-sibling::*[position() = 2]]//xi[@xml:lang="en-US"][not(preceding-sibling::*)]/omega[starts-with(@token,"this.nodeV")][not(child::node())][following-sibling::lambda[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[starts-with(concat(@delete,"-"),"another attribute value-")][@xml:lang="en-US"][not(following-sibling::*)]//epsilon[position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <pi xml:id="id1"> + <lambda xml:lang="en-GB" xml:id="id2"/> + <rho xml:id="id3"> + <psi object="this.nodeValue" xml:lang="en-GB"> + <gamma delete="attribute-value" xml:lang="no-nb" xml:id="id4"> + <mu xml:id="id5"/> + <sigma and="false"/> + <beta xml:lang="en-US"/> + <phi attrib="this.nodeValue" xml:lang="no-nb" xml:id="id6"> + <alpha> + <any and="this-is-att-value" xml:id="id7"/> + <eta xml:id="id8"> + <epsilon token="solid 1px green" xml:id="id9"/> + <delta false="another attribute value" xml:lang="no-nb" xml:id="id10"> + <sigma xml:lang="en-GB"> + <gamma xml:lang="en-GB"/> + <theta attrib="solid 1px green" xml:id="id11"/> + <kappa xml:id="id12"> + <xi xml:lang="en-US"> + <omega token="this.nodeValue"/> + <lambda/> + <chi/> + <zeta delete="another attribute value" xml:lang="en-US"> + <epsilon> + <green>This text must be green</green> + </epsilon> + </zeta> + </xi> + </kappa> + </sigma> + </delta> + </eta> + </alpha> + </phi> + </gamma> + </psi> + </rho> + </pi> + </tree> + </test> + <test> + <xpath>//omicron[starts-with(@att,"attribute value")]//mu[@xml:lang="en-GB"][@xml:id="id1"][not(child::node())][following-sibling::beta//sigma[@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::delta[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[starts-with(@or,"tru")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::mu[starts-with(concat(@attrib,"-"),"attribute value-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 4]][following-sibling::rho[@att][@xml:lang="en-GB"][following-sibling::iota[@name][not(following-sibling::*)]//lambda[@desciption][@xml:id="id4"][not(preceding-sibling::*)]/tau[contains(@false,"0%")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="en-US"][not(child::node())][following-sibling::epsilon/chi[@token][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::kappa[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="no"]/lambda[@attrib]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <omicron att="attribute value"> + <mu xml:lang="en-GB" xml:id="id1"/> + <beta> + <sigma xml:lang="en-US" xml:id="id2"/> + <delta xml:lang="no" xml:id="id3"/> + <kappa or="true" xml:lang="en-GB"/> + <mu attrib="attribute value" xml:lang="no-nb"/> + <zeta/> + <rho att="false" xml:lang="en-GB"/> + <iota name="_blank"> + <lambda desciption="another attribute value" xml:id="id4"> + <tau false="100%" xml:lang="en-GB"/> + <epsilon xml:lang="en-US"/> + <epsilon> + <chi token="content" xml:lang="en-US" xml:id="id5"/> + <kappa xml:lang="no" xml:id="id6"/> + <theta xml:lang="no"> + <lambda attrib="false"> + <green>This text must be green</green> + </lambda> + </theta> + </epsilon> + </lambda> + </iota> + </beta> + </omicron> + </tree> + </test> + <test> + <xpath>//zeta[@xml:lang="no"]/pi[not(following-sibling::*)]//chi[@attrib][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::sigma[@attribute][@xml:lang="en-US"][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[starts-with(concat(@attr,"-"),"content-")][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:id="id3"][preceding-sibling::*[position() = 3]]//mu[@xml:id="id4"][not(child::node())][following-sibling::theta[@number="attribute-value"][@xml:id="id5"][following-sibling::rho[starts-with(@number,"solid 1px gre")][@xml:id="id6"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <zeta xml:lang="no"> + <pi> + <chi attrib="attribute value" xml:lang="en-US" xml:id="id1"/> + <sigma attribute="attribute value" xml:lang="en-US" xml:id="id2"/> + <eta attr="content"/> + <rho xml:id="id3"> + <mu xml:id="id4"/> + <theta number="attribute-value" xml:id="id5"/> + <rho number="solid 1px green" xml:id="id6"> + <green>This text must be green</green> + </rho> + </rho> + </pi> + </zeta> + </tree> + </test> + <test> + <xpath>//alpha[@false][@xml:lang="no-nb"]//theta[@false][@xml:id="id1"][following-sibling::delta[preceding-sibling::*[position() = 1]][following-sibling::mu[starts-with(@and,"this.n")][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/kappa[@xml:lang="en"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::psi[starts-with(concat(@class,"-"),"attribute value-")][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[following-sibling::theta[starts-with(concat(@delete,"-"),"this-")][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::sigma[@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@number][@xml:lang="no-nb"][preceding-sibling::*[position() = 3]]//theta[@xml:lang="no"][@xml:id="id7"]//nu[@attr][not(child::node())][following-sibling::omega[starts-with(@delete,"cont")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[@xml:lang="en"][@xml:id="id8"]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <alpha false="123456789" xml:lang="no-nb"> + <theta false="true" xml:id="id1"/> + <delta/> + <mu and="this.nodeValue" xml:id="id2"> + <kappa xml:lang="en" xml:id="id3"/> + <psi class="attribute value" xml:id="id4"> + <lambda/> + <theta delete="this-is-att-value" xml:id="id5"/> + <sigma xml:id="id6"/> + <omicron number="attribute value" xml:lang="no-nb"> + <theta xml:lang="no" xml:id="id7"> + <nu attr="attribute"/> + <omega delete="content" xml:lang="en"/> + <alpha xml:lang="en" xml:id="id8"> + <green>This text must be green</green> + </alpha> + </theta> + </omicron> + </psi> + </mu> + </alpha> + </tree> + </test> + <test> + <xpath>//xi//gamma[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::kappa[@xml:id="id1"][following-sibling::rho[starts-with(@title,"100")][following-sibling::lambda[starts-with(concat(@true,"-"),"another attribute value-")][@xml:lang="en-GB"][@xml:id="id2"]//gamma[@token][not(child::node())][following-sibling::psi[starts-with(concat(@insert,"-"),"100%-")][@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]/tau[starts-with(concat(@number,"-"),"attribute-")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::tau[@xml:id="id5"][following-sibling::*[position()=2]][following-sibling::upsilon[@class][@xml:lang="en-US"][following-sibling::upsilon[not(following-sibling::*)]//sigma[starts-with(concat(@or,"-"),"true-")][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@class][@xml:id="id7"][not(following-sibling::*)]//omega[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[contains(concat(@false,"$"),"ue$")][@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)]//beta[starts-with(@content,"fa")][@xml:id="id9"][not(following-sibling::*)]//upsilon[contains(@att,"ut")][not(preceding-sibling::*)]//beta[@name="false"][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::pi[@xml:lang="no"][@xml:id="id11"][position() = 1]][position() = 1]][position() = 1]]]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi> + <gamma xml:lang="no-nb"/> + <kappa xml:id="id1"/> + <rho title="100%"/> + <lambda true="another attribute value" xml:lang="en-GB" xml:id="id2"> + <gamma token="this.nodeValue"/> + <psi insert="100%" xml:lang="en-GB" xml:id="id3"> + <tau number="attribute" xml:id="id4"/> + <tau xml:id="id5"/> + <upsilon class="solid 1px green" xml:lang="en-US"/> + <upsilon> + <sigma or="true" xml:lang="no-nb" xml:id="id6"/> + <nu class="true" xml:id="id7"> + <omega xml:lang="nb"> + <rho false="true" xml:lang="no-nb" xml:id="id8"> + <beta content="false" xml:id="id9"> + <upsilon att="attribute-value"> + <beta name="false" xml:lang="no"/> + <delta xml:id="id10"/> + <pi xml:lang="no" xml:id="id11"> + <green>This text must be green</green> + </pi> + </upsilon> + </beta> + </rho> + </omega> + </nu> + </upsilon> + </psi> + </lambda> + </xi> + </tree> + </test> + <test> + <xpath>//chi/delta[@object="123456789"][@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]//pi[contains(concat(@attrib,"$"),"e$")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[contains(@false,"e")][@xml:id="id3"][not(following-sibling::*)]//chi[@or][not(following-sibling::*)]/zeta[starts-with(@data,"t")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::gamma[starts-with(concat(@number,"-"),"solid 1px green-")][not(following-sibling::*)]/chi[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[not(following-sibling::*)]/rho[@att="content"][@xml:id="id6"][not(following-sibling::*)]/sigma[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[starts-with(@attribute,"this-is")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@object][following-sibling::*[position()=1]][following-sibling::chi[@class][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//psi[@class][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@src][@xml:id="id8"]/omicron[@attrib][@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][position() = 1]]][position() = 1]]]</xpath> + <tree> + <chi> + <delta object="123456789" xml:lang="en-GB" xml:id="id1"> + <pi attrib="true" xml:id="id2"> + <delta false="attribute-value" xml:id="id3"> + <chi or="content"> + <zeta data="true" xml:id="id4"/> + <gamma number="solid 1px green"> + <chi xml:id="id5"> + <beta> + <rho att="content" xml:id="id6"> + <sigma xml:lang="nb"> + <omicron attribute="this-is-att-value" xml:lang="no"/> + <xi object="another attribute value"/> + <chi class="false" xml:lang="en-US" xml:id="id7"> + <psi class="solid 1px green"/> + <upsilon src="another attribute value" xml:id="id8"> + <omicron attrib="content" xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </omicron> + </upsilon> + </chi> + </sigma> + </rho> + </beta> + </chi> + </gamma> + </chi> + </delta> + </pi> + </delta> + </chi> + </tree> + </test> + <test> + <xpath>//theta[@data][@xml:id="id1"]//gamma[@attrib="solid 1px green"][not(preceding-sibling::*)]//psi[@xml:lang="no"][not(preceding-sibling::*)]/psi[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@delete][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[@attribute="attribute-value"][@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <theta data="solid 1px green" xml:id="id1"> + <gamma attrib="solid 1px green"> + <psi xml:lang="no"> + <psi xml:lang="nb" xml:id="id2"> + <xi delete="attribute-value" xml:lang="en-GB"/> + <kappa attribute="attribute-value" xml:lang="en-US" xml:id="id3"/> + <nu xml:id="id4"> + <green>This text must be green</green> + </nu> + </psi> + </psi> + </gamma> + </theta> + </tree> + </test> + <test> + <xpath>//phi[starts-with(concat(@number,"-"),"this.nodeValue-")][@xml:lang="en-GB"][@xml:id="id1"]//epsilon[@xml:id="id2"][not(following-sibling::*)]/sigma[@xml:lang="no"][following-sibling::sigma[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::xi[@attrib][@xml:id="id4"][not(following-sibling::*)]//gamma[@xml:lang="no-nb"][@xml:id="id5"]/zeta[@xml:lang="en-US"][not(preceding-sibling::*)]//zeta[contains(@abort,"lue")][@xml:id="id6"][not(child::node())][following-sibling::nu[@delete][@xml:lang="no"][following-sibling::sigma[starts-with(@att,"conte")][@xml:id="id7"][not(following-sibling::*)]//omicron[starts-with(concat(@src,"-"),"attribute value-")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@data][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@xml:lang="no-nb"]//pi[@xml:id="id8"][not(following-sibling::*)]//beta[@attribute][@xml:lang="no"][following-sibling::*[position()=3]][not(child::node())][following-sibling::xi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::omicron[starts-with(@name,"anot")][@xml:lang="en-US"][following-sibling::*[position()=1]][not(following-sibling::omicron)][following-sibling::chi[@name][not(following-sibling::*)]//kappa[@xml:lang="nb"][@xml:id="id9"][not(following-sibling::*)]/xi[starts-with(concat(@content,"-"),"attribute-")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi number="this.nodeValue" xml:lang="en-GB" xml:id="id1"> + <epsilon xml:id="id2"> + <sigma xml:lang="no"/> + <sigma xml:id="id3"/> + <nu attr="attribute" xml:lang="no"/> + <xi attrib="123456789" xml:id="id4"> + <gamma xml:lang="no-nb" xml:id="id5"> + <zeta xml:lang="en-US"> + <zeta abort="this-is-att-value" xml:id="id6"/> + <nu delete="this-is-att-value" xml:lang="no"/> + <sigma att="content" xml:id="id7"> + <omicron src="attribute value"/> + <alpha data="this-is-att-value"> + <xi xml:lang="no-nb"> + <pi xml:id="id8"> + <beta attribute="solid 1px green" xml:lang="no"/> + <xi xml:lang="no-nb"/> + <omicron name="another attribute value" xml:lang="en-US"/> + <chi name="this.nodeValue"> + <kappa xml:lang="nb" xml:id="id9"> + <xi content="attribute"> + <green>This text must be green</green> + </xi> + </kappa> + </chi> + </pi> + </xi> + </alpha> + </sigma> + </zeta> + </gamma> + </xi> + </epsilon> + </phi> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@abort,"attribut")]//tau[contains(@or,"bute ")][@xml:id="id1"]/eta[not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:lang="en-US"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::chi[contains(@attribute,"e")][@xml:lang="no"][not(following-sibling::*)]//zeta[contains(@object,"ntent")][@xml:lang="en-GB"]/epsilon[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[contains(concat(@src,"$"),"se$")][@xml:lang="en-US"][not(preceding-sibling::*)]/tau[@xml:id="id3"]//theta[starts-with(@src,"fa")][@xml:id="id4"][following-sibling::psi[contains(@content,"lue")][not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <omega abort="attribute"> + <tau or="attribute value" xml:id="id1"> + <eta> + <iota xml:lang="en-US" xml:id="id2"/> + <chi attribute="true" xml:lang="no"> + <zeta object="content" xml:lang="en-GB"> + <epsilon xml:lang="no-nb"> + <epsilon src="false" xml:lang="en-US"> + <tau xml:id="id3"> + <theta src="false" xml:id="id4"/> + <psi content="this.nodeValue"> + <green>This text must be green</green> + </psi> + </tau> + </epsilon> + </epsilon> + </zeta> + </chi> + </eta> + </tau> + </omega> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no-nb"]//zeta[starts-with(concat(@attr,"-"),"solid 1px green-")][@xml:lang="no"][not(following-sibling::*)]/alpha[contains(@attrib,"alue")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//delta[contains(@object,"n")][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::eta[@xml:id="id4"][preceding-sibling::*[position() = 1]]/alpha[@object][@xml:id="id5"][not(preceding-sibling::*)]//chi[starts-with(concat(@delete,"-"),"this-")][@xml:lang="no-nb"][@xml:id="id6"][following-sibling::eta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[starts-with(@content,"fa")][@xml:lang="en"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::kappa[@xml:lang="en-US"][@xml:id="id8"]/chi[@xml:id="id9"][not(child::node())][following-sibling::alpha[not(child::node())][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id10"][not(following-sibling::kappa)][not(child::node())][following-sibling::delta[@attr][@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <kappa xml:lang="no-nb"> + <zeta attr="solid 1px green" xml:lang="no"> + <alpha attrib="this-is-att-value" xml:lang="en-US" xml:id="id1"/> + <epsilon xml:lang="no" xml:id="id2"> + <delta object="another attribute value" xml:lang="en-GB" xml:id="id3"/> + <eta xml:id="id4"> + <alpha object="attribute-value" xml:id="id5"> + <chi delete="this-is-att-value" xml:lang="no-nb" xml:id="id6"/> + <eta/> + <chi content="false" xml:lang="en" xml:id="id7"/> + <kappa xml:lang="en-US" xml:id="id8"> + <chi xml:id="id9"/> + <alpha/> + <kappa xml:lang="en-GB" xml:id="id10"/> + <delta attr="100%" xml:lang="nb"> + <green>This text must be green</green> + </delta> + </kappa> + </alpha> + </eta> + </epsilon> + </zeta> + </kappa> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="en-US"][@xml:id="id1"]//xi[@object="true"][@xml:id="id2"][not(preceding-sibling::*)]/alpha[contains(@false,"fa")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[contains(@class,"value")][@xml:lang="no"][preceding-sibling::*[position() = 1]]/theta[starts-with(@number,"12345678")][@xml:lang="en-US"][following-sibling::upsilon[contains(@object,"e")][@xml:id="id3"]//theta[not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:id="id4"][not(following-sibling::*)]//upsilon[starts-with(concat(@insert,"-"),"this.nodeValue-")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::tau[contains(@content,"is-is-att")][@xml:id="id5"]]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau xml:lang="en-US" xml:id="id1"> + <xi object="true" xml:id="id2"> + <alpha false="false" xml:lang="no-nb"/> + <psi class="this-is-att-value" xml:lang="no"> + <theta number="123456789" xml:lang="en-US"/> + <upsilon object="false" xml:id="id3"> + <theta/> + <psi xml:id="id4"> + <upsilon insert="this.nodeValue" xml:lang="no"/> + <tau content="this-is-att-value" xml:id="id5"> + <green>This text must be green</green> + </tau> + </psi> + </upsilon> + </psi> + </xi> + </tau> + </tree> + </test> + <test> + <xpath>//alpha//nu[starts-with(concat(@string,"-"),"_blank-")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::nu)]/rho[starts-with(@content,"conten")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/pi[@data][@xml:lang="nb"][not(child::node())][following-sibling::theta[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]//beta[@xml:id="id5"][following-sibling::gamma[contains(concat(@and,"$"),"nt$")][@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]/nu[@xml:lang="en"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha> + <nu string="_blank" xml:id="id1"> + <rho content="content" xml:id="id2"/> + <sigma attr="attribute" xml:lang="en" xml:id="id3"> + <pi data="100%" xml:lang="nb"/> + <theta xml:lang="en-US" xml:id="id4"> + <beta xml:id="id5"/> + <gamma and="content" xml:lang="en-US" xml:id="id6"> + <nu xml:lang="en"> + <green>This text must be green</green> + </nu> + </gamma> + </theta> + </sigma> + </nu> + </alpha> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="en"]//sigma[@or][@xml:lang="no"][not(following-sibling::*)]//delta[contains(concat(@data,"$"),"tent$")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::pi[starts-with(concat(@false,"-"),"attribute-")][following-sibling::*[position()=2]][following-sibling::omega[preceding-sibling::*[position() = 3]][following-sibling::epsilon[contains(concat(@attrib,"$"),"this.nodeValue$")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//rho[@number="100%"][not(preceding-sibling::*)][following-sibling::mu[@attr][@xml:id="id4"][preceding-sibling::*[position() = 1]]//iota[@xml:id="id5"][not(following-sibling::*)]//epsilon[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:lang="nb"][not(following-sibling::*)]/phi[@attr][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <eta xml:lang="en"> + <sigma or="_blank" xml:lang="no"> + <delta data="content" xml:id="id1"/> + <chi xml:id="id2"/> + <pi false="attribute-value"/> + <omega/> + <epsilon attrib="this.nodeValue" xml:lang="no" xml:id="id3"> + <rho number="100%"/> + <mu attr="123456789" xml:id="id4"> + <iota xml:id="id5"> + <epsilon xml:lang="en"> + <epsilon xml:lang="nb"> + <phi attr="another attribute value" xml:id="id6"> + <green>This text must be green</green> + </phi> + </epsilon> + </epsilon> + </iota> + </mu> + </epsilon> + </sigma> + </eta> + </tree> + </test> + <test> + <xpath>//lambda[@src="solid 1px green"][@xml:id="id1"]//eta[@xml:id="id2"][not(preceding-sibling::*)]//omega[@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[contains(concat(@or,"$"),"_blank$")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::sigma[@xml:id="id4"][preceding-sibling::*[position() = 2]]/zeta[@attrib][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda src="solid 1px green" xml:id="id1"> + <eta xml:id="id2"> + <omega xml:id="id3"/> + <xi or="_blank" xml:lang="no"/> + <sigma xml:id="id4"> + <zeta attrib="solid 1px green"> + <green>This text must be green</green> + </zeta> + </sigma> + </eta> + </lambda> + </tree> + </test> + <test> + <xpath>//sigma//kappa[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)]//phi[contains(concat(@insert,"$"),"lid 1px green$")][@xml:lang="no-nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::beta[@or][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::omicron[@attrib="content"][@xml:id="id4"][following-sibling::nu//gamma[@xml:lang="en-US"][not(preceding-sibling::*)]//kappa[starts-with(@data,"attribut")][@xml:lang="no"][not(following-sibling::*)][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <sigma> + <kappa xml:lang="en-US" xml:id="id1"> + <phi insert="solid 1px green" xml:lang="no-nb"/> + <theta xml:lang="en" xml:id="id2"/> + <theta> + <nu xml:lang="en"/> + <beta or="100%" xml:lang="en" xml:id="id3"/> + <omicron attrib="content" xml:id="id4"/> + <nu> + <gamma xml:lang="en-US"> + <kappa data="attribute" xml:lang="no"> + <green>This text must be green</green> + </kappa> + </gamma> + </nu> + </theta> + </kappa> + </sigma> + </tree> + </test> + <test> + <xpath>//upsilon[@and="another attribute value"][@xml:lang="no"][@xml:id="id1"]/lambda[@src][@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]//xi[@string][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[contains(concat(@class,"$"),"olid 1px green$")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=5]][following-sibling::upsilon[@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::kappa[@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::upsilon[@xml:lang="en"][@xml:id="id7"][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@xml:lang="no-nb"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//omega[contains(@attribute,"e")][@xml:lang="en-GB"]/upsilon[@xml:id="id8"][not(preceding-sibling::*)]/nu[starts-with(concat(@attrib,"-"),"solid 1px green-")][@xml:lang="no"][following-sibling::iota//sigma[@xml:id="id9"][following-sibling::nu[@xml:lang="en-GB"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <upsilon and="another attribute value" xml:lang="no" xml:id="id1"> + <lambda src="attribute-value" xml:lang="en-US" xml:id="id2"> + <xi string="100%" xml:lang="en-US" xml:id="id3"> + <mu class="solid 1px green" xml:lang="en-GB" xml:id="id4"/> + <upsilon xml:id="id5"/> + <kappa xml:lang="en" xml:id="id6"/> + <upsilon xml:lang="en" xml:id="id7"/> + <any/> + <any xml:lang="no-nb"> + <omega attribute="true" xml:lang="en-GB"> + <upsilon xml:id="id8"> + <nu attrib="solid 1px green" xml:lang="no"/> + <iota> + <sigma xml:id="id9"/> + <nu xml:lang="en-GB" xml:id="id10"> + <green>This text must be green</green> + </nu> + </iota> + </upsilon> + </omega> + </any> + </xi> + </lambda> + </upsilon> + </tree> + </test> + <test> + <xpath>//eta//epsilon[@and="123456789"][@xml:id="id1"]/chi[@delete][@xml:id="id2"][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[starts-with(concat(@attrib,"-"),"123456789-")][not(preceding-sibling::*)]/iota[contains(concat(@delete,"$"),"e$")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@xml:id="id5"][preceding-sibling::*[position() = 1]]//eta[@name][@xml:id="id6"][not(preceding-sibling::*)]//zeta[starts-with(concat(@desciption,"-"),"_blank-")][@xml:id="id7"]//gamma[@attrib][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@and="true"][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]]//phi/chi[starts-with(@content,"a")][@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@attrib][@xml:id="id10"][following-sibling::upsilon[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/nu[contains(@token,"e ")][@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@object="solid 1px green"][@xml:lang="en"][@xml:id="id12"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[contains(@string,"ute value")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/*[@xml:lang="en-US"][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <eta> + <epsilon and="123456789" xml:id="id1"> + <chi delete="attribute-value" xml:id="id2"/> + <sigma> + <delta xml:lang="no"> + <gamma attrib="123456789"> + <iota delete="false" xml:id="id3"> + <rho xml:lang="en-GB" xml:id="id4"/> + <any xml:id="id5"> + <eta name="content" xml:id="id6"> + <zeta desciption="_blank" xml:id="id7"> + <gamma attrib="content"> + <omicron and="true"/> + <omicron xml:lang="en-GB" xml:id="id8"> + <phi> + <chi content="attribute" xml:lang="en-GB" xml:id="id9"/> + <gamma attrib="this.nodeValue" xml:id="id10"/> + <upsilon xml:lang="no-nb"> + <nu token="attribute value" xml:lang="nb" xml:id="id11"/> + <omicron object="solid 1px green" xml:lang="en" xml:id="id12"/> + <upsilon string="another attribute value" xml:lang="no"> + <any xml:lang="en-US"> + <green>This text must be green</green> + </any> + </upsilon> + </upsilon> + </phi> + </omicron> + </gamma> + </zeta> + </eta> + </any> + </iota> + </gamma> + </delta> + </sigma> + </epsilon> + </eta> + </tree> + </test> + <test> + <xpath>//nu[@data]//beta[starts-with(@title,"attribute v")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::iota[following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[@att="attribute value"][following-sibling::iota[@attribute][not(following-sibling::*)]/upsilon[starts-with(@attr,"t")][@xml:id="id1"][not(preceding-sibling::*)]//theta[contains(@title,"10")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[starts-with(concat(@title,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]/theta[contains(concat(@abort,"$"),"e$")][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@true][not(child::node())][following-sibling::beta[contains(@delete,"ue")][@xml:lang="no"]//lambda[@xml:id="id4"][not(following-sibling::*)]/xi[@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]/lambda[@true][not(following-sibling::*)]/pi[not(following-sibling::pi)]//sigma[starts-with(@object,"attribute valu")][@xml:lang="no-nb"][not(preceding-sibling::*)]/tau[@xml:lang="no-nb"][not(following-sibling::*)]//psi[@true="true"][@xml:lang="en"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu data="attribute-value"> + <beta title="attribute value" xml:lang="no-nb"/> + <iota/> + <kappa att="attribute value"/> + <iota attribute="true"> + <upsilon attr="this.nodeValue" xml:id="id1"> + <theta title="100%" xml:lang="en" xml:id="id2"/> + <mu title="attribute" xml:lang="en-GB" xml:id="id3"> + <theta abort="attribute value"> + <nu true="123456789"/> + <beta delete="this-is-att-value" xml:lang="no"> + <lambda xml:id="id4"> + <xi xml:lang="en-GB" xml:id="id5"> + <lambda true="_blank"> + <pi> + <sigma object="attribute value" xml:lang="no-nb"> + <tau xml:lang="no-nb"> + <psi true="true" xml:lang="en"> + <green>This text must be green</green> + </psi> + </tau> + </sigma> + </pi> + </lambda> + </xi> + </lambda> + </beta> + </theta> + </mu> + </upsilon> + </iota> + </nu> + </tree> + </test> + <test> + <xpath>//nu[@title="this-is-att-value"][@xml:id="id1"]//beta[@abort="123456789"][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::phi[@xml:lang="no"]/upsilon[contains(@class,"fal")][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]//gamma[@xml:lang="en-US"][not(following-sibling::*)]/iota[@xml:id="id3"][not(child::node())][following-sibling::beta[@class][@xml:lang="nb"][following-sibling::theta[not(following-sibling::*)]/theta[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]//psi[@xml:id="id5"]/upsilon[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::zeta[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::phi[starts-with(@true,"solid ")][@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[starts-with(concat(@src,"-"),"attribute value-")][not(following-sibling::*)]//zeta[contains(concat(@insert,"$"),"e$")][not(preceding-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <nu title="this-is-att-value" xml:id="id1"> + <beta abort="123456789" xml:lang="no-nb"/> + <phi xml:lang="no"> + <upsilon class="false" xml:lang="nb" xml:id="id2"> + <gamma xml:lang="en-US"> + <iota xml:id="id3"/> + <beta class="this-is-att-value" xml:lang="nb"/> + <theta> + <theta xml:lang="no" xml:id="id4"> + <psi xml:id="id5"> + <upsilon/> + <zeta xml:lang="no" xml:id="id6"/> + <phi true="solid 1px green" xml:lang="nb" xml:id="id7"/> + <omicron src="attribute value"> + <zeta insert="true"> + <green>This text must be green</green> + </zeta> + </omicron> + </psi> + </theta> + </theta> + </gamma> + </upsilon> + </phi> + </nu> + </tree> + </test> + <test> + <xpath>//gamma[contains(concat(@delete,"$"),"%$")][@xml:id="id1"]//alpha[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::delta[contains(concat(@attribute,"$"),"attribute$")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//tau[contains(concat(@string,"$"),"alue$")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@and][@xml:id="id5"][not(preceding-sibling::*)]/phi[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[contains(concat(@data,"$"),"e$")][not(child::node())][following-sibling::upsilon[starts-with(@title,"attribute va")][@xml:lang="nb"][not(following-sibling::*)]//nu[starts-with(concat(@or,"-"),"false-")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 2]]/epsilon[contains(concat(@src,"$"),"attribute$")][@xml:id="id8"][following-sibling::pi[contains(concat(@src,"$"),"alue$")][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::gamma[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::epsilon[@xml:lang="en-US"][preceding-sibling::*[position() = 4]]//delta[starts-with(concat(@content,"-"),"100%-")][@xml:lang="en"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::omega[contains(concat(@false,"$"),"e$")][@xml:id="id12"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="en-US"][@xml:id="id13"][preceding-sibling::*[position() = 2]][following-sibling::gamma[contains(concat(@number,"$"),"789$")][@xml:lang="nb"][@xml:id="id14"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//kappa[starts-with(@src,"attribute va")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[contains(concat(@att,"$"),"eValue$")][@xml:id="id15"][preceding-sibling::*[position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <gamma delete="100%" xml:id="id1"> + <alpha xml:lang="no-nb" xml:id="id2"/> + <delta attribute="attribute" xml:lang="no" xml:id="id3"> + <tau string="this-is-att-value" xml:lang="no" xml:id="id4"> + <psi and="this-is-att-value" xml:id="id5"> + <phi xml:id="id6"/> + <nu data="true"/> + <upsilon title="attribute value" xml:lang="nb"> + <nu or="false" xml:lang="no" xml:id="id7"/> + <beta/> + <psi> + <epsilon src="attribute" xml:id="id8"/> + <pi src="this-is-att-value" xml:id="id9"/> + <eta xml:lang="no" xml:id="id10"/> + <gamma xml:lang="en-GB"/> + <epsilon xml:lang="en-US"> + <delta content="100%" xml:lang="en" xml:id="id11"/> + <omega false="this-is-att-value" xml:id="id12"/> + <xi xml:lang="en-US" xml:id="id13"/> + <gamma number="123456789" xml:lang="nb" xml:id="id14"> + <kappa src="attribute value" xml:lang="en-US"/> + <phi att="this.nodeValue" xml:id="id15"> + <green>This text must be green</green> + </phi> + </gamma> + </epsilon> + </psi> + </upsilon> + </psi> + </tau> + </delta> + </gamma> + </tree> + </test> + <test> + <xpath>//lambda[starts-with(concat(@att,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id1"]//rho[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[contains(@abort,"e")][not(following-sibling::*)]//delta[starts-with(concat(@desciption,"-"),"this.nodeValue-")][not(preceding-sibling::*)]/phi[@token][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@class,"$"),"789$")][@xml:id="id3"][not(child::node())][following-sibling::pi[contains(concat(@class,"$"),"e$")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/kappa[not(child::node())][following-sibling::eta[@xml:id="id4"][preceding-sibling::*[position() = 1]]/psi[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[contains(concat(@class,"$"),"e$")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[not(preceding-sibling::*)][not(child::node())][following-sibling::nu[contains(concat(@attribute,"$"),"tribute-value$")][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[@xml:id="id7"]/gamma[contains(concat(@att,"$"),"6789$")][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@true="100%"][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)]/omicron[not(preceding-sibling::*)]/sigma[@desciption="attribute"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::sigma[@content="content"][@xml:id="id11"][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//iota[@src][@xml:lang="en-GB"][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/kappa[@true][@xml:id="id12"][not(following-sibling::*)]/delta[@name][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda att="attribute" xml:lang="en-US" xml:id="id1"> + <rho xml:lang="nb" xml:id="id2"/> + <phi abort="attribute"> + <delta desciption="this.nodeValue"> + <phi token="true" xml:lang="nb"/> + <alpha class="123456789" xml:id="id3"/> + <pi class="false" xml:lang="nb"> + <kappa/> + <eta xml:id="id4"> + <psi xml:id="id5"> + <omega class="attribute value" xml:lang="en-US"> + <eta/> + <nu attribute="attribute-value" xml:id="id6"/> + <phi xml:id="id7"> + <gamma att="123456789" xml:id="id8"> + <eta true="100%" xml:lang="nb" xml:id="id9"> + <omicron> + <sigma desciption="attribute" xml:id="id10"/> + <sigma content="content" xml:id="id11"/> + <upsilon> + <iota src="attribute" xml:lang="en-GB"/> + <phi> + <kappa true="123456789" xml:id="id12"> + <delta name="true" xml:lang="en-GB"> + <green>This text must be green</green> + </delta> + </kappa> + </phi> + </upsilon> + </omicron> + </eta> + </gamma> + </phi> + </omega> + </psi> + </eta> + </pi> + </delta> + </phi> + </lambda> + </tree> + </test> + <test> + <xpath>//lambda[@name][@xml:id="id1"]//omega[@xml:lang="no-nb"][following-sibling::psi[contains(@delete,"r attr")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@attribute][@xml:id="id2"][preceding-sibling::*[position() = 2]]/zeta[starts-with(concat(@number,"-"),"false-")][@xml:lang="en"][not(following-sibling::*)]/beta[starts-with(@abort,"100")][not(following-sibling::beta)]//chi[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::omega[following-sibling::iota[contains(@string,"lse")][@xml:lang="en"][@xml:id="id4"]/phi[@xml:id="id5"][not(following-sibling::*)]//gamma[@xml:lang="en-US"][@xml:id="id6"][following-sibling::alpha[@xml:lang="en-GB"][not(child::node())][following-sibling::psi[@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[starts-with(concat(@number,"-"),"attribute-")][@xml:id="id8"]//omicron[contains(@true,"e")][@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::omicron)]/mu[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omicron[contains(@desciption,"6789")][preceding-sibling::*[position() = 1]][following-sibling::kappa[@xml:id="id10"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/tau[starts-with(concat(@or,"-"),"attribute-")][@xml:lang="en-US"][not(child::node())][following-sibling::beta[position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda name="attribute-value" xml:id="id1"> + <omega xml:lang="no-nb"/> + <psi delete="another attribute value" xml:lang="en-US"/> + <kappa attribute="123456789" xml:id="id2"> + <zeta number="false" xml:lang="en"> + <beta abort="100%"> + <chi xml:lang="no" xml:id="id3"/> + <omega/> + <iota string="false" xml:lang="en" xml:id="id4"> + <phi xml:id="id5"> + <gamma xml:lang="en-US" xml:id="id6"/> + <alpha xml:lang="en-GB"/> + <psi xml:id="id7"/> + <upsilon number="attribute" xml:id="id8"> + <omicron true="attribute-value" xml:lang="en" xml:id="id9"> + <mu/> + <omicron desciption="123456789"/> + <kappa xml:id="id10"> + <tau or="attribute" xml:lang="en-US"/> + <beta> + <green>This text must be green</green> + </beta> + </kappa> + </omicron> + </upsilon> + </phi> + </iota> + </beta> + </zeta> + </kappa> + </lambda> + </tree> + </test> + <test> + <xpath>//lambda[@xml:id="id1"]/beta[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::zeta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@att][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::rho[@name][@xml:id="id5"][preceding-sibling::*[position() = 3]]//pi[@xml:id="id6"]/gamma[starts-with(concat(@false,"-"),"attribute-")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[starts-with(@abort,"_bl")][@xml:lang="en"][@xml:id="id7"][following-sibling::gamma[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omega[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[starts-with(@title,"solid 1px ")][@xml:id="id9"]//zeta[not(child::node())][following-sibling::zeta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[starts-with(@abort,"this")][@xml:lang="no-nb"][following-sibling::*[position()=3]][following-sibling::eta[@attr="attribute"][preceding-sibling::*[position() = 3]][following-sibling::epsilon[preceding-sibling::*[position() = 4]][following-sibling::gamma[@desciption][@xml:lang="no"][preceding-sibling::*[position() = 5]][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda xml:id="id1"> + <beta attr="attribute" xml:lang="nb" xml:id="id2"/> + <zeta xml:lang="no-nb"> + <chi xml:id="id3"/> + <phi xml:lang="no-nb" xml:id="id4"/> + <any att="false"/> + <rho name="true" xml:id="id5"> + <pi xml:id="id6"> + <gamma false="attribute-value" xml:lang="en"/> + <delta abort="_blank" xml:lang="en" xml:id="id7"/> + <gamma> + <omega xml:lang="en-GB" xml:id="id8"/> + <sigma title="solid 1px green" xml:id="id9"> + <zeta/> + <zeta xml:lang="en-US"/> + <lambda abort="this.nodeValue" xml:lang="no-nb"/> + <eta attr="attribute"/> + <epsilon/> + <gamma desciption="true" xml:lang="no"> + <green>This text must be green</green> + </gamma> + </sigma> + </gamma> + </pi> + </rho> + </zeta> + </lambda> + </tree> + </test> + <test> + <xpath>//tau[starts-with(concat(@desciption,"-"),"100%-")][@xml:lang="no"]/phi[@xml:lang="en"][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id1"][following-sibling::sigma[starts-with(concat(@or,"-"),"true-")][@xml:lang="en"][@xml:id="id2"]/pi[@insert="123456789"][@xml:lang="no-nb"][not(following-sibling::*)]//pi[@att][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::zeta[preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:lang="en"][preceding-sibling::*[position() = 2]]/lambda[@name][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)]][position() = 1]]]]</xpath> + <tree> + <tau desciption="100%" xml:lang="no"> + <phi xml:lang="en"/> + <omicron xml:lang="en-US" xml:id="id1"/> + <sigma or="true" xml:lang="en" xml:id="id2"> + <pi insert="123456789" xml:lang="no-nb"> + <pi att="attribute" xml:lang="en"/> + <zeta/> + <phi xml:lang="en"> + <lambda name="true" xml:lang="no" xml:id="id3"> + <green>This text must be green</green> + </lambda> + </phi> + </pi> + </sigma> + </tau> + </tree> + </test> + <test> + <xpath>//phi//delta[starts-with(@data,"_bl")][not(preceding-sibling::*)][not(following-sibling::*)]/phi[contains(concat(@class,"$"),"id 1px green$")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[starts-with(@class,"fa")][@xml:id="id2"][not(following-sibling::*)]//beta[contains(concat(@class,"$"),"ribute$")][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[starts-with(concat(@insert,"-"),"true-")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="nb"][not(child::node())][following-sibling::theta[@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/chi[starts-with(@number,"10")][@xml:lang="en"][not(preceding-sibling::*)]//delta[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[starts-with(concat(@title,"-"),"true-")][@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)]/nu[contains(concat(@data,"$"),"odeValue$")][@xml:lang="no-nb"][not(following-sibling::*)]/upsilon[@xml:lang="en-US"]/phi[contains(@title,"odeV")][@xml:id="id7"][not(preceding-sibling::*)]//phi[starts-with(concat(@delete,"-"),"content-")][not(preceding-sibling::*)]/omega[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:lang="no"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::eta[@xml:lang="en-US"][preceding-sibling::*[position() = 2]]/mu[@xml:id="id9"]/gamma[contains(concat(@att,"$"),"ank$")][@xml:id="id10"][not(following-sibling::*)]//sigma[@attrib][@xml:id="id11"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(@content,"tr")][@xml:lang="en"][not(following-sibling::*)]//chi[@xml:lang="en"][not(preceding-sibling::*)][not(preceding-sibling::chi)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi> + <delta data="_blank"> + <phi class="solid 1px green" xml:id="id1"> + <nu class="false" xml:id="id2"> + <beta class="attribute"/> + <xi insert="true" xml:lang="en" xml:id="id3"/> + <xi xml:lang="nb"/> + <theta xml:id="id4"> + <chi number="100%" xml:lang="en"> + <delta xml:lang="en-GB" xml:id="id5"> + <rho title="true" xml:lang="nb" xml:id="id6"> + <nu data="this.nodeValue" xml:lang="no-nb"> + <upsilon xml:lang="en-US"> + <phi title="this.nodeValue" xml:id="id7"> + <phi delete="content"> + <omega xml:lang="no-nb"/> + <epsilon xml:lang="no" xml:id="id8"/> + <eta xml:lang="en-US"> + <mu xml:id="id9"> + <gamma att="_blank" xml:id="id10"> + <sigma attrib="solid 1px green" xml:id="id11"/> + <delta content="true" xml:lang="en"> + <chi xml:lang="en"> + <green>This text must be green</green> + </chi> + </delta> + </gamma> + </mu> + </eta> + </phi> + </phi> + </upsilon> + </nu> + </rho> + </delta> + </chi> + </theta> + </nu> + </phi> + </delta> + </phi> + </tree> + </test> + <test> + <xpath>//gamma[@and][@xml:lang="en-US"][@xml:id="id1"]//delta[@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa[@xml:lang="en"][not(following-sibling::*)]/delta[contains(@data,"is.no")][@xml:id="id3"][not(preceding-sibling::*)]/eta[starts-with(@name,"this.node")][@xml:id="id4"]//*[starts-with(concat(@content,"-"),"this.nodeValue-")][not(following-sibling::*)]/rho[@string="solid 1px green"][@xml:lang="en-US"][following-sibling::*[position()=1]][not(preceding-sibling::rho)][following-sibling::epsilon[contains(@token,"attribute")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[@xml:lang="en-US"][not(preceding-sibling::*)]//sigma[@abort][not(following-sibling::*)]]]</xpath> + <tree> + <gamma and="this.nodeValue" xml:lang="en-US" xml:id="id1"> + <delta xml:lang="en" xml:id="id2"/> + <kappa xml:lang="en"> + <delta data="this.nodeValue" xml:id="id3"> + <eta name="this.nodeValue" xml:id="id4"> + <any content="this.nodeValue"> + <rho string="solid 1px green" xml:lang="en-US"/> + <epsilon token="another attribute value" xml:lang="nb"> + <lambda xml:lang="en-US"> + <sigma abort="_blank"> + <green>This text must be green</green> + </sigma> + </lambda> + </epsilon> + </any> + </eta> + </delta> + </kappa> + </gamma> + </tree> + </test> + <test> + <xpath>//theta[@or][@xml:lang="nb"]//lambda[@src][@xml:id="id1"]/omega[contains(concat(@abort,"$"),"olid 1px green$")][@xml:lang="en"]/epsilon[not(preceding-sibling::*)][following-sibling::omega[contains(concat(@class,"$"),"ute-value$")][preceding-sibling::*[position() = 1]][following-sibling::iota[@xml:id="id2"][not(following-sibling::*)]/rho[@xml:lang="no-nb"][not(preceding-sibling::*)][not(preceding-sibling::rho)]/tau[@true][following-sibling::beta[not(child::node())][following-sibling::iota[starts-with(concat(@object,"-"),"100%-")][@xml:lang="no"][not(following-sibling::*)]//nu[@attrib][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::iota//omicron[@title][not(following-sibling::*)]//*[@xml:id="id4"][not(preceding-sibling::*)][not(preceding-sibling::any)]//psi[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::zeta[preceding-sibling::*[position() = 1]]/mu[@string][@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)]/rho[@xml:id="id7"][not(child::node())][following-sibling::*[not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta or="another attribute value" xml:lang="nb"> + <lambda src="100%" xml:id="id1"> + <omega abort="solid 1px green" xml:lang="en"> + <epsilon/> + <omega class="attribute-value"/> + <iota xml:id="id2"> + <rho xml:lang="no-nb"> + <tau true="content"/> + <beta/> + <iota object="100%" xml:lang="no"> + <nu attrib="false" xml:id="id3"/> + <iota> + <omicron title="_blank"> + <any xml:id="id4"> + <psi xml:lang="nb" xml:id="id5"/> + <zeta> + <mu string="attribute" xml:lang="en-GB" xml:id="id6"> + <rho xml:id="id7"/> + <any/> + <beta> + <green>This text must be green</green> + </beta> + </mu> + </zeta> + </any> + </omicron> + </iota> + </iota> + </rho> + </iota> + </omega> + </lambda> + </theta> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no"][@xml:id="id1"]//iota[contains(@true,"eVal")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::tau[@or][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::zeta[@token][@xml:lang="no"][following-sibling::upsilon[@false][@xml:id="id3"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//pi[@xml:id="id4"][not(preceding-sibling::*)][not(preceding-sibling::pi)]//phi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::lambda[@xml:id="id5"][preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta xml:lang="no" xml:id="id1"> + <iota true="this.nodeValue" xml:lang="nb"/> + <tau or="_blank" xml:id="id2"/> + <omega/> + <zeta token="attribute-value" xml:lang="no"/> + <upsilon false="another attribute value" xml:id="id3"> + <pi xml:id="id4"> + <phi xml:lang="en"/> + <lambda xml:id="id5"> + <green>This text must be green</green> + </lambda> + </pi> + </upsilon> + </beta> + </tree> + </test> + <test> + <xpath>//zeta[@xml:lang="en-US"]//psi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@token][@xml:lang="en-US"][not(following-sibling::*)]/rho[not(preceding-sibling::rho)][following-sibling::epsilon[@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omicron[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[contains(concat(@and,"$"),"ntent$")][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@xml:lang="no-nb"]]]</xpath> + <tree> + <zeta xml:lang="en-US"> + <psi xml:lang="no-nb"> + <chi token="_blank" xml:lang="en-US"> + <rho/> + <epsilon xml:id="id1"> + <omicron xml:lang="en-US"> + <eta and="content" xml:id="id2"/> + <zeta xml:lang="no-nb"> + <green>This text must be green</green> + </zeta> + </omicron> + </epsilon> + </chi> + </psi> + </zeta> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="nb"]/delta[not(child::node())][following-sibling::gamma[contains(@attr,"tt")][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/pi[contains(concat(@delete,"$"),"te$")][@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]/kappa[contains(@string,"t")][@xml:id="id4"][not(following-sibling::kappa)]/chi[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="nb"][@xml:id="id6"]/chi[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[@att][@xml:lang="en"][not(preceding-sibling::psi or following-sibling::psi)][not(child::node())][following-sibling::upsilon[starts-with(concat(@title,"-"),"this-")][@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::*[@number="solid 1px green"][@xml:lang="no-nb"][@xml:id="id9"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::kappa[@name][preceding-sibling::*[position() = 3]][following-sibling::alpha[@content="attribute value"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//omega[contains(concat(@attribute,"$"),"ibute$")][@xml:lang="en-US"][@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@object][@xml:lang="en-US"][@xml:id="id11"][preceding-sibling::*[position() = 1]]/sigma[@xml:lang="en-US"][@xml:id="id12"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::epsilon[@abort]//*[contains(concat(@or,"$"),"blank$")][@xml:lang="no-nb"][@xml:id="id13"][not(preceding-sibling::*)][following-sibling::kappa[@xml:lang="nb"][@xml:id="id14"][not(child::node())][following-sibling::beta[@att][@xml:lang="en-US"][@xml:id="id15"][following-sibling::tau[@xml:lang="no-nb"][@xml:id="id16"][preceding-sibling::*[position() = 3]][following-sibling::omega[@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="nb"> + <delta/> + <gamma attr="attribute-value" xml:id="id1"/> + <theta xml:id="id2"> + <pi delete="attribute" xml:lang="en-GB" xml:id="id3"> + <kappa string="attribute" xml:id="id4"> + <chi xml:lang="no-nb" xml:id="id5"/> + <sigma xml:lang="nb" xml:id="id6"> + <chi/> + <eta xml:id="id7"> + <psi att="100%" xml:lang="en"/> + <upsilon title="this-is-att-value" xml:lang="en-US" xml:id="id8"/> + <any number="solid 1px green" xml:lang="no-nb" xml:id="id9"/> + <kappa name="this.nodeValue"/> + <alpha content="attribute value"> + <omega attribute="attribute" xml:lang="en-US" xml:id="id10"/> + <sigma object="attribute-value" xml:lang="en-US" xml:id="id11"> + <sigma xml:lang="en-US" xml:id="id12"/> + <epsilon abort="this.nodeValue"> + <any or="_blank" xml:lang="no-nb" xml:id="id13"/> + <kappa xml:lang="nb" xml:id="id14"/> + <beta att="another attribute value" xml:lang="en-US" xml:id="id15"/> + <tau xml:lang="no-nb" xml:id="id16"/> + <omega xml:lang="nb"> + <green>This text must be green</green> + </omega> + </epsilon> + </sigma> + </alpha> + </eta> + </sigma> + </kappa> + </pi> + </theta> + </epsilon> + </tree> + </test> + <test> + <xpath>//rho[starts-with(@attrib,"a")][@xml:lang="no"]/tau[contains(@attr,"se")][not(child::node())][following-sibling::kappa[@xml:id="id1"]//pi[starts-with(@false,"this-is-att-valu")]/rho[not(following-sibling::*)]//eta[@attrib="attribute value"][not(preceding-sibling::*)][following-sibling::psi[@number="attribute value"][@xml:lang="en-US"][not(following-sibling::*)]//epsilon[@data="attribute"][@xml:lang="en-US"][@xml:id="id2"][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 1]]//theta[@att="100%"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="no-nb"][@xml:id="id4"]/omicron[not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[contains(@insert,"ibute")][preceding-sibling::*[position() = 1]]/omicron[contains(concat(@and,"$"),"e$")][@xml:lang="no-nb"][not(child::node())][following-sibling::*[starts-with(@attribute,"t")]/tau[starts-with(concat(@object,"-"),"attribute-")][@xml:lang="no-nb"][not(child::node())][following-sibling::psi[@xml:lang="en-US"][following-sibling::kappa[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//gamma[not(following-sibling::*)]//phi[@xml:lang="en-GB"][@xml:id="id5"]//upsilon[starts-with(@attr,"10")][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::eta[preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:id="id7"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]][position() = 1]]]]]]]</xpath> + <tree> + <rho attrib="attribute" xml:lang="no"> + <tau attr="false"/> + <kappa xml:id="id1"> + <pi false="this-is-att-value"> + <rho> + <eta attrib="attribute value"/> + <psi number="attribute value" xml:lang="en-US"> + <epsilon data="attribute" xml:lang="en-US" xml:id="id2"/> + <beta xml:id="id3"> + <theta att="100%" xml:lang="no-nb"> + <delta xml:lang="no-nb" xml:id="id4"> + <omicron/> + <zeta insert="attribute"> + <omicron and="false" xml:lang="no-nb"/> + <any attribute="true"> + <tau object="attribute-value" xml:lang="no-nb"/> + <psi xml:lang="en-US"/> + <kappa xml:lang="en-GB"> + <gamma> + <phi xml:lang="en-GB" xml:id="id5"> + <upsilon attr="100%" xml:id="id6"/> + <eta/> + <omega xml:id="id7"> + <green>This text must be green</green> + </omega> + </phi> + </gamma> + </kappa> + </any> + </zeta> + </delta> + </theta> + </beta> + </psi> + </rho> + </pi> + </kappa> + </rho> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="no-nb"]/rho[@xml:lang="en-US"][not(preceding-sibling::*)]/omega[@xml:lang="en-US"][@xml:id="id1"][following-sibling::theta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@xml:lang="no"][@xml:id="id3"][following-sibling::theta[not(following-sibling::*)]/omega[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[starts-with(@abort,"attribute-valu")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::pi[starts-with(@att,"_")][@xml:id="id4"][following-sibling::xi[starts-with(@number,"at")][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::iota[@data="attribute value"][@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="en-GB"][not(following-sibling::*)]//mu[following-sibling::gamma[starts-with(concat(@insert,"-"),"attribute-")][@xml:lang="no-nb"]/nu[@xml:id="id6"][not(preceding-sibling::*)]//kappa[@delete="_blank"][@xml:lang="nb"][@xml:id="id7"]/iota[@false][@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::gamma[contains(concat(@attr,"$"),"lank$")][following-sibling::phi[@xml:id="id9"][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="no-nb"> + <rho xml:lang="en-US"> + <omega xml:lang="en-US" xml:id="id1"/> + <theta xml:id="id2"/> + <kappa xml:lang="no" xml:id="id3"/> + <theta> + <omega xml:lang="en-GB"> + <iota abort="attribute-value" xml:lang="nb"/> + <pi att="_blank" xml:id="id4"/> + <xi number="attribute" xml:id="id5"/> + <iota data="attribute value" xml:lang="nb"/> + <psi xml:lang="en-GB"> + <mu/> + <gamma insert="attribute" xml:lang="no-nb"> + <nu xml:id="id6"> + <kappa delete="_blank" xml:lang="nb" xml:id="id7"> + <iota false="content" xml:lang="en" xml:id="id8"/> + <gamma attr="_blank"/> + <phi xml:id="id9"> + <green>This text must be green</green> + </phi> + </kappa> + </nu> + </gamma> + </psi> + </omega> + </theta> + </rho> + </omicron> + </tree> + </test> + <test> + <xpath>//mu[@insert][@xml:lang="en-US"]/kappa[@xml:lang="en-GB"][not(following-sibling::*)]/beta[@attr][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@delete="this-is-att-value"][@xml:id="id1"][preceding-sibling::*[position() = 1]]/zeta[contains(@or,"th")][@xml:id="id2"][not(following-sibling::*)]//gamma[@token][@xml:id="id3"][not(following-sibling::*)]/beta[@token][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::gamma[@name="attribute-value"][@xml:id="id4"][not(child::node())][following-sibling::delta[@false][@xml:lang="no-nb"][not(child::node())][following-sibling::phi[contains(@src,"tribute valu")][@xml:id="id5"][not(following-sibling::*)]/zeta[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[following-sibling::upsilon[@attr][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//mu[starts-with(concat(@attr,"-"),"123456789-")][@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu insert="100%" xml:lang="en-US"> + <kappa xml:lang="en-GB"> + <beta attr="this.nodeValue"/> + <epsilon delete="this-is-att-value" xml:id="id1"> + <zeta or="this.nodeValue" xml:id="id2"> + <gamma token="attribute-value" xml:id="id3"> + <beta token="100%" xml:lang="nb"/> + <gamma name="attribute-value" xml:id="id4"/> + <delta false="this.nodeValue" xml:lang="no-nb"/> + <phi src="attribute value" xml:id="id5"> + <zeta xml:id="id6"> + <kappa/> + <upsilon attr="_blank"/> + <zeta xml:lang="en-US"> + <mu attr="123456789" xml:lang="en-US" xml:id="id7"> + <green>This text must be green</green> + </mu> + </zeta> + </zeta> + </phi> + </gamma> + </zeta> + </epsilon> + </kappa> + </mu> + </tree> + </test> + <test> + <xpath>//rho[contains(concat(@false,"$"),"e$")][@xml:id="id1"]/epsilon[@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]//beta[@false="123456789"][@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/kappa//sigma[not(child::node())][following-sibling::nu[contains(@abort,"0%")][preceding-sibling::*[position() = 1]]/delta[@xml:id="id4"][not(following-sibling::*)]//upsilon[contains(concat(@attribute,"$"),"nt$")][@xml:lang="en-US"][not(preceding-sibling::*)]//delta[@xml:lang="nb"][following-sibling::*[starts-with(concat(@string,"-"),"solid 1px green-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[@insert][@xml:id="id5"]//iota[@false][@xml:lang="no"][following-sibling::xi[contains(concat(@string,"$"),"nk$")][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[contains(concat(@true,"$")," green$")][@xml:lang="no-nb"][@xml:id="id7"][not(child::node())][following-sibling::rho[@string][@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][following-sibling::xi[preceding-sibling::*[position() = 4]]//psi[not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::psi)]/omicron[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::chi[starts-with(@abort,"another attribute valu")][@xml:lang="en"][not(following-sibling::*)]/kappa[@attribute][@xml:lang="nb"][@xml:id="id9"][not(child::node())][following-sibling::beta[@name][@xml:lang="en-GB"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[@xml:id="id11"]/lambda[@attr][@xml:lang="no"][@xml:id="id12"][not(preceding-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]]]]]</xpath> + <tree> + <rho false="false" xml:id="id1"> + <epsilon xml:lang="en" xml:id="id2"> + <beta false="123456789" xml:lang="en" xml:id="id3"> + <kappa> + <sigma/> + <nu abort="100%"> + <delta xml:id="id4"> + <upsilon attribute="content" xml:lang="en-US"> + <delta xml:lang="nb"/> + <any string="solid 1px green"/> + <chi insert="another attribute value" xml:id="id5"> + <iota false="100%" xml:lang="no"/> + <xi string="_blank" xml:id="id6"/> + <eta true="solid 1px green" xml:lang="no-nb" xml:id="id7"/> + <rho string="_blank" xml:lang="no-nb"/> + <xi> + <psi> + <omicron xml:lang="en-GB" xml:id="id8"/> + <chi abort="another attribute value" xml:lang="en"> + <kappa attribute="another attribute value" xml:lang="nb" xml:id="id9"/> + <beta name="attribute-value" xml:lang="en-GB" xml:id="id10"> + <xi xml:id="id11"> + <lambda attr="content" xml:lang="no" xml:id="id12"> + <green>This text must be green</green> + </lambda> + </xi> + </beta> + </chi> + </psi> + </xi> + </chi> + </upsilon> + </delta> + </nu> + </kappa> + </beta> + </epsilon> + </rho> + </tree> + </test> + <test> + <xpath>//xi[@abort="attribute value"][@xml:id="id1"]/xi[@and][following-sibling::*[position()=1]][following-sibling::omega[@attrib][@xml:lang="en"][@xml:id="id2"]//omega[@attr][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[contains(@number,"is-att-value")][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 1]][following-sibling::gamma[starts-with(concat(@attrib,"-"),"another attribute value-")]/omega[@xml:lang="en-US"][following-sibling::tau[contains(@desciption,"attribute-value")][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[@insert][@xml:id="id4"][not(following-sibling::*)]/pi[@name="this-is-att-value"][@xml:id="id5"][not(following-sibling::*)]//kappa[contains(concat(@src,"$"),"is-att-value$")][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[contains(@src,"%")][@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]//zeta[@xml:id="id7"]//nu[starts-with(@attr,"fal")][@xml:lang="no"][@xml:id="id8"][not(following-sibling::*)]/omega[starts-with(concat(@delete,"-"),"attribute value-")][@xml:lang="nb"]//epsilon[@xml:lang="en-GB"][not(preceding-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <xi abort="attribute value" xml:id="id1"> + <xi and="100%"/> + <omega attrib="another attribute value" xml:lang="en" xml:id="id2"> + <omega attr="solid 1px green" xml:lang="nb"/> + <chi> + <nu number="this-is-att-value"/> + <phi/> + <gamma attrib="another attribute value"> + <omega xml:lang="en-US"/> + <tau desciption="attribute-value" xml:id="id3"/> + <delta insert="this.nodeValue" xml:id="id4"> + <pi name="this-is-att-value" xml:id="id5"> + <kappa src="this-is-att-value" xml:lang="no"> + <omicron src="100%" xml:lang="en-US" xml:id="id6"> + <zeta xml:id="id7"> + <nu attr="false" xml:lang="no" xml:id="id8"> + <omega delete="attribute value" xml:lang="nb"> + <epsilon xml:lang="en-GB"> + <green>This text must be green</green> + </epsilon> + </omega> + </nu> + </zeta> + </omicron> + </kappa> + </pi> + </delta> + </gamma> + </chi> + </omega> + </xi> + </tree> + </test> + <test> + <xpath>//delta[starts-with(@delete,"this.n")][@xml:lang="en"]//eta[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::zeta[following-sibling::zeta[contains(concat(@insert,"$"),"tribute-value$")][@xml:lang="en-GB"][@xml:id="id2"]//xi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@attr][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][not(child::node())][following-sibling::lambda[starts-with(@number,"10")][@xml:id="id3"][following-sibling::*[position()=4]][following-sibling::gamma[@class="content"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::kappa[contains(concat(@token,"$"),"bute-value$")][preceding-sibling::*[position() = 4]][following-sibling::*[position()=2]][following-sibling::theta[@title="attribute-value"][@xml:lang="nb"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::zeta[@delete]/sigma[starts-with(concat(@object,"-"),"123456789-")][not(preceding-sibling::*)][following-sibling::beta[contains(@att,"this-is-att-")][not(following-sibling::*)]/*[starts-with(concat(@content,"-"),"false-")][@xml:lang="no-nb"][not(child::node())][following-sibling::tau[@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::omicron[contains(concat(@false,"$"),"23456789$")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <delta delete="this.nodeValue" xml:lang="en"> + <eta xml:lang="en" xml:id="id1"/> + <zeta/> + <zeta insert="attribute-value" xml:lang="en-GB" xml:id="id2"> + <xi xml:lang="no-nb"/> + <epsilon attr="attribute-value" xml:lang="en-GB"/> + <lambda number="100%" xml:id="id3"/> + <gamma class="content" xml:id="id4"/> + <kappa token="attribute-value"/> + <theta title="attribute-value" xml:lang="nb"/> + <zeta delete="this-is-att-value"> + <sigma object="123456789"/> + <beta att="this-is-att-value"> + <any content="false" xml:lang="no-nb"/> + <tau xml:lang="en-US" xml:id="id5"/> + <omicron false="123456789"> + <green>This text must be green</green> + </omicron> + </beta> + </zeta> + </zeta> + </delta> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@and,"123456")][@xml:lang="en-US"]//alpha[@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]//sigma[@token="attribute value"][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="no"][following-sibling::*[position()=3]][not(child::node())][following-sibling::beta[@and="another attribute value"][@xml:id="id3"][following-sibling::psi[@attribute][@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::epsilon[contains(concat(@object,"$"),"lank$")][@xml:lang="no"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/psi[@xml:lang="en-GB"][@xml:id="id5"]/theta[@xml:lang="no-nb"][not(preceding-sibling::*)]/eta[contains(@attribute,"id 1px green")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::nu[@or][@xml:id="id6"][not(child::node())][following-sibling::nu[following-sibling::*[position()=2]][following-sibling::omicron[@xml:lang="no"][following-sibling::pi[@xml:lang="en"]/chi[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//*[@xml:lang="en-GB"][following-sibling::alpha[@xml:id="id8"][preceding-sibling::*[position() = 1]]//omicron[@content][not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 2]]//*[contains(@title,"tribute val")][@xml:lang="en-US"][not(following-sibling::*)]//delta[@xml:id="id9"][not(preceding-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <omega and="123456789" xml:lang="en-US"> + <alpha xml:lang="en-GB" xml:id="id1"> + <sigma token="attribute value" xml:lang="en" xml:id="id2"/> + <gamma xml:lang="no"/> + <beta and="another attribute value" xml:id="id3"/> + <psi attribute="true" xml:lang="en-US" xml:id="id4"/> + <epsilon object="_blank" xml:lang="no"> + <psi xml:lang="en-GB" xml:id="id5"> + <theta xml:lang="no-nb"> + <eta attribute="solid 1px green" xml:lang="no-nb"/> + <nu or="123456789" xml:id="id6"/> + <nu/> + <omicron xml:lang="no"/> + <pi xml:lang="en"> + <chi xml:id="id7"> + <any xml:lang="en-GB"/> + <alpha xml:id="id8"> + <omicron content="100%"/> + <omicron/> + <alpha> + <any title="another attribute value" xml:lang="en-US"> + <delta xml:id="id9"> + <green>This text must be green</green> + </delta> + </any> + </alpha> + </alpha> + </chi> + </pi> + </theta> + </psi> + </epsilon> + </alpha> + </omega> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]/kappa[@xml:lang="nb"][@xml:id="id2"][following-sibling::xi//theta[@src][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::mu[contains(@att,"blan")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::pi[contains(@or,"r attribute va")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//gamma[contains(@delete,"nodeValue")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::pi[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[following-sibling::kappa[contains(@src,"tent")][@xml:id="id6"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]]</xpath> + <tree> + <nu xml:id="id1"> + <kappa xml:lang="nb" xml:id="id2"/> + <xi> + <theta src="attribute"/> + <rho xml:lang="no-nb" xml:id="id3"/> + <mu att="_blank"/> + <pi or="another attribute value"> + <gamma delete="this.nodeValue" xml:id="id4"/> + <pi xml:id="id5"/> + <alpha/> + <kappa src="content" xml:id="id6"> + <green>This text must be green</green> + </kappa> + </pi> + </xi> + </nu> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]/omega[starts-with(concat(@attrib,"-"),"true-")][@xml:id="id2"][not(preceding-sibling::*)]/gamma[not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:id="id3"][preceding-sibling::*[position() = 1]]//chi[@xml:lang="en"][not(child::node())][following-sibling::xi[@desciption][@xml:lang="no"][following-sibling::rho[@xml:id="id4"]//beta[not(preceding-sibling::*)][following-sibling::epsilon[@class][@xml:id="id5"][not(following-sibling::*)]//xi[@data][@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)]/omicron[@xml:id="id7"][following-sibling::beta[@data][@xml:id="id8"][not(following-sibling::*)]/alpha[starts-with(@insert,"cont")]//chi[contains(concat(@or,"$"),"n$")][not(preceding-sibling::chi)][not(child::node())][following-sibling::lambda[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@xml:id="id9"][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id10"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::iota[@xml:lang="no"][@xml:id="id11"][following-sibling::iota[@xml:lang="en-GB"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]/kappa[@xml:lang="no"][@xml:id="id12"][following-sibling::mu[starts-with(concat(@delete,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id13"][not(following-sibling::*)]]][position() = 1]]]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <iota xml:id="id1"> + <omega attrib="true" xml:id="id2"> + <gamma/> + <theta xml:id="id3"> + <chi xml:lang="en"/> + <xi desciption="true" xml:lang="no"/> + <rho xml:id="id4"> + <beta/> + <epsilon class="this-is-att-value" xml:id="id5"> + <xi data="123456789" xml:lang="no-nb" xml:id="id6"> + <omicron xml:id="id7"/> + <beta data="attribute" xml:id="id8"> + <alpha insert="content"> + <chi or="solid 1px green"/> + <lambda xml:lang="no-nb"/> + <sigma xml:id="id9"/> + <rho xml:lang="en-GB" xml:id="id10"/> + <iota xml:lang="no" xml:id="id11"/> + <iota xml:lang="en-GB"> + <kappa xml:lang="no" xml:id="id12"/> + <mu delete="attribute-value" xml:lang="en-US" xml:id="id13"> + <green>This text must be green</green> + </mu> + </iota> + </alpha> + </beta> + </xi> + </epsilon> + </rho> + </theta> + </omega> + </iota> + </tree> + </test> + <test> + <xpath>//nu/mu[contains(@true,"tribute")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[starts-with(concat(@attr,"-"),"attribute value-")][@xml:lang="no-nb"][not(child::node())][following-sibling::tau[starts-with(@object,"content")][not(following-sibling::*)]/nu[@name][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::epsilon[starts-with(@attrib,"this.n")][@xml:id="id2"][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <nu> + <mu true="attribute" xml:lang="en-US"> + <upsilon attr="attribute value" xml:lang="no-nb"/> + <tau object="content"> + <nu name="_blank" xml:lang="en-US" xml:id="id1"/> + <epsilon attrib="this.nodeValue" xml:id="id2"> + <green>This text must be green</green> + </epsilon> + </tau> + </mu> + </nu> + </tree> + </test> + <test> + <xpath>//kappa[@src][@xml:lang="no-nb"]/upsilon[@xml:lang="nb"]//xi[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@src][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/beta[not(child::node())][following-sibling::nu[@object][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::nu/nu[@desciption][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::beta[@xml:lang="en-GB"][@xml:id="id4"]/omicron[@data][not(following-sibling::*)]/gamma[@xml:lang="no-nb"][not(preceding-sibling::*)]/zeta[@att][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@number="another attribute value"][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::epsilon[following-sibling::*[contains(concat(@true,"$"),"r attribute value$")][@xml:id="id5"][not(following-sibling::*)]]]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <kappa src="true" xml:lang="no-nb"> + <upsilon xml:lang="nb"> + <xi xml:id="id1"/> + <eta src="another attribute value"/> + <delta xml:lang="en"> + <beta/> + <nu object="false" xml:id="id2"/> + <nu> + <nu desciption="this.nodeValue" xml:id="id3"/> + <beta xml:lang="en-GB" xml:id="id4"> + <omicron data="content"> + <gamma xml:lang="no-nb"> + <zeta att="123456789" xml:lang="en-US"/> + <mu number="another attribute value" xml:lang="no"/> + <epsilon/> + <any true="another attribute value" xml:id="id5"> + <green>This text must be green</green> + </any> + </gamma> + </omicron> + </beta> + </nu> + </delta> + </upsilon> + </kappa> + </tree> + </test> + <test> + <xpath>//epsilon[starts-with(@data,"cont")][@xml:lang="nb"][@xml:id="id1"]//*[@xml:lang="en-GB"][following-sibling::rho[@xml:lang="en-GB"][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::epsilon[@xml:id="id2"][not(following-sibling::*)]/theta[starts-with(@object,"solid ")][@xml:id="id3"][not(preceding-sibling::*)]//rho[starts-with(@att,"this-is-att-val")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::nu[@xml:id="id5"]//xi[@xml:id="id6"][not(following-sibling::*)]//phi[contains(@content,"e")][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@src="false"][@xml:id="id7"][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@xml:lang="nb"][@xml:id="id8"][following-sibling::sigma[starts-with(concat(@false,"-"),"content-")][@xml:id="id9"][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon data="content" xml:lang="nb" xml:id="id1"> + <any xml:lang="en-GB"/> + <rho xml:lang="en-GB"/> + <omega/> + <epsilon xml:id="id2"> + <theta object="solid 1px green" xml:id="id3"> + <rho att="this-is-att-value" xml:lang="en-GB" xml:id="id4"/> + <nu xml:id="id5"> + <xi xml:id="id6"> + <phi content="this.nodeValue"/> + <chi src="false" xml:id="id7"/> + <any xml:lang="nb" xml:id="id8"/> + <sigma false="content" xml:id="id9"> + <green>This text must be green</green> + </sigma> + </xi> + </nu> + </theta> + </epsilon> + </epsilon> + </tree> + </test> + <test> + <xpath>//omicron[@src][@xml:id="id1"]//epsilon[@xml:id="id2"][not(following-sibling::*)]//sigma[starts-with(concat(@attribute,"-"),"123456789-")][following-sibling::*[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:id="id4"][preceding-sibling::*[position() = 3]]//pi[@data]//alpha[@xml:id="id5"][not(child::node())][following-sibling::chi[following-sibling::omicron[preceding-sibling::*[position() = 2]][not(following-sibling::*)]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <omicron src="content" xml:id="id1"> + <epsilon xml:id="id2"> + <sigma attribute="123456789"/> + <any xml:id="id3"> + <psi/> + <omicron/> + <nu xml:lang="no-nb"/> + <phi xml:id="id4"> + <pi data="another attribute value"> + <alpha xml:id="id5"/> + <chi/> + <omicron> + <green>This text must be green</green> + </omicron> + </pi> + </phi> + </any> + </epsilon> + </omicron> + </tree> + </test> + <test> + <xpath>//tau[@xml:id="id1"]/theta[starts-with(concat(@delete,"-"),"_blank-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[contains(@true,"%")][preceding-sibling::*[position() = 1]]//lambda[@xml:lang="nb"][not(preceding-sibling::*)]//zeta[starts-with(concat(@and,"-"),"another attribute value-")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::kappa[@class="attribute-value"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::omicron[@class="attribute-value"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/phi[@insert][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)]//phi[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[contains(@title,"ttribute")][@xml:lang="en"][not(child::node())][following-sibling::xi[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//tau[following-sibling::kappa[@xml:id="id6"][preceding-sibling::*[position() = 1]]//mu[starts-with(concat(@abort,"-"),"attribute-")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[contains(@delete,"lid ")][@xml:id="id7"][not(preceding-sibling::*)]//nu[@xml:id="id8"][not(preceding-sibling::*)][following-sibling::rho[@xml:lang="nb"][@xml:id="id9"]/zeta[@desciption][@xml:id="id10"]//omicron[@title][@xml:lang="no-nb"][@xml:id="id11"][following-sibling::eta[contains(@string,"solid 1")][@xml:lang="no"][@xml:id="id12"]/iota[starts-with(concat(@token,"-"),"attribute value-")][not(child::node())][following-sibling::gamma[starts-with(concat(@object,"-"),"true-")][@xml:lang="en-GB"][@xml:id="id13"][not(following-sibling::*)]/lambda[contains(@attr,"ent")][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <tau xml:id="id1"> + <theta delete="_blank" xml:lang="en-GB"/> + <tau true="100%"> + <lambda xml:lang="nb"> + <zeta and="another attribute value" xml:lang="no"/> + <kappa class="attribute-value"/> + <omicron class="attribute-value" xml:id="id2"> + <phi insert="attribute-value" xml:lang="nb" xml:id="id3"> + <phi xml:lang="no" xml:id="id4"> + <eta title="another attribute value" xml:lang="en"/> + <xi xml:id="id5"> + <tau/> + <kappa xml:id="id6"> + <mu abort="attribute-value" xml:lang="en-US"> + <omega delete="solid 1px green" xml:id="id7"> + <nu xml:id="id8"/> + <rho xml:lang="nb" xml:id="id9"> + <zeta desciption="100%" xml:id="id10"> + <omicron title="attribute value" xml:lang="no-nb" xml:id="id11"/> + <eta string="solid 1px green" xml:lang="no" xml:id="id12"> + <iota token="attribute value"/> + <gamma object="true" xml:lang="en-GB" xml:id="id13"> + <lambda attr="content"> + <green>This text must be green</green> + </lambda> + </gamma> + </eta> + </zeta> + </rho> + </omega> + </mu> + </kappa> + </xi> + </phi> + </phi> + </omicron> + </lambda> + </tau> + </tau> + </tree> + </test> + <test> + <xpath>//zeta[@delete="attribute value"][@xml:lang="en"]//mu[@xml:lang="en"][not(child::node())][following-sibling::omicron[contains(@token,"e")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::eta[@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)]//rho[@xml:lang="no-nb"][@xml:id="id2"][not(child::node())][following-sibling::beta[@xml:id="id3"][following-sibling::*[starts-with(concat(@object,"-"),"this-")][@xml:lang="no-nb"][following-sibling::beta[@xml:id="id4"][following-sibling::*[position()=2]][preceding-sibling::beta[1]][not(child::node())][following-sibling::mu[@and="attribute-value"][@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::sigma[@xml:id="id6"][preceding-sibling::*[position() = 5]]/kappa[starts-with(concat(@attr,"-"),"this-")][@xml:lang="en-US"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@name="123456789"][@xml:id="id8"][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <zeta delete="attribute value" xml:lang="en"> + <mu xml:lang="en"/> + <omicron token="false" xml:lang="nb"/> + <eta xml:lang="no" xml:id="id1"> + <rho xml:lang="no-nb" xml:id="id2"/> + <beta xml:id="id3"/> + <any object="this-is-att-value" xml:lang="no-nb"/> + <beta xml:id="id4"/> + <mu and="attribute-value" xml:lang="en-US" xml:id="id5"/> + <sigma xml:id="id6"> + <kappa attr="this-is-att-value" xml:lang="en-US" xml:id="id7"/> + <zeta name="123456789" xml:id="id8"> + <green>This text must be green</green> + </zeta> + </sigma> + </eta> + </zeta> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en"][@xml:id="id1"]//xi[@xml:id="id2"][not(following-sibling::*)]/tau[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[not(child::node())][following-sibling::zeta[@class][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::rho[not(following-sibling::*)]//xi[@class][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="nb"][@xml:id="id5"][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][following-sibling::tau[@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][not(preceding-sibling::tau or following-sibling::tau)]//delta[contains(@number,"er at")][@xml:lang="en-US"][@xml:id="id6"][not(child::node())][following-sibling::epsilon[@xml:id="id7"]//tau[starts-with(@attrib,"tr")][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[contains(concat(@string,"$"),"alue$")][@xml:id="id9"][not(following-sibling::*)]//upsilon[@xml:lang="no-nb"][@xml:id="id10"]//epsilon[starts-with(@name,"attribute val")][@xml:id="id11"][following-sibling::nu[@xml:lang="nb"][@xml:id="id12"][preceding-sibling::*[position() = 1]]/psi[not(following-sibling::*)]/alpha[starts-with(@att,"attribut")][not(following-sibling::*)]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta xml:lang="en" xml:id="id1"> + <xi xml:id="id2"> + <tau xml:id="id3"> + <beta/> + <zeta class="this-is-att-value" xml:lang="nb" xml:id="id4"/> + <rho> + <xi class="another attribute value"/> + <sigma xml:lang="nb" xml:id="id5"/> + <mu xml:lang="en-GB"/> + <tau xml:lang="no"> + <delta number="another attribute value" xml:lang="en-US" xml:id="id6"/> + <epsilon xml:id="id7"> + <tau attrib="true" xml:id="id8"/> + <any string="attribute-value" xml:id="id9"> + <upsilon xml:lang="no-nb" xml:id="id10"> + <epsilon name="attribute value" xml:id="id11"/> + <nu xml:lang="nb" xml:id="id12"> + <psi> + <alpha att="attribute"> + <green>This text must be green</green> + </alpha> + </psi> + </nu> + </upsilon> + </any> + </epsilon> + </tau> + </rho> + </tau> + </xi> + </delta> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en-GB"]/zeta[contains(@title,"s")][@xml:lang="nb"][@xml:id="id1"][not(following-sibling::*)]//chi[@attrib][not(preceding-sibling::*)][following-sibling::nu[@xml:id="id2"]//xi[starts-with(concat(@attribute,"-"),"attribute-")][@xml:lang="nb"]/nu[@number][@xml:id="id3"][not(following-sibling::*)]/nu[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[contains(@src,"tru")][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/sigma[@xml:id="id5"][not(preceding-sibling::*)]//lambda[starts-with(concat(@and,"-"),"_blank-")][not(following-sibling::*)]/mu[not(child::node())][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(preceding-sibling::gamma)][following-sibling::mu[not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::alpha[starts-with(concat(@object,"-"),"true-")][following-sibling::zeta[@xml:lang="no"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//mu[contains(@attrib,"en")][@xml:lang="en-GB"][@xml:id="id7"][not(child::node())][following-sibling::eta[@token][@xml:id="id8"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[contains(concat(@attrib,"$"),"-value$")][preceding-sibling::*[position() = 2]]/gamma[@xml:id="id9"][not(child::node())][following-sibling::iota[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@object][@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <kappa xml:lang="en-GB"> + <zeta title="false" xml:lang="nb" xml:id="id1"> + <chi attrib="this.nodeValue"/> + <nu xml:id="id2"> + <xi attribute="attribute" xml:lang="nb"> + <nu number="true" xml:id="id3"> + <nu xml:lang="en"/> + <omicron src="true" xml:id="id4"> + <sigma xml:id="id5"> + <lambda and="_blank"> + <mu/> + <gamma xml:lang="no-nb" xml:id="id6"/> + <mu/> + <gamma/> + <alpha object="true"/> + <zeta xml:lang="no"> + <mu attrib="solid 1px green" xml:lang="en-GB" xml:id="id7"/> + <eta token="this.nodeValue" xml:id="id8"/> + <eta attrib="attribute-value"> + <gamma xml:id="id9"/> + <iota xml:lang="nb"> + <epsilon object="solid 1px green" xml:lang="nb" xml:id="id10"> + <green>This text must be green</green> + </epsilon> + </iota> + </eta> + </zeta> + </lambda> + </sigma> + </omicron> + </nu> + </xi> + </nu> + </zeta> + </kappa> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="en-GB"]/mu[@attrib="attribute"][@xml:lang="en-GB"][not(following-sibling::*)]//iota[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@xml:id="id1"][not(following-sibling::*)]//phi[@class]//pi[@xml:lang="nb"][not(following-sibling::*)]/xi[@and="123456789"][@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::psi[starts-with(@attrib,"fa")][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//sigma[@attribute][@xml:id="id4"][not(child::node())][following-sibling::theta[@true][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::pi[@xml:lang="en-GB"][@xml:id="id6"][not(child::node())][following-sibling::nu[@xml:lang="en"][@xml:id="id7"][not(following-sibling::*)]//sigma[contains(@src,"alue")][@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@data]//lambda[@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::psi[contains(concat(@name,"$"),"ank$")]/tau[contains(@title,"deValue")][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[starts-with(@src,"_bl")][@xml:lang="en"][@xml:id="id12"][preceding-sibling::*[position() = 2]][following-sibling::pi[@abort][@xml:id="id13"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[contains(concat(@token,"$"),"nt$")][preceding-sibling::*[position() = 4]]]][position() = 1]]][position() = 1]][position() = 1]]]]]]][position() = 1]]]</xpath> + <tree> + <pi xml:lang="en-GB"> + <mu attrib="attribute" xml:lang="en-GB"> + <iota xml:lang="en-US"/> + <kappa> + <beta xml:id="id1"> + <phi class="this.nodeValue"> + <pi xml:lang="nb"> + <xi and="123456789" xml:lang="no" xml:id="id2"/> + <psi attrib="false" xml:lang="nb" xml:id="id3"> + <sigma attribute="solid 1px green" xml:id="id4"/> + <theta true="another attribute value" xml:lang="en-US" xml:id="id5"/> + <pi xml:lang="en-GB" xml:id="id6"/> + <nu xml:lang="en" xml:id="id7"> + <sigma src="attribute value" xml:lang="en" xml:id="id8"/> + <mu xml:lang="no"/> + <iota data="this-is-att-value"> + <lambda xml:id="id9"/> + <psi xml:id="id10"/> + <psi name="_blank"> + <tau title="this.nodeValue"/> + <rho xml:id="id11"/> + <psi src="_blank" xml:lang="en" xml:id="id12"/> + <pi abort="attribute-value" xml:id="id13"/> + <lambda token="content"> + <green>This text must be green</green> + </lambda> + </psi> + </iota> + </nu> + </psi> + </pi> + </phi> + </beta> + </kappa> + </mu> + </pi> + </tree> + </test> + <test> + <xpath>//*[@or="solid 1px green"][@xml:lang="en-GB"]/eta[starts-with(concat(@token,"-"),"another attribute value-")][@xml:id="id1"][not(preceding-sibling::*)]//sigma[@xml:id="id2"][not(preceding-sibling::*)]/omega//epsilon[contains(concat(@title,"$"),"lank$")]/phi[@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:lang="no-nb"]//chi[@xml:lang="en"][not(preceding-sibling::*)]//rho[contains(concat(@att,"$"),"89$")]/lambda[@object][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda]</xpath> + <tree> + <any or="solid 1px green" xml:lang="en-GB"> + <eta token="another attribute value" xml:id="id1"> + <sigma xml:id="id2"> + <omega> + <epsilon title="_blank"> + <phi xml:lang="no"/> + <rho xml:lang="no-nb"> + <chi xml:lang="en"> + <rho att="123456789"> + <lambda object="attribute-value" xml:lang="nb"> + <lambda> + <green>This text must be green</green> + </lambda> + </lambda> + </rho> + </chi> + </rho> + </epsilon> + </omega> + </sigma> + </eta> + </any> + </tree> + </test> + <test> + <xpath>//epsilon[contains(concat(@abort,"$"),"100%$")][@xml:id="id1"]/xi[not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[starts-with(@att,"tru")][not(child::node())][following-sibling::lambda[contains(concat(@insert,"$"),"_blank$")][@xml:id="id2"][following-sibling::psi[@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//kappa[@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:lang="en"]/kappa[@xml:id="id5"][not(child::node())][following-sibling::beta[@class][@xml:lang="en-US"][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::upsilon[@false][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::upsilon)][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 3]]//gamma[@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[contains(@true,"0%")][@xml:lang="en-US"][not(child::node())][following-sibling::epsilon[@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@delete="_blank"][not(preceding-sibling::kappa)][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][following-sibling::xi/iota[@xml:lang="en-US"][not(child::node())][following-sibling::epsilon[@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@xml:id="id11"]//alpha[starts-with(@delete,"th")][@xml:lang="en-GB"][@xml:id="id12"][not(preceding-sibling::*)]/xi[not(preceding-sibling::*)]//gamma[starts-with(@or,"tr")][@xml:id="id13"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <epsilon abort="100%" xml:id="id1"> + <xi/> + <zeta att="true"/> + <lambda insert="_blank" xml:id="id2"/> + <psi xml:lang="no" xml:id="id3"> + <kappa xml:id="id4"/> + <xi/> + <theta xml:lang="en"> + <kappa xml:id="id5"/> + <beta class="this-is-att-value" xml:lang="en-US" xml:id="id6"/> + <upsilon false="content" xml:id="id7"/> + <chi> + <gamma xml:id="id8"> + <omicron true="100%" xml:lang="en-US"/> + <epsilon xml:lang="en" xml:id="id9"/> + <kappa delete="_blank"/> + <kappa xml:lang="no-nb"/> + <xi> + <iota xml:lang="en-US"/> + <epsilon xml:id="id10"> + <any xml:id="id11"> + <alpha delete="this-is-att-value" xml:lang="en-GB" xml:id="id12"> + <xi> + <gamma or="true" xml:id="id13"> + <green>This text must be green</green> + </gamma> + </xi> + </alpha> + </any> + </epsilon> + </xi> + </gamma> + </chi> + </theta> + </psi> + </epsilon> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="no"]/chi[not(child::node())][following-sibling::omicron[@abort][following-sibling::xi[@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::tau[preceding-sibling::*[position() = 3]]//upsilon[contains(concat(@name,"$"),"te value$")][not(following-sibling::*)]//mu[not(child::node())][following-sibling::tau[@data="attribute value"][@xml:id="id1"][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::tau[@name="false"][@xml:lang="en"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][following-sibling::lambda[starts-with(@string,"this.node")][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::gamma[@xml:id="id2"]/epsilon[@xml:id="id3"][not(preceding-sibling::*)]//xi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omega[contains(@string,"ute")][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]//alpha[@class][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//theta[@xml:lang="no"][following-sibling::*[position()=3]][following-sibling::psi[contains(@attribute,"lid 1px green")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[@xml:id="id8"][not(child::node())][following-sibling::nu[starts-with(concat(@class,"-"),"100%-")][@xml:lang="no-nb"][@xml:id="id9"][preceding-sibling::*[position() = 3]]/beta[starts-with(@or,"conte")][@xml:lang="nb"][@xml:id="id10"][not(following-sibling::*)][position() = 1]]]]]]]]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="no"> + <chi/> + <omicron abort="true"/> + <xi xml:lang="no"/> + <tau> + <upsilon name="attribute value"> + <mu/> + <tau data="attribute value" xml:id="id1"/> + <alpha/> + <tau name="false" xml:lang="en"/> + <lambda string="this.nodeValue" xml:lang="no-nb"/> + <gamma xml:id="id2"> + <epsilon xml:id="id3"> + <xi xml:lang="en"/> + <omega string="attribute"/> + <phi xml:lang="no-nb" xml:id="id4"> + <alpha class="another attribute value" xml:lang="no" xml:id="id5"/> + <alpha xml:lang="en-US" xml:id="id6"> + <theta xml:lang="no"/> + <psi attribute="solid 1px green" xml:id="id7"/> + <gamma xml:id="id8"/> + <nu class="100%" xml:lang="no-nb" xml:id="id9"> + <beta or="content" xml:lang="nb" xml:id="id10"> + <green>This text must be green</green> + </beta> + </nu> + </alpha> + </phi> + </epsilon> + </gamma> + </upsilon> + </tau> + </epsilon> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]//beta[@insert][@xml:id="id2"][following-sibling::*[position()=3]][not(child::node())][following-sibling::*[following-sibling::lambda[contains(@attr,"alue")][@xml:lang="no"][@xml:id="id3"][not(following-sibling::lambda)][not(child::node())][following-sibling::omega[@xml:lang="no"][@xml:id="id4"]/theta[@xml:id="id5"][not(preceding-sibling::*)]//epsilon[@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)]//theta[@xml:lang="nb"][@xml:id="id7"][following-sibling::gamma[@xml:id="id8"][following-sibling::alpha[contains(concat(@attr,"$"),"ribute value$")][@xml:id="id9"][preceding-sibling::*[position() = 2]][following-sibling::theta[@xml:id="id10"][not(following-sibling::*)][not(following-sibling::theta)]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <zeta xml:id="id1"> + <beta insert="this-is-att-value" xml:id="id2"/> + <any/> + <lambda attr="this-is-att-value" xml:lang="no" xml:id="id3"/> + <omega xml:lang="no" xml:id="id4"> + <theta xml:id="id5"> + <epsilon xml:lang="nb" xml:id="id6"> + <theta xml:lang="nb" xml:id="id7"/> + <gamma xml:id="id8"/> + <alpha attr="another attribute value" xml:id="id9"/> + <theta xml:id="id10"> + <green>This text must be green</green> + </theta> + </epsilon> + </theta> + </omega> + </zeta> + </tree> + </test> + <test> + <xpath>//gamma[@attrib][@xml:id="id1"]//pi[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[not(preceding-sibling::*)][following-sibling::*[preceding-sibling::*[position() = 1]][following-sibling::omega[contains(concat(@data,"$"),"odeValue$")][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/zeta][position() = 1]]]</xpath> + <tree> + <gamma attrib="_blank" xml:id="id1"> + <pi token="attribute-value" xml:lang="en"/> + <xi xml:lang="no-nb"> + <mu/> + <any/> + <omega data="this.nodeValue" xml:lang="en" xml:id="id2"> + <zeta> + <green>This text must be green</green> + </zeta> + </omega> + </xi> + </gamma> + </tree> + </test> + <test> + <xpath>//rho[starts-with(@attr,"another attribute")][@xml:lang="no-nb"]/theta[@attrib][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::kappa[contains(concat(@true,"$"),"6789$")][@xml:lang="no-nb"][not(child::node())][following-sibling::mu[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::lambda[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::kappa[@delete][@xml:lang="en-GB"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::omicron[starts-with(@abort,"attribu")][@xml:lang="en-US"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::*[@xml:id="id2"]//chi[@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[contains(@abort,"ute")][@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@attrib="123456789"][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 2]]/delta[@attr][@xml:lang="no-nb"][following-sibling::omicron[@xml:lang="en-GB"][not(following-sibling::*)]/pi[not(following-sibling::*)]/xi[following-sibling::tau[starts-with(@or,"at")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]//phi[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:id="id7"][not(child::node())][following-sibling::iota[@xml:lang="nb"][preceding-sibling::*[position() = 2]]/omega[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]]]]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <rho attr="another attribute value" xml:lang="no-nb"> + <theta attrib="false" xml:id="id1"/> + <kappa true="123456789" xml:lang="no-nb"/> + <mu xml:lang="nb"/> + <lambda/> + <kappa delete="this-is-att-value" xml:lang="en-GB"/> + <omicron abort="attribute" xml:lang="en-US"/> + <any xml:id="id2"> + <chi xml:lang="en-US" xml:id="id3"/> + <psi abort="attribute" xml:lang="no-nb" xml:id="id4"/> + <alpha attrib="123456789" xml:lang="en-US" xml:id="id5"> + <delta attr="this-is-att-value" xml:lang="no-nb"/> + <omicron xml:lang="en-GB"> + <pi> + <xi/> + <tau or="attribute-value" xml:lang="en-US"> + <phi xml:lang="en-GB" xml:id="id6"/> + <chi xml:id="id7"/> + <iota xml:lang="nb"> + <omega xml:lang="en-GB"> + <green>This text must be green</green> + </omega> + </iota> + </tau> + </pi> + </omicron> + </alpha> + </any> + </rho> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en-US"][@xml:id="id1"]/psi[@xml:lang="en-US"][not(preceding-sibling::*)]/kappa[@number][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[starts-with(@delete,"attribute")][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::upsilon[@src][@xml:id="id2"][following-sibling::*[position()=3]][following-sibling::alpha[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[starts-with(@attribute,"12")][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id4"]//tau[@attrib="false"][@xml:lang="no-nb"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]</xpath> + <tree> + <chi xml:lang="en-US" xml:id="id1"> + <psi xml:lang="en-US"> + <kappa number="123456789" xml:lang="en-US"> + <pi delete="attribute-value"/> + <upsilon src="100%" xml:id="id2"/> + <alpha xml:lang="no-nb" xml:id="id3"/> + <epsilon attribute="123456789"/> + <alpha xml:lang="en-GB" xml:id="id4"> + <tau attrib="false" xml:lang="no-nb"> + <green>This text must be green</green> + </tau> + </alpha> + </kappa> + </psi> + </chi> + </tree> + </test> + <test> + <xpath>//nu[starts-with(@token,"this.no")]//iota[@xml:lang="en"][following-sibling::alpha[@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]]//phi[contains(@attr,"tribu")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::eta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::phi[starts-with(concat(@and,"-"),"another attribute value-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]]//sigma[not(preceding-sibling::*)][not(following-sibling::*)]//pi[@xml:lang="en"][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//tau[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@xml:lang="no-nb"][following-sibling::eta[@attr][@xml:lang="en-GB"][@xml:id="id5"]/tau[starts-with(@attr,"1234567")][@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[contains(@desciption,"co")][@xml:lang="en-GB"][@xml:id="id7"]//eta[not(following-sibling::*)]/gamma[contains(concat(@attribute,"$"),"lse$")][@xml:lang="en-US"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[not(preceding-sibling::*)]/psi[@or][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::nu[@object][@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]]]</xpath> + <tree> + <nu token="this.nodeValue"> + <iota xml:lang="en"/> + <alpha xml:lang="no-nb" xml:id="id1"> + <phi attr="attribute" xml:lang="en-US" xml:id="id2"/> + <eta/> + <phi and="another attribute value" xml:lang="no-nb"/> + <psi xml:lang="en-GB"> + <sigma> + <pi xml:lang="en"/> + <upsilon xml:lang="no-nb" xml:id="id3"> + <tau xml:lang="no" xml:id="id4"> + <rho xml:lang="no-nb"/> + <eta attr="another attribute value" xml:lang="en-GB" xml:id="id5"> + <tau attr="123456789" xml:lang="nb" xml:id="id6"/> + <xi desciption="content" xml:lang="en-GB" xml:id="id7"> + <eta> + <gamma attribute="false" xml:lang="en-US" xml:id="id8"> + <mu xml:id="id9"> + <omicron> + <psi or="another attribute value" xml:lang="no-nb"/> + <nu object="attribute" xml:lang="nb" xml:id="id10"> + <green>This text must be green</green> + </nu> + </omicron> + </mu> + </gamma> + </eta> + </xi> + </eta> + </tau> + </upsilon> + </sigma> + </psi> + </alpha> + </nu> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]//eta[contains(concat(@abort,"$"),"lue$")][@xml:id="id2"][not(child::node())][following-sibling::gamma[@number="solid 1px green"][@xml:id="id3"][following-sibling::phi[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="no"][preceding-sibling::*[position() = 2]][following-sibling::eta[preceding-sibling::*[position() = 3]][not(following-sibling::*)]//epsilon[contains(concat(@false,"$"),"ute value$")][not(following-sibling::*)]//eta[contains(concat(@and,"$"),"odeValue$")][@xml:lang="en-GB"][not(following-sibling::*)]//xi[@name][@xml:id="id4"][not(child::node())][following-sibling::sigma[starts-with(concat(@true,"-"),"attribute-")][@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::gamma[not(preceding-sibling::gamma or following-sibling::gamma)]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <iota xml:id="id1"> + <eta abort="attribute value" xml:id="id2"/> + <gamma number="solid 1px green" xml:id="id3"/> + <phi false="123456789" xml:lang="no"/> + <eta> + <epsilon false="another attribute value"> + <eta and="this.nodeValue" xml:lang="en-GB"> + <xi name="this-is-att-value" xml:id="id4"/> + <sigma true="attribute" xml:lang="no" xml:id="id5"/> + <gamma> + <green>This text must be green</green> + </gamma> + </eta> + </epsilon> + </eta> + </iota> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(concat(@attribute,"-"),"this-")]/tau[not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@src][preceding-sibling::*[position() = 1]][following-sibling::iota[@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 2]][following-sibling::phi[contains(@object,"789")][following-sibling::*[position()=1]][following-sibling::alpha[@xml:id="id2"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//psi[@xml:id="id3"]//epsilon[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]/xi[starts-with(concat(@class,"-"),"attribute value-")][@xml:lang="en-US"][not(preceding-sibling::*)]//epsilon[@xml:lang="en"][not(following-sibling::*)]//epsilon[@xml:lang="no"][not(preceding-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <upsilon attribute="this-is-att-value"> + <tau/> + <lambda src="true"/> + <iota xml:lang="no-nb" xml:id="id1"/> + <phi object="123456789"/> + <alpha xml:id="id2"> + <psi xml:id="id3"> + <epsilon xml:lang="no" xml:id="id4"/> + <theta xml:lang="no-nb"> + <xi class="attribute value" xml:lang="en-US"> + <epsilon xml:lang="en"> + <epsilon xml:lang="no"> + <green>This text must be green</green> + </epsilon> + </epsilon> + </xi> + </theta> + </psi> + </alpha> + </upsilon> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(concat(@and,"-"),"attribute value-")][@xml:lang="nb"]/zeta[contains(concat(@token,"$"),"this.nodeValue$")][@xml:lang="no"][@xml:id="id1"][following-sibling::iota[@xml:id="id2"][not(following-sibling::*)]//mu[@xml:lang="no"][@xml:id="id3"][not(following-sibling::*)]//tau[@xml:lang="en-US"][@xml:id="id4"]//upsilon[@xml:id="id5"][not(following-sibling::*)]//theta[@attribute][@xml:lang="en-US"][@xml:id="id6"][not(child::node())][following-sibling::upsilon[@abort="another attribute value"][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::upsilon)][not(child::node())][following-sibling::mu[@att="attribute value"][@xml:lang="no"]//tau[starts-with(concat(@string,"-"),"another attribute value-")][@xml:lang="no"][@xml:id="id8"][not(child::node())][following-sibling::rho[@xml:id="id9"]/delta[@xml:lang="en"][not(preceding-sibling::*)]//gamma[not(child::node())][following-sibling::epsilon[@att="this.nodeValue"][@xml:id="id10"][preceding-sibling::*[position() = 1]]/pi[@class="true"][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <alpha and="attribute value" xml:lang="nb"> + <zeta token="this.nodeValue" xml:lang="no" xml:id="id1"/> + <iota xml:id="id2"> + <mu xml:lang="no" xml:id="id3"> + <tau xml:lang="en-US" xml:id="id4"> + <upsilon xml:id="id5"> + <theta attribute="true" xml:lang="en-US" xml:id="id6"/> + <upsilon abort="another attribute value" xml:lang="en-US" xml:id="id7"/> + <mu att="attribute value" xml:lang="no"> + <tau string="another attribute value" xml:lang="no" xml:id="id8"/> + <rho xml:id="id9"> + <delta xml:lang="en"> + <gamma/> + <epsilon att="this.nodeValue" xml:id="id10"> + <pi class="true" xml:lang="nb"> + <green>This text must be green</green> + </pi> + </epsilon> + </delta> + </rho> + </mu> + </upsilon> + </tau> + </mu> + </iota> + </alpha> + </tree> + </test> + <test> + <xpath>//psi/theta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)][not(parent::*/*[position()=2])]/omicron[starts-with(@abort,"attribut")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@desciption="content"][@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::mu[@xml:lang="en-US"][not(following-sibling::*)]//eta[@object][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)]//chi[@xml:id="id2"][following-sibling::lambda[contains(@attribute,"45")][@xml:id="id3"][preceding-sibling::*[position() = 1]]//omega[@attr="100%"][not(preceding-sibling::*)][following-sibling::*[@attr="attribute"][@xml:lang="en"][@xml:id="id4"][not(following-sibling::*)]//rho[contains(concat(@desciption,"$"),"ttribute-value$")][@xml:id="id5"][not(child::node())][following-sibling::iota[@xml:lang="no"][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[@xml:lang="no"][following-sibling::delta[@xml:lang="nb"][@xml:id="id6"][position() = 1]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <psi> + <theta xml:lang="en-GB"> + <omicron abort="attribute" xml:lang="no"/> + <omicron desciption="content" xml:lang="no"/> + <mu xml:lang="en-US"> + <eta object="100%"> + <upsilon xml:lang="nb" xml:id="id1"> + <chi xml:id="id2"/> + <lambda attribute="123456789" xml:id="id3"> + <omega attr="100%"/> + <any attr="attribute" xml:lang="en" xml:id="id4"> + <rho desciption="attribute-value" xml:id="id5"/> + <iota xml:lang="no"/> + <chi xml:lang="no"/> + <delta xml:lang="nb" xml:id="id6"> + <green>This text must be green</green> + </delta> + </any> + </lambda> + </upsilon> + </eta> + </mu> + </theta> + </psi> + </tree> + </test> + <test> + <xpath>//eta[contains(concat(@name,"$"),"ank$")]/iota[@number="another attribute value"][not(following-sibling::*)]/rho[@xml:lang="en-GB"][not(following-sibling::*)]//xi[@false][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[@xml:lang="en"]//pi[contains(@desciption,"s-")][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[contains(@desciption,"en")][@xml:lang="en-US"][following-sibling::*[position()=1]][following-sibling::nu[@xml:id="id3"][preceding-sibling::*[position() = 2]]//pi[not(child::node())][following-sibling::eta[not(following-sibling::*)]/xi[@xml:id="id4"]/tau[@xml:lang="nb"][following-sibling::sigma[contains(@att,"e")][@xml:lang="en-GB"][following-sibling::upsilon[@att][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/tau[not(following-sibling::*)]//omicron[starts-with(@data,"_blank")][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::phi)]//epsilon[@or][not(preceding-sibling::*)][following-sibling::tau[@desciption][@xml:id="id8"][preceding-sibling::*[position() = 1]]]][position() = 1]]]]]</xpath> + <tree> + <eta name="_blank"> + <iota number="another attribute value"> + <rho xml:lang="en-GB"> + <xi false="true" xml:lang="en-US" xml:id="id1"> + <alpha xml:lang="en"> + <pi desciption="this-is-att-value"> + <delta xml:lang="en-GB" xml:id="id2"/> + <theta desciption="solid 1px green" xml:lang="en-US"/> + <nu xml:id="id3"> + <pi/> + <eta> + <xi xml:id="id4"> + <tau xml:lang="nb"/> + <sigma att="attribute value" xml:lang="en-GB"/> + <upsilon att="another attribute value" xml:id="id5"> + <tau> + <omicron data="_blank"> + <lambda xml:lang="no-nb" xml:id="id6"> + <phi xml:lang="en-GB" xml:id="id7"> + <epsilon or="attribute-value"/> + <tau desciption="this-is-att-value" xml:id="id8"> + <green>This text must be green</green> + </tau> + </phi> + </lambda> + </omicron> + </tau> + </upsilon> + </xi> + </eta> + </nu> + </pi> + </alpha> + </xi> + </rho> + </iota> + </eta> + </tree> + </test> + <test> + <xpath>//tau[@and][@xml:lang="nb"][@xml:id="id1"]/pi[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[starts-with(@attribute,"tru")][@xml:lang="en"][@xml:id="id4"][not(child::node())][following-sibling::kappa[starts-with(concat(@or,"-"),"solid 1px green-")][not(following-sibling::kappa)]/iota[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::gamma[contains(concat(@false,"$"),"value$")][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::*[position()=3]][following-sibling::delta[@xml:lang="nb"][@xml:id="id7"][following-sibling::chi[@xml:lang="no"][@xml:id="id8"][preceding-sibling::*[position() = 3]][following-sibling::theta[@attribute="content"]/lambda[@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@name="this.nodeValue"][@xml:lang="en"][following-sibling::*[position()=3]][following-sibling::kappa[following-sibling::beta[starts-with(concat(@attribute,"-"),"100%-")][@xml:id="id11"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@attrib][@xml:lang="no-nb"][@xml:id="id12"][preceding-sibling::*[position() = 5]][not(following-sibling::*)][position() = 1]][position() = 1]]]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <tau and="this-is-att-value" xml:lang="nb" xml:id="id1"> + <pi xml:id="id2"> + <omega xml:lang="en-GB" xml:id="id3"> + <pi attribute="true" xml:lang="en" xml:id="id4"/> + <kappa or="solid 1px green"> + <iota xml:lang="no-nb" xml:id="id5"/> + <gamma false="attribute value" xml:lang="en-GB" xml:id="id6"/> + <delta xml:lang="nb" xml:id="id7"/> + <chi xml:lang="no" xml:id="id8"/> + <theta attribute="content"> + <lambda xml:id="id9"/> + <gamma xml:lang="nb" xml:id="id10"/> + <omega name="this.nodeValue" xml:lang="en"/> + <kappa/> + <beta attribute="100%" xml:id="id11"/> + <pi attrib="this.nodeValue" xml:lang="no-nb" xml:id="id12"> + <green>This text must be green</green> + </pi> + </theta> + </kappa> + </omega> + </pi> + </tau> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]/omega[@attribute][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::chi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::*[preceding-sibling::*[position() = 2]][following-sibling::alpha[@xml:id="id2"][not(child::node())][following-sibling::zeta[@xml:lang="nb"][not(following-sibling::*)]//pi[contains(concat(@false,"$"),"false$")][@xml:lang="en-US"]/alpha[contains(@content,"his.nodeV")][@xml:id="id3"][not(following-sibling::*)]/gamma[@xml:lang="en-US"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::pi[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <xi xml:id="id1"> + <omega attribute="100%" xml:lang="no-nb"/> + <chi xml:lang="no-nb"/> + <any/> + <alpha xml:id="id2"/> + <zeta xml:lang="nb"> + <pi false="false" xml:lang="en-US"> + <alpha content="this.nodeValue" xml:id="id3"> + <gamma xml:lang="en-US" xml:id="id4"/> + <pi xml:lang="en-US" xml:id="id5"> + <green>This text must be green</green> + </pi> + </alpha> + </pi> + </zeta> + </xi> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="nb"]//pi[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//theta[starts-with(concat(@src,"-"),"content-")][@xml:lang="no"][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::nu[contains(concat(@string,"$"),"ibute value$")][@xml:lang="en-US"][not(following-sibling::*)]//chi[@xml:lang="en-US"]/gamma[not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@xml:lang="nb"][@xml:id="id6"]/iota[@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]/iota[@string="100%"][following-sibling::*[position()=6]][not(child::node())][following-sibling::xi[starts-with(concat(@number,"-"),"false-")][@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(preceding-sibling::xi)][following-sibling::sigma[@and][@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::rho[contains(@attribute,"0")][not(child::node())][following-sibling::kappa[starts-with(@att,"at")][not(child::node())][following-sibling::eta[@false][@xml:lang="en-GB"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::tau[@delete="false"][@xml:lang="en"][not(following-sibling::*)]/nu[@false][@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][not(preceding-sibling::nu or following-sibling::nu)][position() = 1]]][position() = 1]][position() = 1]]]]]]]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="nb"> + <pi xml:id="id1"> + <beta xml:lang="no" xml:id="id2"/> + <sigma xml:lang="no"/> + <zeta xml:lang="en-US" xml:id="id3"> + <theta src="content" xml:lang="no"/> + <rho xml:lang="en-GB" xml:id="id4"/> + <psi xml:id="id5"/> + <nu string="attribute value" xml:lang="en-US"> + <chi xml:lang="en-US"> + <gamma> + <kappa xml:lang="nb" xml:id="id6"> + <iota xml:lang="no-nb" xml:id="id7"> + <iota string="100%"/> + <xi number="false" xml:lang="en-US" xml:id="id8"/> + <sigma and="attribute value" xml:lang="nb"/> + <rho attribute="100%"/> + <kappa att="attribute"/> + <eta false="content" xml:lang="en-GB"/> + <tau delete="false" xml:lang="en"> + <nu false="_blank" xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </nu> + </tau> + </iota> + </kappa> + </gamma> + </chi> + </nu> + </zeta> + </pi> + </upsilon> + </tree> + </test> + <test> + <xpath>//beta//omicron[not(child::node())][following-sibling::gamma[@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]//sigma[starts-with(@name,"at")][@xml:lang="no-nb"][following-sibling::*[position()=4]][following-sibling::iota[starts-with(concat(@title,"-"),"solid 1px green-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::iota[contains(@src,"odeValue")][@xml:lang="nb"][preceding-sibling::*[position() = 3]][following-sibling::rho[contains(@data,"eValue")][@xml:id="id2"][not(following-sibling::*)]/kappa[contains(concat(@class,"$"),"alse$")][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::eta[starts-with(@desciption,"attribu")][@xml:id="id4"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <beta> + <omicron/> + <gamma xml:lang="en-GB" xml:id="id1"> + <sigma name="attribute-value" xml:lang="no-nb"/> + <iota title="solid 1px green"/> + <xi xml:lang="en-GB"/> + <iota src="this.nodeValue" xml:lang="nb"/> + <rho data="this.nodeValue" xml:id="id2"> + <kappa class="false" xml:lang="en" xml:id="id3"/> + <eta desciption="attribute-value" xml:id="id4"> + <green>This text must be green</green> + </eta> + </rho> + </gamma> + </beta> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]/eta[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[starts-with(concat(@title,"-"),"_blank-")][@xml:lang="en-GB"][following-sibling::mu[@attrib][@xml:id="id3"][following-sibling::mu[@string][not(following-sibling::*)]/lambda[@xml:lang="en-GB"][@xml:id="id4"][following-sibling::phi[contains(@object,"k")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]]</xpath> + <tree> + <zeta xml:id="id1"> + <eta xml:lang="no-nb" xml:id="id2"> + <iota title="_blank" xml:lang="en-GB"/> + <mu attrib="false" xml:id="id3"/> + <mu string="123456789"> + <lambda xml:lang="en-GB" xml:id="id4"/> + <phi object="_blank" xml:id="id5"> + <green>This text must be green</green> + </phi> + </mu> + </eta> + </zeta> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="no-nb"]/rho[@xml:lang="no-nb"][following-sibling::*[position()=1]][not(following-sibling::rho)][following-sibling::mu[contains(concat(@insert,"$"),"eValue$")][@xml:lang="no-nb"]//kappa[contains(concat(@false,"$"),"attribute$")][following-sibling::*[position()=2]][following-sibling::sigma[starts-with(concat(@abort,"-"),"attribute-")][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[not(following-sibling::*)]//zeta[@xml:lang="nb"][not(following-sibling::*)]/upsilon[not(child::node())][following-sibling::sigma[starts-with(concat(@delete,"-"),"solid 1px green-")][@xml:lang="en-GB"][@xml:id="id1"][not(child::node())][following-sibling::psi[@desciption][@xml:id="id2"][preceding-sibling::*[position() = 2]]/xi[@string][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::upsilon[@or="attribute value"][@xml:id="id4"]//gamma[starts-with(@title,"this.")][@xml:lang="nb"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <chi xml:lang="no-nb"> + <rho xml:lang="no-nb"/> + <mu insert="this.nodeValue" xml:lang="no-nb"> + <kappa false="attribute"/> + <sigma abort="attribute-value" xml:lang="no-nb"/> + <pi> + <zeta xml:lang="nb"> + <upsilon/> + <sigma delete="solid 1px green" xml:lang="en-GB" xml:id="id1"/> + <psi desciption="123456789" xml:id="id2"> + <xi string="attribute" xml:lang="en" xml:id="id3"/> + <upsilon or="attribute value" xml:id="id4"> + <gamma title="this.nodeValue" xml:lang="nb"> + <green>This text must be green</green> + </gamma> + </upsilon> + </psi> + </zeta> + </pi> + </mu> + </chi> + </tree> + </test> + <test> + <xpath>//gamma[contains(concat(@object,"$"),"nodeValue$")][@xml:id="id1"]/phi[contains(@title,"thi")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[contains(@number,"ue")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//alpha[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::eta[@insert][preceding-sibling::*[position() = 1]][following-sibling::rho[@abort][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//beta[@desciption][following-sibling::*[position()=4]][following-sibling::psi[starts-with(concat(@false,"-"),"solid 1px green-")][@xml:id="id5"][following-sibling::zeta[starts-with(concat(@name,"-"),"100%-")][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[@and="content"][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::epsilon[starts-with(@desciption,"this-is-att-value")][@xml:lang="en"][not(following-sibling::*)]/alpha[@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@content][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/theta[contains(concat(@delete,"$"),"false$")][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 1]]/gamma[contains(concat(@true,"$"),"100%$")][@xml:lang="en"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]]]]][position() = 1]]]</xpath> + <tree> + <gamma object="this.nodeValue" xml:id="id1"> + <phi title="this.nodeValue" xml:id="id2"/> + <omicron number="this-is-att-value"> + <alpha xml:id="id3"/> + <eta insert="attribute value"/> + <rho abort="attribute" xml:id="id4"> + <beta desciption="content"/> + <psi false="solid 1px green" xml:id="id5"/> + <zeta name="100%"/> + <xi and="content" xml:lang="no" xml:id="id6"/> + <epsilon desciption="this-is-att-value" xml:lang="en"> + <alpha xml:lang="en-GB" xml:id="id7"/> + <iota content="attribute value" xml:lang="nb"> + <theta delete="false" xml:id="id8"/> + <phi xml:lang="nb" xml:id="id9"> + <gamma true="100%" xml:lang="en" xml:id="id10"> + <green>This text must be green</green> + </gamma> + </phi> + </iota> + </epsilon> + </rho> + </omicron> + </gamma> + </tree> + </test> + <test> + <xpath>//gamma[contains(concat(@class,"$"),"ue$")][@xml:lang="en"]/psi[@name][@xml:id="id1"][not(preceding-sibling::*)]/mu[not(preceding-sibling::*)][not(following-sibling::*)]//psi[starts-with(concat(@attribute,"-"),"false-")][@xml:lang="no"][not(following-sibling::*)]/omicron[starts-with(concat(@src,"-"),"content-")][not(preceding-sibling::*)][following-sibling::epsilon[contains(concat(@class,"$"),"ent$")][@xml:id="id2"]//eta[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::zeta[@false="_blank"][@xml:lang="no"][preceding-sibling::*[position() = 1]]/epsilon[not(preceding-sibling::*)][following-sibling::epsilon[@xml:lang="nb"][not(child::node())][following-sibling::upsilon[@attribute]/lambda[@att][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[contains(@src,"89")][preceding-sibling::*[position() = 1]]/theta/chi[@xml:lang="en-GB"][not(following-sibling::*)]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <gamma class="attribute-value" xml:lang="en"> + <psi name="123456789" xml:id="id1"> + <mu> + <psi attribute="false" xml:lang="no"> + <omicron src="content"/> + <epsilon class="content" xml:id="id2"> + <eta xml:lang="en-US"/> + <zeta false="_blank" xml:lang="no"> + <epsilon/> + <epsilon xml:lang="nb"/> + <upsilon attribute="_blank"> + <lambda att="another attribute value"/> + <pi src="123456789"> + <theta> + <chi xml:lang="en-GB"> + <green>This text must be green</green> + </chi> + </theta> + </pi> + </upsilon> + </zeta> + </epsilon> + </psi> + </mu> + </psi> + </gamma> + </tree> + </test> + <test> + <xpath>//phi[@desciption]//tau[@attribute="solid 1px green"][@xml:id="id1"][following-sibling::theta[@attr][preceding-sibling::*[position() = 1]][following-sibling::chi[starts-with(@name,"this-is-att-v")][@xml:lang="en-US"][following-sibling::xi[@xml:id="id2"][not(child::node())][following-sibling::theta[starts-with(@desciption,"_bla")][@xml:id="id3"][not(following-sibling::*)]//alpha[@object][@xml:id="id4"][not(preceding-sibling::*)][position() = 1]]]][position() = 1]]</xpath> + <tree> + <phi desciption="solid 1px green"> + <tau attribute="solid 1px green" xml:id="id1"/> + <theta attr="another attribute value"/> + <chi name="this-is-att-value" xml:lang="en-US"/> + <xi xml:id="id2"/> + <theta desciption="_blank" xml:id="id3"> + <alpha object="_blank" xml:id="id4"> + <green>This text must be green</green> + </alpha> + </theta> + </phi> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]//xi[contains(@insert,"e")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[not(following-sibling::*)]//delta[@xml:lang="nb"][not(child::node())][following-sibling::pi[following-sibling::beta[starts-with(concat(@false,"-"),"true-")][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/beta[starts-with(@data,"another attr")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[@xml:lang="en-US"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:id="id1"> + <xi insert="attribute value" xml:lang="en"/> + <epsilon> + <delta xml:lang="nb"/> + <pi/> + <beta false="true" xml:lang="no-nb" xml:id="id2"> + <beta data="another attribute value" xml:id="id3"> + <gamma xml:lang="en-US"> + <green>This text must be green</green> + </gamma> + </beta> + </beta> + </epsilon> + </iota> + </tree> + </test> + <test> + <xpath>//theta[@abort][@xml:lang="en-US"][@xml:id="id1"]//delta[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::epsilon[@title="true"][@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]/lambda[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::mu[@xml:lang="no"][@xml:id="id5"][following-sibling::epsilon[@xml:lang="no"][position() = 1]]]][position() = 1]]</xpath> + <tree> + <theta abort="_blank" xml:lang="en-US" xml:id="id1"> + <delta xml:lang="no-nb" xml:id="id2"/> + <upsilon xml:lang="en"/> + <epsilon title="true" xml:lang="nb" xml:id="id3"> + <lambda xml:id="id4"/> + <mu xml:lang="no" xml:id="id5"/> + <epsilon xml:lang="no"> + <green>This text must be green</green> + </epsilon> + </epsilon> + </theta> + </tree> + </test> + <test> + <xpath>//delta[contains(concat(@insert,"$"),"att-value$")][@xml:lang="en-GB"]//omicron[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id1"][preceding-sibling::*[position() = 1]]//theta[starts-with(@object,"t")][@xml:id="id2"][not(following-sibling::*)]//xi[starts-with(@content,"100%")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::omega[starts-with(@object,"another attribu")][@xml:id="id3"][not(child::node())][following-sibling::nu[@xml:lang="no"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]][position() = 1]]]</xpath> + <tree> + <delta insert="this-is-att-value" xml:lang="en-GB"> + <omicron/> + <psi xml:lang="no" xml:id="id1"> + <theta object="this-is-att-value" xml:id="id2"> + <xi content="100%" xml:lang="no-nb"/> + <omega object="another attribute value" xml:id="id3"/> + <nu xml:lang="no"/> + <omega xml:lang="no"> + <green>This text must be green</green> + </omega> + </theta> + </psi> + </delta> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]/omicron[@xml:lang="en"][@xml:id="id2"][following-sibling::theta[@title="solid 1px green"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::omicron)]//psi[contains(concat(@false,"$"),"e$")][@xml:lang="nb"][@xml:id="id4"]/phi[@or][@xml:lang="en-US"][not(following-sibling::*)]//kappa[starts-with(@class,"12")][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[@xml:lang="no-nb"][not(preceding-sibling::*)]/theta[contains(concat(@att,"$"),"rue$")][@xml:id="id5"][not(preceding-sibling::*)]/theta[@insert][@xml:lang="en-US"][not(preceding-sibling::*)]/rho[contains(concat(@attribute,"$"),"lank$")][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::sigma[@xml:id="id6"][not(child::node())][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id7"]//delta//psi[@xml:id="id8"][not(child::node())][following-sibling::kappa[@attr][@xml:lang="no"][@xml:id="id9"]//eta[@attrib="100%"][@xml:lang="en-GB"][@xml:id="id10"]/tau[starts-with(@number,"_blank")][@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <rho xml:id="id1"> + <omicron xml:lang="en" xml:id="id2"/> + <theta title="solid 1px green"> + <delta> + <omicron xml:lang="nb" xml:id="id3"> + <psi false="false" xml:lang="nb" xml:id="id4"> + <phi or="attribute value" xml:lang="en-US"> + <kappa class="123456789"> + <gamma xml:lang="no-nb"> + <theta att="true" xml:id="id5"> + <theta insert="_blank" xml:lang="en-US"> + <rho attribute="_blank"/> + <sigma xml:id="id6"/> + <zeta xml:lang="en-GB" xml:id="id7"> + <delta> + <psi xml:id="id8"/> + <kappa attr="attribute-value" xml:lang="no" xml:id="id9"> + <eta attrib="100%" xml:lang="en-GB" xml:id="id10"> + <tau number="_blank" xml:lang="nb" xml:id="id11"> + <green>This text must be green</green> + </tau> + </eta> + </kappa> + </delta> + </zeta> + </theta> + </theta> + </gamma> + </kappa> + </phi> + </psi> + </omicron> + </delta> + </theta> + </rho> + </tree> + </test> + <test> + <xpath>//xi[@xml:lang="en-US"]//omega[contains(concat(@object,"$"),"123456789$")][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@xml:lang="en-GB"][following-sibling::*[position()=2]][following-sibling::rho[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@attr][@xml:id="id1"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/lambda[starts-with(@number,"this.nodeValu")][@xml:id="id2"][not(following-sibling::*)]//omicron[contains(concat(@class,"$"),"0%$")][not(following-sibling::*)]//mu[contains(concat(@data,"$"),"te$")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::mu[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 1]]/rho[starts-with(concat(@attrib,"-"),"123456789-")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@false="attribute value"][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@attrib="this-is-att-value"][@xml:id="id7"]//theta[not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@abort][preceding-sibling::*[position() = 1]][following-sibling::delta[contains(@title,"ibute-")][@xml:lang="en-GB"]/epsilon[starts-with(@and,"tr")][@xml:lang="en-US"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi xml:lang="en-US"> + <omega object="123456789"/> + <mu xml:lang="en-GB"/> + <rho xml:lang="nb"/> + <iota attr="_blank" xml:id="id1"> + <lambda number="this.nodeValue" xml:id="id2"> + <omicron class="100%"> + <mu data="attribute" xml:id="id3"> + <phi xml:lang="no"/> + <mu xml:lang="en" xml:id="id4"> + <rho attrib="123456789" xml:id="id5"/> + <omicron false="attribute value" xml:id="id6"/> + <xi attrib="this-is-att-value" xml:id="id7"> + <theta/> + <epsilon abort="content"/> + <delta title="attribute-value" xml:lang="en-GB"> + <epsilon and="true" xml:lang="en-US"> + <green>This text must be green</green> + </epsilon> + </delta> + </xi> + </mu> + </mu> + </omicron> + </lambda> + </iota> + </xi> + </tree> + </test> + <test> + <xpath>//pi[contains(concat(@class,"$"),"true$")]/tau//gamma[contains(@object,"ibute")][@xml:id="id1"][not(preceding-sibling::*)]//pi//*[@or="true"][@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]//theta[starts-with(@or,"fa")][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:id="id4"][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::mu[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]/tau[contains(@or,"lank")][@xml:id="id6"][not(preceding-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <pi class="true"> + <tau> + <gamma object="attribute" xml:id="id1"> + <pi> + <any or="true" xml:lang="no-nb" xml:id="id2"> + <theta or="false" xml:lang="en-US" xml:id="id3"> + <iota xml:id="id4"/> + <nu xml:id="id5"/> + <mu xml:lang="en-GB"> + <tau or="_blank" xml:id="id6"> + <green>This text must be green</green> + </tau> + </mu> + </theta> + </any> + </pi> + </gamma> + </tau> + </pi> + </tree> + </test> + <test> + <xpath>//nu[contains(@or,"00%")][@xml:id="id1"]//xi[@xml:lang="en-US"]//gamma[@title][@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]/chi[starts-with(concat(@data,"-"),"attribute-")][@xml:id="id3"][not(preceding-sibling::*)]//alpha[contains(concat(@attribute,"$"),"x green$")][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[starts-with(concat(@attr,"-"),"solid 1px green-")]//zeta[starts-with(@desciption,"this.node")][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::zeta)]/psi[@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]//omicron[contains(concat(@desciption,"$"),"0%$")][@xml:id="id7"][not(preceding-sibling::*)]/iota[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::theta[starts-with(concat(@number,"-"),"123456789-")][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::chi[@content="attribute"][@xml:lang="no"][@xml:id="id9"][following-sibling::iota[@xml:id="id10"][preceding-sibling::*[position() = 4]][following-sibling::beta[contains(concat(@src,"$"),"ttribute$")][@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 5]]//upsilon[starts-with(@src,"a")][@xml:lang="nb"][@xml:id="id12"]//eta[starts-with(concat(@class,"-"),"123456789-")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[@xml:id="id13"][not(preceding-sibling::*)]/xi[@xml:id="id14"][not(preceding-sibling::*)]//omicron[@data][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu or="100%" xml:id="id1"> + <xi xml:lang="en-US"> + <gamma title="attribute value" xml:lang="no" xml:id="id2"> + <chi data="attribute" xml:id="id3"> + <alpha attribute="solid 1px green" xml:id="id4"/> + <phi attr="solid 1px green"> + <zeta desciption="this.nodeValue" xml:lang="no" xml:id="id5"> + <psi xml:lang="en-US" xml:id="id6"> + <omicron desciption="100%" xml:id="id7"> + <iota xml:lang="en-GB"/> + <iota/> + <theta number="123456789" xml:lang="en-GB" xml:id="id8"/> + <chi content="attribute" xml:lang="no" xml:id="id9"/> + <iota xml:id="id10"/> + <beta src="attribute" xml:lang="no" xml:id="id11"> + <upsilon src="attribute" xml:lang="nb" xml:id="id12"> + <eta class="123456789" xml:lang="nb"> + <chi xml:id="id13"> + <xi xml:id="id14"> + <omicron data="solid 1px green"> + <green>This text must be green</green> + </omicron> + </xi> + </chi> + </eta> + </upsilon> + </beta> + </omicron> + </psi> + </zeta> + </phi> + </chi> + </gamma> + </xi> + </nu> + </tree> + </test> + <test> + <xpath>//tau[@att][@xml:lang="no-nb"][@xml:id="id1"]/omega[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]//eta[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)]//delta[@number][@xml:lang="en-US"][following-sibling::beta[@string="_blank"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[contains(@object,"e")][@xml:lang="en-GB"][not(preceding-sibling::*)]/eta[contains(concat(@object,"$"),"attribute$")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[starts-with(concat(@number,"-"),"true-")][not(following-sibling::*)]//alpha[@xml:id="id4"][following-sibling::upsilon[@abort="false"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@xml:id="id5"][following-sibling::gamma[@title][@xml:id="id6"][following-sibling::sigma[contains(concat(@desciption,"$"),"e$")][@xml:lang="no"][preceding-sibling::*[position() = 2]]/epsilon[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[not(following-sibling::*)]/gamma[not(preceding-sibling::*)][following-sibling::alpha[contains(@and,"%")][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::alpha)]/eta[not(preceding-sibling::*)]//theta[starts-with(concat(@number,"-"),"solid 1px green-")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::theta)]][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <tau att="123456789" xml:lang="no-nb" xml:id="id1"> + <omega xml:lang="en" xml:id="id2"> + <eta xml:lang="en-GB" xml:id="id3"> + <delta number="100%" xml:lang="en-US"/> + <beta string="_blank"> + <psi object="true" xml:lang="en-GB"> + <eta object="attribute" xml:lang="en-US"/> + <chi number="true"> + <alpha xml:id="id4"/> + <upsilon abort="false"> + <xi xml:id="id5"/> + <gamma title="this-is-att-value" xml:id="id6"/> + <sigma desciption="this.nodeValue" xml:lang="no"> + <epsilon xml:id="id7"/> + <eta> + <gamma/> + <alpha and="100%"> + <eta> + <theta number="solid 1px green" xml:lang="nb"> + <green>This text must be green</green> + </theta> + </eta> + </alpha> + </eta> + </sigma> + </upsilon> + </chi> + </psi> + </beta> + </eta> + </omega> + </tau> + </tree> + </test> + <test> + <xpath>//eta[starts-with(concat(@false,"-"),"content-")][@xml:lang="no"]/omicron[contains(@class,"tri")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:id="id1"][following-sibling::zeta[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::eta[starts-with(@class,"co")][@xml:lang="nb"][@xml:id="id3"][following-sibling::tau[contains(@class,"ute-")][preceding-sibling::*[position() = 4]]/iota[@insert="this.nodeValue"][following-sibling::eta[starts-with(concat(@title,"-"),"attribute value-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(@false,"3456789")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]//epsilon[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]/pi[starts-with(concat(@abort,"-"),"attribute value-")][@xml:lang="no"][position() = 1]]]]]]]</xpath> + <tree> + <eta false="content" xml:lang="no"> + <omicron class="attribute" xml:lang="no-nb"/> + <xi xml:id="id1"/> + <zeta xml:lang="en" xml:id="id2"/> + <eta class="content" xml:lang="nb" xml:id="id3"/> + <tau class="attribute-value"> + <iota insert="this.nodeValue"/> + <eta title="attribute value"/> + <delta false="123456789" xml:lang="nb"> + <epsilon xml:lang="en-US" xml:id="id4"> + <pi abort="attribute value" xml:lang="no"> + <green>This text must be green</green> + </pi> + </epsilon> + </delta> + </tau> + </eta> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(concat(@or,"-"),"true-")][@xml:id="id1"]/xi[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(@attribute,"1234567")]//zeta[@src="content"][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::epsilon[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::pi[@true][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][following-sibling::psi[@class][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::psi[contains(concat(@data,"$"),"23456789$")]/alpha[@xml:lang="en"][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[starts-with(@att,"12345678")][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id5"]/upsilon[@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][not(preceding-sibling::upsilon or following-sibling::upsilon)]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha or="true" xml:id="id1"> + <xi/> + <delta attribute="123456789"> + <zeta src="content" xml:lang="nb" xml:id="id2"/> + <epsilon/> + <pi xml:lang="en" xml:id="id3"/> + <pi true="attribute-value"/> + <psi class="100%" xml:lang="no-nb"/> + <psi data="123456789"> + <alpha xml:lang="en"/> + <beta att="123456789" xml:id="id4"/> + <pi xml:lang="no-nb" xml:id="id5"> + <upsilon xml:lang="nb" xml:id="id6"> + <green>This text must be green</green> + </upsilon> + </pi> + </psi> + </delta> + </alpha> + </tree> + </test> + <test> + <xpath>//rho//tau[contains(@content,"this")][@xml:id="id1"][not(following-sibling::*)]//kappa[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=5]][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id3"][not(child::node())][following-sibling::rho[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::omega[@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::theta[preceding-sibling::*[position() = 4]][not(preceding-sibling::theta)][not(child::node())][following-sibling::sigma[contains(concat(@true,"$"),"%$")][@xml:id="id5"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <rho> + <tau content="this-is-att-value" xml:id="id1"> + <kappa xml:id="id2"> + <pi> + <lambda xml:lang="no-nb"/> + <gamma xml:lang="no-nb" xml:id="id3"/> + <rho xml:lang="nb"/> + <omega xml:lang="en" xml:id="id4"/> + <theta/> + <sigma true="100%" xml:id="id5"> + <green>This text must be green</green> + </sigma> + </pi> + </kappa> + </tau> + </rho> + </tree> + </test> + <test> + <xpath>//tau[contains(concat(@insert,"$"),"eValue$")][@xml:id="id1"]/mu[@number="solid 1px green"][@xml:id="id2"]/gamma[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::sigma[preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::alpha[starts-with(concat(@or,"-"),"this.nodeValue-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[starts-with(concat(@and,"-"),"another attribute value-")][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]]]]</xpath> + <tree> + <tau insert="this.nodeValue" xml:id="id1"> + <mu number="solid 1px green" xml:id="id2"> + <gamma xml:lang="en-US"/> + <sigma/> + <alpha or="this.nodeValue" xml:lang="no-nb"/> + <sigma and="another attribute value" xml:lang="en-GB"> + <green>This text must be green</green> + </sigma> + </mu> + </tau> + </tree> + </test> + <test> + <xpath>//omicron[@xml:id="id1"]//*[contains(@desciption,"this-is-att")][@xml:lang="en"][not(preceding-sibling::*)]//phi[starts-with(concat(@data,"-"),"attribute value-")][@xml:id="id2"][not(preceding-sibling::*)]/delta[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en"][@xml:id="id3"]/xi[contains(concat(@number,"$"),"ank$")][not(preceding-sibling::*)][not(following-sibling::*)]//phi[not(preceding-sibling::*)]//iota[starts-with(concat(@number,"-"),"this.nodeValue-")][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@abort="attribute value"][@xml:lang="no"][following-sibling::upsilon[@name][preceding-sibling::*[position() = 1]]//omega[@token][@xml:lang="no-nb"][@xml:id="id4"]//phi[@xml:lang="en"][@xml:id="id5"][following-sibling::epsilon[contains(@content,"se")][@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[not(following-sibling::*)]/sigma[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[starts-with(@or,"at")][@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[contains(@object,"i")][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <omicron xml:id="id1"> + <any desciption="this-is-att-value" xml:lang="en"> + <phi data="attribute value" xml:id="id2"> + <delta xml:lang="no-nb"/> + <psi xml:lang="en" xml:id="id3"> + <xi number="_blank"> + <phi> + <iota number="this.nodeValue"> + <theta abort="attribute value" xml:lang="no"/> + <upsilon name="_blank"> + <omega token="content" xml:lang="no-nb" xml:id="id4"> + <phi xml:lang="en" xml:id="id5"/> + <epsilon content="false" xml:lang="nb" xml:id="id6"/> + <omega> + <sigma xml:lang="en-US"> + <zeta or="attribute-value" xml:lang="nb"/> + <iota object="attribute-value"> + <green>This text must be green</green> + </iota> + </sigma> + </omega> + </omega> + </upsilon> + </iota> + </phi> + </xi> + </psi> + </phi> + </any> + </omicron> + </tree> + </test> + <test> + <xpath>//chi[@attribute][@xml:id="id1"]//upsilon[@xml:id="id2"][not(preceding-sibling::*)]/rho[@xml:id="id3"][following-sibling::*[@xml:lang="no"][following-sibling::kappa[@xml:id="id4"]/tau[@xml:lang="en-GB"][not(preceding-sibling::*)]//pi[@attrib][@xml:id="id5"][not(preceding-sibling::*)]][position() = 1]]</xpath> + <tree> + <chi attribute="another attribute value" xml:id="id1"> + <upsilon xml:id="id2"> + <rho xml:id="id3"/> + <any xml:lang="no"/> + <kappa xml:id="id4"> + <tau xml:lang="en-GB"> + <pi attrib="_blank" xml:id="id5"> + <green>This text must be green</green> + </pi> + </tau> + </kappa> + </upsilon> + </chi> + </tree> + </test> + <test> + <xpath>//rho//omega//nu[@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)]//omega[starts-with(concat(@attr,"-"),"another attribute value-")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::mu[@desciption][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[starts-with(concat(@number,"-"),"content-")][@xml:lang="en-GB"][not(preceding-sibling::*)][position() = 1]]</xpath> + <tree> + <rho> + <omega> + <nu xml:lang="no" xml:id="id1"> + <omega attr="another attribute value" xml:lang="nb"/> + <mu desciption="100%" xml:lang="no" xml:id="id2"> + <pi number="content" xml:lang="en-GB"> + <green>This text must be green</green> + </pi> + </mu> + </nu> + </omega> + </rho> + </tree> + </test> + <test> + <xpath>//gamma[@title][@xml:id="id1"]//pi[not(child::node())][following-sibling::xi[@xml:lang="en-GB"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@token][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::sigma[@xml:lang="no-nb"]/xi[contains(@number,"lue")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//delta[@xml:lang="en-GB"][not(preceding-sibling::*)]][position() = 1]]][position() = 1]]</xpath> + <tree> + <gamma title="_blank" xml:id="id1"> + <pi/> + <xi xml:lang="en-GB"/> + <iota token="_blank" xml:id="id2"/> + <sigma xml:lang="no-nb"> + <xi number="this.nodeValue" xml:lang="en-US"/> + <psi xml:lang="no-nb" xml:id="id3"> + <delta xml:lang="en-GB"> + <green>This text must be green</green> + </delta> + </psi> + </sigma> + </gamma> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@desciption,"-"),"true-")][@xml:lang="nb"][@xml:id="id1"]//sigma[@name="true"][@xml:lang="en"][not(preceding-sibling::*)]//upsilon[@attr][@xml:lang="nb"]/iota[@att][@xml:lang="en"][not(preceding-sibling::*)]/beta[@true][@xml:id="id2"]//upsilon[@insert][not(preceding-sibling::*)][following-sibling::mu[starts-with(concat(@att,"-"),"attribute value-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::beta[@xml:id="id3"][not(child::node())][following-sibling::sigma[starts-with(concat(@title,"-"),"content-")][preceding-sibling::*[position() = 3]]//chi[@attribute][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:id="id6"][following-sibling::eta[@delete][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::pi[@xml:id="id8"][not(following-sibling::*)]//zeta[@xml:lang="no-nb"][not(following-sibling::*)]/delta[@xml:lang="no"]/alpha[@xml:lang="en-US"][@xml:id="id9"][not(preceding-sibling::*)]/delta[starts-with(concat(@class,"-"),"_blank-")][not(preceding-sibling::*)]//xi[not(preceding-sibling::*)]/nu[@src][@xml:lang="en"][not(preceding-sibling::nu)][following-sibling::alpha[@xml:lang="no"][not(child::node())][following-sibling::omega[@src][@xml:lang="no"][@xml:id="id10"][not(child::node())][following-sibling::tau[starts-with(concat(@number,"-"),"123456789-")][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <delta desciption="true" xml:lang="nb" xml:id="id1"> + <sigma name="true" xml:lang="en"> + <upsilon attr="attribute" xml:lang="nb"> + <iota att="this-is-att-value" xml:lang="en"> + <beta true="attribute" xml:id="id2"> + <upsilon insert="attribute-value"/> + <mu att="attribute value" xml:lang="en"/> + <beta xml:id="id3"/> + <sigma title="content"> + <chi attribute="attribute value" xml:lang="en" xml:id="id4"> + <eta xml:lang="en" xml:id="id5"/> + <delta xml:id="id6"/> + <eta delete="solid 1px green" xml:id="id7"/> + <pi xml:id="id8"> + <zeta xml:lang="no-nb"> + <delta xml:lang="no"> + <alpha xml:lang="en-US" xml:id="id9"> + <delta class="_blank"> + <xi> + <nu src="100%" xml:lang="en"/> + <alpha xml:lang="no"/> + <omega src="attribute" xml:lang="no" xml:id="id10"/> + <tau number="123456789"> + <green>This text must be green</green> + </tau> + </xi> + </delta> + </alpha> + </delta> + </zeta> + </pi> + </chi> + </sigma> + </beta> + </iota> + </upsilon> + </sigma> + </delta> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]//tau[@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]/delta[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@attribute][@xml:id="id4"][not(following-sibling::*)]//epsilon[@attribute][@xml:lang="en-US"][following-sibling::*[position()=1]][following-sibling::rho[@and][@xml:lang="en-US"][not(following-sibling::*)]//alpha[@false][@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::alpha[@xml:id="id5"][not(following-sibling::*)]/omicron[@xml:lang="en-US"][@xml:id="id6"][following-sibling::xi[@xml:lang="en"][not(following-sibling::*)]/epsilon[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]/delta[starts-with(concat(@or,"-"),"false-")][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id8"][following-sibling::pi[contains(@and,"ute")][@xml:lang="en"][@xml:id="id9"][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <chi xml:id="id1"> + <tau xml:lang="no-nb" xml:id="id2"> + <delta xml:lang="nb" xml:id="id3"/> + <theta attribute="this.nodeValue" xml:id="id4"> + <epsilon attribute="false" xml:lang="en-US"/> + <rho and="false" xml:lang="en-US"> + <alpha false="false" xml:lang="no"/> + <alpha xml:id="id5"> + <omicron xml:lang="en-US" xml:id="id6"/> + <xi xml:lang="en"> + <epsilon xml:lang="en-US"> + <lambda xml:lang="no-nb" xml:id="id7"> + <delta or="false"/> + <delta xml:lang="en-GB" xml:id="id8"/> + <pi and="attribute" xml:lang="en" xml:id="id9"> + <green>This text must be green</green> + </pi> + </lambda> + </epsilon> + </xi> + </alpha> + </rho> + </theta> + </tau> + </chi> + </tree> + </test> + <test> + <xpath>//mu[starts-with(@abort,"1")]//*[@delete="100%"][@xml:lang="en"][following-sibling::omicron[@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::mu[@xml:lang="nb"]/kappa[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)]//chi[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <mu abort="123456789"> + <any delete="100%" xml:lang="en"/> + <omicron xml:id="id1"/> + <mu xml:lang="nb"> + <kappa xml:lang="no" xml:id="id2"> + <chi xml:lang="nb" xml:id="id3"> + <green>This text must be green</green> + </chi> + </kappa> + </mu> + </mu> + </tree> + </test> + <test> + <xpath>//eta[contains(concat(@class,"$"),"100%$")][@xml:lang="nb"]//delta[starts-with(@or,"another attribute val")][@xml:id="id1"][not(preceding-sibling::delta)]/nu[contains(@false,"6789")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]//pi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[contains(@abort,"t")][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::psi[not(following-sibling::*)]/tau[@xml:id="id4"][not(child::node())][following-sibling::nu[contains(@token,"e")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[@content][@xml:id="id6"]//pi[contains(concat(@object,"$"),"23456789$")][@xml:lang="no-nb"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@false][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::psi[not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::rho[@xml:id="id9"][preceding-sibling::*[position() = 3]]/xi[@attribute][@xml:lang="no"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::iota[contains(@src,"nk")][@xml:lang="no-nb"][not(child::node())][following-sibling::delta[starts-with(concat(@content,"-"),"100%-")][preceding-sibling::*[position() = 2]]//iota[@number][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <eta class="100%" xml:lang="nb"> + <delta or="another attribute value" xml:id="id1"> + <nu false="123456789" xml:lang="nb" xml:id="id2"> + <pi xml:lang="en-GB"/> + <psi abort="content" xml:lang="en" xml:id="id3"/> + <psi> + <tau xml:id="id4"/> + <nu token="attribute-value" xml:id="id5"> + <tau content="this.nodeValue" xml:id="id6"> + <pi object="123456789" xml:lang="no-nb" xml:id="id7"> + <upsilon false="attribute value" xml:id="id8"/> + <psi/> + <theta/> + <rho xml:id="id9"> + <xi attribute="this-is-att-value" xml:lang="no" xml:id="id10"/> + <iota src="_blank" xml:lang="no-nb"/> + <delta content="100%"> + <iota number="content" xml:id="id11"> + <green>This text must be green</green> + </iota> + </delta> + </rho> + </pi> + </tau> + </nu> + </psi> + </nu> + </delta> + </eta> + </tree> + </test> + <test> + <xpath>//nu/sigma[starts-with(@number,"attribu")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::kappa[contains(@src,"en")][not(following-sibling::*)]//zeta[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[@attrib][@xml:id="id2"][not(following-sibling::*)]//theta//chi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::kappa[@title][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="no"][@xml:id="id4"][following-sibling::lambda[@object][@xml:lang="en"][@xml:id="id5"][not(following-sibling::*)]//chi[starts-with(@object,"_b")][@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]/chi[@xml:id="id7"][not(following-sibling::*)]//phi[not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu> + <sigma number="attribute" xml:lang="en-GB"/> + <psi xml:lang="en-US" xml:id="id1"/> + <kappa src="solid 1px green"> + <zeta xml:lang="no-nb"/> + <sigma attrib="123456789" xml:id="id2"> + <theta> + <chi xml:lang="no-nb"/> + <kappa title="false" xml:lang="en-US" xml:id="id3"/> + <xi xml:lang="no" xml:id="id4"/> + <lambda object="attribute value" xml:lang="en" xml:id="id5"> + <chi object="_blank" xml:lang="en-US" xml:id="id6"> + <chi xml:id="id7"> + <phi> + <green>This text must be green</green> + </phi> + </chi> + </chi> + </lambda> + </theta> + </sigma> + </kappa> + </nu> + </tree> + </test> + <test> + <xpath>//alpha[contains(concat(@attrib,"$"),"89$")][@xml:id="id1"]//phi[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:lang="en"][not(following-sibling::*)]/kappa[contains(@abort,"eValue")][@xml:lang="no"][not(preceding-sibling::*)]//upsilon[@attr="this.nodeValue"][not(child::node())][following-sibling::sigma//omega[@class][@xml:lang="en"][following-sibling::phi[@xml:id="id2"]/gamma[contains(concat(@abort,"$"),"eValue$")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::zeta[starts-with(@attr,"1")][@xml:id="id4"][preceding-sibling::*[position() = 1]]/psi[starts-with(concat(@insert,"-"),"_blank-")][@xml:lang="no-nb"][@xml:id="id5"]//zeta[@attrib][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/omega[@true="content"]/alpha[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@data][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[@xml:id="id6"][not(following-sibling::*)]//rho[contains(concat(@att,"$"),"ue$")][@xml:id="id7"][not(preceding-sibling::*)]//*[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <alpha attrib="123456789" xml:id="id1"> + <phi src="this.nodeValue" xml:lang="en"> + <kappa abort="this.nodeValue" xml:lang="no"> + <upsilon attr="this.nodeValue"/> + <sigma> + <omega class="100%" xml:lang="en"/> + <phi xml:id="id2"> + <gamma abort="this.nodeValue" xml:lang="no-nb" xml:id="id3"/> + <zeta attr="100%" xml:id="id4"> + <psi insert="_blank" xml:lang="no-nb" xml:id="id5"> + <zeta attrib="attribute value" xml:lang="en-US"> + <omega true="content"> + <alpha xml:lang="nb"/> + <kappa data="_blank"/> + <chi xml:id="id6"> + <rho att="true" xml:id="id7"> + <any xml:lang="no"> + <green>This text must be green</green> + </any> + </rho> + </chi> + </omega> + </zeta> + </psi> + </zeta> + </phi> + </sigma> + </kappa> + </phi> + </alpha> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-GB"]//delta[@src="123456789"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[contains(@string,"ue")][@xml:lang="en-GB"][@xml:id="id1"][not(child::node())][following-sibling::chi[@xml:id="id2"][following-sibling::chi[@token="attribute-value"][@xml:lang="en"][preceding-sibling::*[position() = 2]]//alpha[contains(@or,"ute value")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::tau[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(following-sibling::omega)]/theta[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@delete][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::phi[@xml:id="id6"][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="en-GB"> + <delta src="123456789" xml:lang="no-nb"> + <nu string="true" xml:lang="en-GB" xml:id="id1"/> + <chi xml:id="id2"/> + <chi token="attribute-value" xml:lang="en"> + <alpha or="another attribute value" xml:lang="no-nb" xml:id="id3"/> + <tau xml:id="id4"/> + <omega xml:lang="en" xml:id="id5"> + <theta xml:lang="no"> + <nu delete="attribute-value" xml:lang="no"/> + <phi xml:id="id6"> + <green>This text must be green</green> + </phi> + </theta> + </omega> + </chi> + </delta> + </phi> + </tree> + </test> + <test> + <xpath>//zeta[@token="attribute"][@xml:lang="no"]/chi[@object][not(following-sibling::*)]/pi[@xml:id="id1"][not(child::node())][following-sibling::psi[contains(concat(@abort,"$"),"x green$")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/*[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[contains(@insert,"e")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[@src][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="en-US"][not(following-sibling::*)]/pi[@attr][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta token="attribute" xml:lang="no"> + <chi object="true"> + <pi xml:id="id1"/> + <psi abort="solid 1px green" xml:lang="en-US"> + <any xml:lang="en-GB"/> + <omega insert="false" xml:lang="nb"> + <tau xml:lang="no-nb" xml:id="id2"/> + <theta> + <mu src="another attribute value" xml:lang="no-nb"/> + <tau xml:lang="en-US"> + <pi attr="this.nodeValue" xml:id="id3"> + <green>This text must be green</green> + </pi> + </tau> + </theta> + </omega> + </psi> + </chi> + </zeta> + </tree> + </test> + <test> + <xpath>//zeta/psi[contains(@data,"nt")][not(preceding-sibling::*)][not(following-sibling::*)]//omega[@xml:id="id1"][following-sibling::beta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@xml:lang="no"][not(preceding-sibling::*)]//delta[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::psi[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:lang="en"][not(following-sibling::*)]//sigma[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi/pi[@xml:lang="nb"][@xml:id="id5"]/alpha[starts-with(@data,"att")][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[starts-with(@object,"tr")][@xml:lang="no"]//xi[@false="attribute"][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@string]//phi[contains(@or,"nt")][not(preceding-sibling::*)][not(following-sibling::*)]//xi[starts-with(concat(@string,"-"),"100%-")][@xml:id="id7"][not(following-sibling::*)]/nu[@data="attribute-value"][@xml:lang="en-GB"][@xml:id="id8"]/eta[starts-with(concat(@desciption,"-"),"content-")][@xml:lang="no-nb"][not(following-sibling::*)]/beta[starts-with(@string,"f")][@xml:id="id9"]/omega[not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:id="id10"][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta> + <psi data="content"> + <omega xml:id="id1"/> + <beta> + <xi xml:lang="no"> + <delta xml:lang="nb" xml:id="id2"/> + <psi xml:id="id3"/> + <lambda xml:lang="en"> + <sigma xml:lang="no-nb" xml:id="id4"/> + <chi> + <pi xml:lang="nb" xml:id="id5"> + <alpha data="attribute value" xml:id="id6"> + <delta object="true" xml:lang="no"> + <xi false="attribute" xml:lang="en-US"> + <pi string="attribute-value"> + <phi or="content"> + <xi string="100%" xml:id="id7"> + <nu data="attribute-value" xml:lang="en-GB" xml:id="id8"> + <eta desciption="content" xml:lang="no-nb"> + <beta string="false" xml:id="id9"> + <omega/> + <any xml:id="id10"> + <green>This text must be green</green> + </any> + </beta> + </eta> + </nu> + </xi> + </phi> + </pi> + </xi> + </delta> + </alpha> + </pi> + </chi> + </lambda> + </xi> + </beta> + </psi> + </zeta> + </tree> + </test> + <test> + <xpath>//epsilon[starts-with(concat(@desciption,"-"),"false-")][@xml:lang="en-US"]/iota[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::upsilon[starts-with(concat(@attrib,"-"),"false-")][@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(preceding-sibling::upsilon)]//zeta[@xml:lang="nb"][@xml:id="id3"][not(child::node())][following-sibling::eta[@xml:lang="en-US"]/iota[@xml:lang="no"][not(preceding-sibling::*)]//kappa[contains(concat(@title,"$"),"k$")][not(preceding-sibling::*)][following-sibling::gamma[@object][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::mu[@xml:id="id5"][following-sibling::xi[@xml:id="id6"][not(following-sibling::*)]/rho[@false][following-sibling::theta[starts-with(@attr,"attribut")][@xml:lang="en-GB"][not(following-sibling::*)]/*[@xml:lang="en"][not(following-sibling::*)]//nu[contains(concat(@delete,"$"),"nk$")][@xml:lang="en"][@xml:id="id7"][following-sibling::iota[starts-with(concat(@att,"-"),"attribute-")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@or="attribute-value"][@xml:lang="no"][not(following-sibling::*)][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <epsilon desciption="false" xml:lang="en-US"> + <iota xml:lang="nb"> + <iota xml:lang="nb" xml:id="id1"/> + <upsilon attrib="false" xml:lang="en-US" xml:id="id2"> + <zeta xml:lang="nb" xml:id="id3"/> + <eta xml:lang="en-US"> + <iota xml:lang="no"> + <kappa title="_blank"/> + <gamma object="this.nodeValue" xml:id="id4"/> + <mu xml:id="id5"/> + <xi xml:id="id6"> + <rho false="true"/> + <theta attr="attribute value" xml:lang="en-GB"> + <any xml:lang="en"> + <nu delete="_blank" xml:lang="en" xml:id="id7"/> + <iota att="attribute"/> + <iota or="attribute-value" xml:lang="no"> + <green>This text must be green</green> + </iota> + </any> + </theta> + </xi> + </iota> + </eta> + </upsilon> + </iota> + </epsilon> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no"]/mu[@title][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[contains(concat(@false,"$"),"ue$")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::theta[@attrib="false"][@xml:lang="en-US"][preceding-sibling::*[position() = 2]]/omicron[contains(concat(@insert,"$"),"deValue$")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[@xml:lang="nb"][not(child::node())][following-sibling::iota[contains(@desciption,"ut")][@xml:id="id5"][preceding-sibling::*[position() = 3]]//sigma[contains(@src,"e")][@xml:id="id6"]/beta[starts-with(concat(@false,"-"),"true-")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[starts-with(@att,"fal")][@xml:id="id8"][not(preceding-sibling::eta)][not(child::node())][following-sibling::xi[@xml:lang="no"][preceding-sibling::*[position() = 2]][following-sibling::mu[preceding-sibling::*[position() = 3]][following-sibling::nu[@xml:lang="en-GB"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@xml:id="id9"]//omicron[@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@title][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau xml:lang="no"> + <mu title="this-is-att-value" xml:lang="en-US" xml:id="id1"/> + <chi false="true" xml:id="id2"/> + <theta attrib="false" xml:lang="en-US"> + <omicron insert="this.nodeValue" xml:lang="no-nb" xml:id="id3"/> + <xi xml:lang="en" xml:id="id4"/> + <gamma xml:lang="nb"/> + <iota desciption="attribute-value" xml:id="id5"> + <sigma src="false" xml:id="id6"> + <beta false="true" xml:lang="no" xml:id="id7"/> + <eta att="false" xml:id="id8"/> + <xi xml:lang="no"/> + <mu/> + <nu xml:lang="en-GB"/> + <mu xml:id="id9"> + <omicron xml:id="id10"> + <beta title="attribute" xml:id="id11"> + <green>This text must be green</green> + </beta> + </omicron> + </mu> + </sigma> + </iota> + </theta> + </tau> + </tree> + </test> + <test> + <xpath>//rho[@xml:lang="no"][@xml:id="id1"]//iota[@data][not(preceding-sibling::*)]//upsilon[@attrib][not(child::node())][following-sibling::lambda[@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]/psi[contains(concat(@delete,"$"),"nk$")][@xml:lang="no-nb"][not(following-sibling::*)]/zeta[@or][@xml:lang="en-US"][@xml:id="id3"][not(child::node())][following-sibling::xi[contains(@abort,"ue")][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::gamma[starts-with(@false,"conten")][@xml:id="id5"][not(following-sibling::*)]/psi[starts-with(concat(@or,"-"),"100%-")][@xml:id="id6"][not(following-sibling::*)]/pi[@xml:id="id7"]/phi[starts-with(@insert,"false")][not(child::node())][following-sibling::tau[@data][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/gamma[@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[contains(concat(@att,"$"),"tribute-value$")][@xml:lang="nb"][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//beta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[starts-with(concat(@desciption,"-"),"attribute value-")][@xml:id="id9"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:lang="no"][@xml:id="id10"][not(following-sibling::rho)]//beta[@xml:lang="nb"]/zeta[@xml:lang="no-nb"][@xml:id="id11"][not(following-sibling::*)]//upsilon[@true="true"][@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]]]]][position() = 1]]]]</xpath> + <tree> + <rho xml:lang="no" xml:id="id1"> + <iota data="attribute value"> + <upsilon attrib="solid 1px green"/> + <lambda xml:lang="nb" xml:id="id2"> + <psi delete="_blank" xml:lang="no-nb"> + <zeta or="_blank" xml:lang="en-US" xml:id="id3"/> + <xi abort="true" xml:id="id4"/> + <gamma false="content" xml:id="id5"> + <psi or="100%" xml:id="id6"> + <pi xml:id="id7"> + <phi insert="false"/> + <tau data="100%"> + <gamma xml:lang="no-nb" xml:id="id8"> + <alpha att="attribute-value" xml:lang="nb"/> + <sigma xml:lang="en-GB"> + <beta xml:lang="no"/> + <any desciption="attribute value" xml:id="id9"/> + <rho xml:lang="no" xml:id="id10"> + <beta xml:lang="nb"> + <zeta xml:lang="no-nb" xml:id="id11"> + <upsilon true="true" xml:id="id12"> + <rho xml:lang="nb"> + <green>This text must be green</green> + </rho> + </upsilon> + </zeta> + </beta> + </rho> + </sigma> + </gamma> + </tau> + </pi> + </psi> + </gamma> + </psi> + </lambda> + </iota> + </rho> + </tree> + </test> + <test> + <xpath>//rho//rho[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::nu[@class][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[not(preceding-sibling::*)][not(following-sibling::*)]/xi[starts-with(@abort,"attribu")][@xml:lang="en-GB"][@xml:id="id3"]//theta[@xml:id="id4"][not(child::node())][following-sibling::nu[starts-with(@delete,"another attrib")][@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@class][@xml:id="id6"][following-sibling::iota[@attrib][@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[@xml:id="id8"]//gamma[contains(concat(@attrib,"$"),"lue$")][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[not(child::node())][following-sibling::*[@or][@xml:id="id10"][following-sibling::psi[@xml:lang="nb"][not(following-sibling::*)]/gamma[@content][@xml:lang="no-nb"][not(following-sibling::*)]//lambda[@xml:id="id11"][not(child::node())][following-sibling::gamma[@xml:id="id12"]/mu[@xml:id="id13"][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <rho> + <rho xml:lang="no-nb" xml:id="id1"/> + <sigma xml:lang="en-GB" xml:id="id2"/> + <nu class="false"> + <nu> + <xi abort="attribute-value" xml:lang="en-GB" xml:id="id3"> + <theta xml:id="id4"/> + <nu delete="another attribute value" xml:lang="no" xml:id="id5"> + <kappa class="_blank" xml:id="id6"/> + <iota attrib="content" xml:lang="nb" xml:id="id7"> + <psi xml:id="id8"> + <gamma attrib="this-is-att-value" xml:id="id9"> + <theta/> + <any or="attribute value" xml:id="id10"/> + <psi xml:lang="nb"> + <gamma content="123456789" xml:lang="no-nb"> + <lambda xml:id="id11"/> + <gamma xml:id="id12"> + <mu xml:id="id13"> + <green>This text must be green</green> + </mu> + </gamma> + </gamma> + </psi> + </gamma> + </psi> + </iota> + </nu> + </xi> + </nu> + </nu> + </rho> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-US"]/psi[contains(concat(@src,"$"),"value$")][@xml:id="id1"]//zeta[not(child::node())][following-sibling::pi[starts-with(@abort,"this-is-att-va")][@xml:id="id2"]//sigma[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 2]]//eta[contains(@attrib,"e")][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@true][@xml:lang="no"][following-sibling::kappa[contains(concat(@desciption,"$"),"0%$")][@xml:id="id6"][not(child::node())][following-sibling::omicron[starts-with(@attrib,"attribute-v")]/*[@and][not(preceding-sibling::any)][following-sibling::omicron[contains(@number,"ribute-value")][@xml:lang="nb"][following-sibling::eta[@xml:lang="nb"][@xml:id="id7"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <phi xml:lang="en-US"> + <psi src="attribute value" xml:id="id1"> + <zeta/> + <pi abort="this-is-att-value" xml:id="id2"> + <sigma xml:lang="en-US" xml:id="id3"/> + <omega xml:lang="en-GB"/> + <theta xml:lang="en-US" xml:id="id4"> + <eta attrib="false"> + <upsilon xml:id="id5"/> + <lambda true="this.nodeValue" xml:lang="no"/> + <kappa desciption="100%" xml:id="id6"/> + <omicron attrib="attribute-value"> + <any and="true"/> + <omicron number="attribute-value" xml:lang="nb"/> + <eta xml:lang="nb" xml:id="id7"> + <green>This text must be green</green> + </eta> + </omicron> + </eta> + </theta> + </pi> + </psi> + </phi> + </tree> + </test> + <test> + <xpath>//rho[@object="false"]/phi[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::*[@xml:id="id2"][not(following-sibling::*)]//nu[@title="attribute value"][@xml:lang="no"]/upsilon[starts-with(@desciption,"solid ")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[@attrib][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[starts-with(@true,"1")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="en"][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 2]][position() = 1]]]]]</xpath> + <tree> + <rho object="false"> + <phi xml:id="id1"/> + <any xml:id="id2"> + <nu title="attribute value" xml:lang="no"> + <upsilon desciption="solid 1px green" xml:lang="nb" xml:id="id3"/> + <tau attrib="attribute" xml:id="id4"> + <eta true="100%" xml:lang="en-US"/> + <psi xml:lang="en"/> + <eta> + <green>This text must be green</green> + </eta> + </tau> + </nu> + </any> + </rho> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]/omega[not(child::node())][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omega[starts-with(concat(@title,"-"),"false-")]/delta[@true="true"]//zeta[contains(concat(@object,"$"),"nk$")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <zeta xml:id="id1"> + <omega/> + <delta xml:id="id2"> + <omega title="false"> + <delta true="true"> + <zeta object="_blank" xml:id="id3"> + <green>This text must be green</green> + </zeta> + </delta> + </omega> + </delta> + </zeta> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no-nb"]//*[@xml:lang="no-nb"][@xml:id="id1"][not(following-sibling::*)]/xi[@xml:lang="no-nb"][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::chi[@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::lambda[@insert]//mu[@title][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::psi[@xml:lang="en-GB"][@xml:id="id5"][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"]/delta[starts-with(@src,"t")][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <kappa xml:lang="no-nb"> + <any xml:lang="no-nb" xml:id="id1"> + <xi xml:lang="no-nb"/> + <delta xml:lang="en-GB" xml:id="id2"/> + <chi xml:id="id3"/> + <lambda insert="this.nodeValue"> + <mu title="_blank" xml:id="id4"/> + <lambda xml:lang="no"/> + <psi xml:lang="en-GB" xml:id="id5"/> + <epsilon xml:lang="en-GB"> + <delta src="true" xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </delta> + </epsilon> + </lambda> + </any> + </kappa> + </tree> + </test> + <test> + <xpath>//epsilon[@or][@xml:lang="no-nb"]/eta[@false][following-sibling::mu[@false="another attribute value"][@xml:lang="en"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[@object="this-is-att-value"][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[@xml:lang="nb"][not(child::node())][following-sibling::mu[preceding-sibling::*[position() = 1]]/pi[starts-with(concat(@delete,"-"),"content-")][@xml:lang="no"]]][position() = 1]]</xpath> + <tree> + <epsilon or="attribute-value" xml:lang="no-nb"> + <eta false="this.nodeValue"/> + <mu false="another attribute value" xml:lang="en" xml:id="id1"> + <upsilon object="this-is-att-value" xml:lang="en-US"/> + <lambda xml:lang="nb" xml:id="id2"> + <eta xml:lang="nb"/> + <mu> + <pi delete="content" xml:lang="no"> + <green>This text must be green</green> + </pi> + </mu> + </lambda> + </mu> + </epsilon> + </tree> + </test> + <test> + <xpath>//omega[contains(@attribute,"u")][@xml:lang="en-US"]/zeta[@object="100%"][@xml:id="id1"][not(preceding-sibling::*)]//eta[@xml:id="id2"][not(following-sibling::*)]//upsilon[starts-with(concat(@token,"-"),"solid 1px green-")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@insert][following-sibling::*[position()=1]][following-sibling::tau[contains(@string,"bute")][preceding-sibling::*[position() = 1]]/omega[starts-with(concat(@and,"-"),"this.nodeValue-")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[starts-with(concat(@content,"-"),"content-")][@xml:id="id6"][preceding-sibling::*[position() = 1]]//omicron[starts-with(@insert,"_bl")][@xml:lang="no"]//zeta[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id8"][following-sibling::*[position()=2]][not(preceding-sibling::alpha)][following-sibling::psi[@xml:lang="no"][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::nu[@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//alpha[@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::beta[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[@xml:lang="en"][@xml:id="id12"][not(preceding-sibling::*)]/epsilon[contains(@true,"Value")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[@true][@xml:lang="no-nb"][@xml:id="id13"][not(child::node())][following-sibling::tau[@xml:id="id14"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]]</xpath> + <tree> + <omega attribute="true" xml:lang="en-US"> + <zeta object="100%" xml:id="id1"> + <eta xml:id="id2"> + <upsilon token="solid 1px green" xml:lang="nb" xml:id="id3"> + <iota insert="another attribute value"/> + <tau string="attribute value"> + <omega and="this.nodeValue" xml:lang="en" xml:id="id4"> + <eta xml:id="id5"/> + <nu content="content" xml:id="id6"> + <omicron insert="_blank" xml:lang="no"> + <zeta xml:id="id7"/> + <alpha xml:id="id8"/> + <psi xml:lang="no" xml:id="id9"/> + <nu xml:lang="nb" xml:id="id10"> + <alpha xml:id="id11"/> + <beta xml:lang="nb"> + <lambda xml:lang="en" xml:id="id12"> + <epsilon true="this.nodeValue" xml:lang="en-US"> + <tau true="123456789" xml:lang="no-nb" xml:id="id13"/> + <tau xml:id="id14"> + <green>This text must be green</green> + </tau> + </epsilon> + </lambda> + </beta> + </nu> + </omicron> + </nu> + </omega> + </tau> + </upsilon> + </eta> + </zeta> + </omega> + </tree> + </test> + <test> + <xpath>//xi[@true]//xi[not(preceding-sibling::*)][following-sibling::upsilon[contains(@or,"tent")][preceding-sibling::*[position() = 1]]/kappa[@attrib][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@name][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::xi[contains(@abort,"23456789")][@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 2]][following-sibling::alpha[following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]//beta[@object][@xml:lang="en-US"][not(preceding-sibling::*)]/phi[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(preceding-sibling::phi)][not(child::node())][following-sibling::gamma[starts-with(concat(@attribute,"-"),"this-")][following-sibling::theta[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi true="123456789"> + <xi/> + <upsilon or="content"> + <kappa attrib="false"/> + <phi name="another attribute value" xml:lang="no-nb"/> + <xi abort="123456789" xml:lang="en-US" xml:id="id1"/> + <alpha/> + <omicron xml:lang="nb" xml:id="id2"> + <beta object="this-is-att-value" xml:lang="en-US"> + <phi xml:lang="en-US" xml:id="id3"/> + <gamma attribute="this-is-att-value"/> + <theta xml:lang="en" xml:id="id4"> + <green>This text must be green</green> + </theta> + </beta> + </omicron> + </upsilon> + </xi> + </tree> + </test> + <test> + <xpath>//lambda[contains(concat(@attr,"$"),"ontent$")][@xml:lang="no-nb"][@xml:id="id1"]/pi[@xml:lang="en-US"][@xml:id="id2"]//sigma[starts-with(concat(@true,"-"),"attribute-")][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::psi[starts-with(concat(@src,"-"),"_blank-")][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[starts-with(@name,"_b")][not(following-sibling::*)]//theta[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::chi[@attrib="attribute-value"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/zeta[contains(concat(@object,"$"),"rue$")][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[starts-with(@false,"tru")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]]/*[@xml:lang="no-nb"][not(preceding-sibling::*)]/epsilon[@xml:lang="no"][not(following-sibling::*)]/tau[@abort][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[contains(concat(@insert,"$"),"is-att-value$")][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[@attrib="false"][@xml:id="id9"][not(following-sibling::*)]/psi[@abort][@xml:lang="no-nb"][not(preceding-sibling::*)]]]]]]][position() = 1]]</xpath> + <tree> + <lambda attr="content" xml:lang="no-nb" xml:id="id1"> + <pi xml:lang="en-US" xml:id="id2"> + <sigma true="attribute-value"> + <delta xml:lang="en-GB" xml:id="id3"/> + <psi src="_blank" xml:lang="nb" xml:id="id4"/> + <omicron xml:lang="no" xml:id="id5"> + <alpha/> + <theta name="_blank"> + <theta/> + <chi attrib="attribute-value"> + <zeta object="true"/> + <theta false="true" xml:lang="en-US" xml:id="id6"> + <any xml:lang="no-nb"> + <epsilon xml:lang="no"> + <tau abort="attribute-value" xml:lang="en" xml:id="id7"/> + <beta insert="this-is-att-value" xml:id="id8"/> + <zeta attrib="false" xml:id="id9"> + <psi abort="100%" xml:lang="no-nb"> + <green>This text must be green</green> + </psi> + </zeta> + </epsilon> + </any> + </theta> + </chi> + </theta> + </omicron> + </sigma> + </pi> + </lambda> + </tree> + </test> + <test> + <xpath>//sigma/lambda[not(preceding-sibling::*)]//delta[@true][not(child::node())][following-sibling::delta[starts-with(concat(@desciption,"-"),"attribute-")][following-sibling::*[position()=2]][following-sibling::pi[@delete="123456789"][@xml:lang="no"][@xml:id="id1"][following-sibling::zeta[contains(concat(@or,"$"),"6789$")]//gamma[@xml:id="id2"][following-sibling::pi[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//lambda[@xml:id="id4"]/zeta[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::kappa[not(child::node())][following-sibling::epsilon[@abort][@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 2]]/alpha[@false][@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]//zeta[contains(@desciption,"t")][@xml:id="id8"][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <sigma> + <lambda> + <delta true="123456789"/> + <delta desciption="attribute-value"/> + <pi delete="123456789" xml:lang="no" xml:id="id1"/> + <zeta or="123456789"> + <gamma xml:id="id2"/> + <pi xml:lang="nb" xml:id="id3"> + <lambda xml:id="id4"> + <zeta xml:lang="no-nb" xml:id="id5"/> + <kappa/> + <epsilon abort="100%" xml:lang="no-nb" xml:id="id6"> + <alpha false="attribute" xml:lang="no-nb" xml:id="id7"> + <zeta desciption="content" xml:id="id8"> + <green>This text must be green</green> + </zeta> + </alpha> + </epsilon> + </lambda> + </pi> + </zeta> + </lambda> + </sigma> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="no"]//gamma[not(preceding-sibling::*)]//chi[contains(@or,"ue")][not(child::node())][following-sibling::sigma[@xml:lang="en"]/iota[@xml:id="id1"][not(child::node())][following-sibling::eta[starts-with(@object,"solid 1px ")][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]]]]</xpath> + <tree> + <lambda xml:lang="no"> + <gamma> + <chi or="true"/> + <sigma xml:lang="en"> + <iota xml:id="id1"/> + <eta object="solid 1px green" xml:lang="no" xml:id="id2"> + <green>This text must be green</green> + </eta> + </sigma> + </gamma> + </lambda> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="en-GB"]//beta[contains(@content,"ten")][@xml:lang="no"][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[contains(@delete,"_bl")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/psi[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)]//delta[starts-with(concat(@title,"-"),"another attribute value-")][not(preceding-sibling::*)]/alpha[@attrib][@xml:id="id3"][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::epsilon)]//omicron[contains(concat(@attribute,"$"),"s-is-att-value$")][@xml:id="id6"][following-sibling::tau[@xml:id="id7"][not(following-sibling::*)]/xi[@object="false"][@xml:lang="en-US"][@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@number][preceding-sibling::*[position() = 1]][following-sibling::gamma[contains(concat(@attrib,"$"),"ue$")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]//eta[@number][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[not(following-sibling::*)]//epsilon[starts-with(@name,"con")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="no"][following-sibling::zeta[starts-with(@token,"con")][@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//upsilon[contains(@class,"lue")][@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::kappa[@xml:lang="no"][@xml:id="id11"]//mu/tau[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta xml:lang="en-GB"> + <beta content="content" xml:lang="no" xml:id="id1"/> + <eta delete="_blank" xml:lang="en-US"> + <psi xml:lang="en-GB" xml:id="id2"> + <delta title="another attribute value"> + <alpha attrib="_blank" xml:id="id3"/> + <alpha xml:lang="en-GB" xml:id="id4"> + <epsilon xml:lang="en-GB" xml:id="id5"> + <omicron attribute="this-is-att-value" xml:id="id6"/> + <tau xml:id="id7"> + <xi object="false" xml:lang="en-US" xml:id="id8"/> + <xi number="100%"/> + <gamma attrib="attribute value" xml:lang="nb"> + <eta number="solid 1px green" xml:id="id9"> + <epsilon> + <epsilon name="content"/> + <omicron xml:lang="no"/> + <zeta token="content" xml:lang="no" xml:id="id10"> + <upsilon class="another attribute value" xml:lang="no-nb"/> + <kappa xml:lang="no" xml:id="id11"> + <mu> + <tau> + <green>This text must be green</green> + </tau> + </mu> + </kappa> + </zeta> + </epsilon> + </eta> + </gamma> + </tau> + </epsilon> + </alpha> + </delta> + </psi> + </eta> + </beta> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-US"]//sigma[starts-with(concat(@name,"-"),"_blank-")][@xml:id="id1"][following-sibling::delta[starts-with(@false,"1")][not(following-sibling::*)]/delta[starts-with(@delete,"attr")][not(preceding-sibling::*)][not(following-sibling::*)]/pi[starts-with(concat(@class,"-"),"attribute-")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::eta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[@abort][not(preceding-sibling::*)][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 1]]/lambda[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="nb"][preceding-sibling::*[position() = 1]]//kappa[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::kappa or following-sibling::kappa)]//mu[contains(@abort,"green")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id6"]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any xml:lang="en-US"> + <sigma name="_blank" xml:id="id1"/> + <delta false="123456789"> + <delta delete="attribute-value"> + <pi class="attribute-value" xml:lang="no" xml:id="id2"/> + <eta xml:lang="en-GB"> + <epsilon abort="false"/> + <beta xml:id="id3"> + <lambda xml:id="id4"> + <upsilon xml:id="id5"> + <gamma xml:lang="no-nb"/> + <gamma xml:lang="nb"> + <kappa xml:lang="en-GB"> + <mu abort="solid 1px green" xml:lang="en-GB"/> + <alpha xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </alpha> + </kappa> + </gamma> + </upsilon> + </lambda> + </beta> + </eta> + </delta> + </delta> + </any> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="nb"]//pi[@abort][@xml:lang="en-US"]//*[starts-with(@string,"att")][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::iota[@class][@xml:id="id1"][not(following-sibling::*)]//rho[not(preceding-sibling::*)][not(following-sibling::*)]//beta[@xml:lang="en-US"][not(following-sibling::*)]//*[@xml:id="id2"]//beta[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::gamma[starts-with(concat(@src,"-"),"_blank-")][preceding-sibling::*[position() = 1]][following-sibling::epsilon[@object][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]/kappa[starts-with(@content,"at")][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[contains(@att,"lid 1px g")][preceding-sibling::*[position() = 1]]/delta[@xml:lang="en-US"][@xml:id="id4"][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//iota[@attribute="attribute"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::upsilon[starts-with(@false,"attribute-v")][@xml:id="id6"][following-sibling::kappa[contains(@delete,"od")][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]]]]]][position() = 1]]</xpath> + <tree> + <eta xml:lang="nb"> + <pi abort="attribute value" xml:lang="en-US"> + <any string="attribute"> + <delta xml:lang="en-GB"/> + <iota class="123456789" xml:id="id1"> + <rho> + <beta xml:lang="en-US"> + <any xml:id="id2"> + <beta xml:id="id3"/> + <gamma src="_blank"/> + <epsilon object="attribute" xml:lang="en-GB"> + <kappa content="attribute-value" xml:lang="nb"/> + <nu att="solid 1px green"> + <delta xml:lang="en-US" xml:id="id4"/> + <pi xml:lang="no-nb"> + <iota attribute="attribute" xml:id="id5"/> + <upsilon false="attribute-value" xml:id="id6"/> + <kappa delete="this.nodeValue" xml:id="id7"> + <green>This text must be green</green> + </kappa> + </pi> + </nu> + </epsilon> + </any> + </beta> + </rho> + </iota> + </any> + </pi> + </eta> + </tree> + </test> + <test> + <xpath>//phi/beta[contains(@and,"e")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@abort="attribute value"][@xml:lang="no-nb"][@xml:id="id1"][not(following-sibling::*)]//omicron[@content][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[contains(concat(@title,"$"),"lue$")][@xml:lang="en-US"][not(following-sibling::*)]//omega[starts-with(@token,"123")][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[starts-with(concat(@and,"-"),"false-")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::nu[starts-with(@title,"attri")][@xml:lang="nb"][@xml:id="id5"]/kappa[starts-with(@token,"this-is-at")][@xml:lang="en"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::tau[@string]//psi[@desciption][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//psi[@content][not(following-sibling::*)]//zeta[@attr][not(preceding-sibling::*)]/mu[@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::psi[@string="true"][@xml:lang="no"][@xml:id="id9"]//gamma[@title="attribute"][@xml:id="id10"][following-sibling::delta[position() = 1]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <phi> + <beta and="true" xml:lang="en"/> + <chi abort="attribute value" xml:lang="no-nb" xml:id="id1"> + <omicron content="100%" xml:lang="en" xml:id="id2"> + <zeta title="attribute value" xml:lang="en-US"> + <omega token="123456789" xml:id="id3"/> + <beta and="false" xml:lang="no" xml:id="id4"/> + <nu title="attribute" xml:lang="nb" xml:id="id5"> + <kappa token="this-is-att-value" xml:lang="en" xml:id="id6"/> + <tau string="attribute value"> + <psi desciption="123456789" xml:id="id7"/> + <sigma xml:id="id8"> + <psi content="attribute value"> + <zeta attr="solid 1px green"> + <mu xml:lang="nb"/> + <psi string="true" xml:lang="no" xml:id="id9"> + <gamma title="attribute" xml:id="id10"/> + <delta> + <green>This text must be green</green> + </delta> + </psi> + </zeta> + </psi> + </sigma> + </tau> + </nu> + </zeta> + </omicron> + </chi> + </phi> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]/tau[@or][@xml:id="id2"][not(following-sibling::*)]/xi[contains(concat(@or,"$"),"6789$")][not(preceding-sibling::*)]/lambda[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@content][not(following-sibling::*)]/delta[@insert][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[starts-with(concat(@class,"-"),"false-")][@xml:id="id4"][preceding-sibling::*[position() = 1]]//pi[@xml:lang="en"][@xml:id="id5"][following-sibling::theta[contains(@string,"te-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]/delta[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)]//sigma[@xml:lang="no"][not(preceding-sibling::*)]/omega[@xml:lang="en"][@xml:id="id7"]/pi[contains(concat(@token,"$"),"e$")][@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)][position() = 1]]]</xpath> + <tree> + <psi xml:id="id1"> + <tau or="content" xml:id="id2"> + <xi or="123456789"> + <lambda xml:lang="en-US" xml:id="id3"> + <rho content="false"> + <delta insert="attribute-value"/> + <psi class="false" xml:id="id4"> + <pi xml:lang="en" xml:id="id5"/> + <theta string="attribute-value" xml:lang="no-nb"> + <delta xml:lang="no" xml:id="id6"> + <sigma xml:lang="no"> + <omega xml:lang="en" xml:id="id7"> + <pi token="attribute-value" xml:lang="no" xml:id="id8"> + <green>This text must be green</green> + </pi> + </omega> + </sigma> + </delta> + </theta> + </psi> + </rho> + </lambda> + </xi> + </tau> + </psi> + </tree> + </test> + <test> + <xpath>//eta[starts-with(concat(@abort,"-"),"another attribute value-")][@xml:lang="nb"]//tau[@xml:id="id1"][not(preceding-sibling::*)]//beta[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::phi[@xml:id="id2"][following-sibling::omicron[contains(concat(@attribute,"$"),"e$")][@xml:id="id3"][not(child::node())][following-sibling::pi[@xml:lang="en"][preceding-sibling::*[position() = 3]][following-sibling::pi[@number][@xml:lang="nb"][preceding-sibling::*[position() = 4]]]][position() = 1]]]</xpath> + <tree> + <eta abort="another attribute value" xml:lang="nb"> + <tau xml:id="id1"> + <beta xml:lang="en-US"/> + <phi xml:id="id2"/> + <omicron attribute="true" xml:id="id3"/> + <pi xml:lang="en"/> + <pi number="_blank" xml:lang="nb"> + <green>This text must be green</green> + </pi> + </tau> + </eta> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(@delete,"solid 1px gre")][@xml:id="id1"]/beta/upsilon[not(child::node())][following-sibling::gamma[contains(concat(@false,"$"),"ute-value$")][@xml:lang="no"][not(following-sibling::*)]//mu[not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::omicron[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::epsilon[@object][@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::chi[@class="this-is-att-value"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/pi[contains(concat(@token,"$"),"other attribute value$")][@xml:lang="en"][not(preceding-sibling::*)]//lambda[@xml:id="id2"][not(preceding-sibling::*)]//tau[@xml:id="id3"]/pi[starts-with(@data,"_blank")][not(child::node())][following-sibling::pi[starts-with(@name,"anot")][@xml:lang="no-nb"]//eta[@xml:lang="en-GB"][not(following-sibling::*)]//phi[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <upsilon delete="solid 1px green" xml:id="id1"> + <beta> + <upsilon/> + <gamma false="attribute-value" xml:lang="no"> + <mu/> + <omicron xml:lang="en-US"/> + <epsilon object="attribute-value" xml:lang="en"/> + <chi class="this-is-att-value"> + <pi token="another attribute value" xml:lang="en"> + <lambda xml:id="id2"> + <tau xml:id="id3"> + <pi data="_blank"/> + <pi name="another attribute value" xml:lang="no-nb"> + <eta xml:lang="en-GB"> + <phi xml:id="id4"> + <green>This text must be green</green> + </phi> + </eta> + </pi> + </tau> + </lambda> + </pi> + </chi> + </gamma> + </beta> + </upsilon> + </tree> + </test> + <test> + <xpath>//eta[@or][@xml:lang="en-US"]/iota[@token][following-sibling::tau[@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[contains(@token,"other ")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/kappa[@xml:lang="no-nb"]//xi[@xml:lang="en"][not(preceding-sibling::*)]/tau[@xml:lang="en-GB"][@xml:id="id1"][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[@token="100%"][following-sibling::theta[@xml:id="id2"][not(following-sibling::*)]/chi[@xml:id="id3"][not(child::node())][following-sibling::iota[contains(concat(@false,"$"),"odeValue$")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(preceding-sibling::lambda)]/delta[contains(concat(@abort,"$"),"other attribute value$")][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@attribute="another attribute value"][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 1]]/lambda[@attribute][@xml:lang="no"][not(following-sibling::*)]//*[@xml:lang="en-US"][@xml:id="id7"][not(child::node())][following-sibling::sigma[not(following-sibling::*)]/epsilon[not(preceding-sibling::*)]/theta[starts-with(@abort,"an")][@xml:id="id8"][not(following-sibling::*)]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta or="123456789" xml:lang="en-US"> + <iota token="_blank"/> + <tau xml:lang="nb"/> + <rho token="another attribute value" xml:lang="en-GB"> + <kappa xml:lang="no-nb"> + <xi xml:lang="en"> + <tau xml:lang="en-GB" xml:id="id1"/> + <omicron token="100%"/> + <theta xml:id="id2"> + <chi xml:id="id3"/> + <iota false="this.nodeValue" xml:lang="no" xml:id="id4"> + <mu/> + <lambda xml:id="id5"> + <delta abort="another attribute value"/> + <sigma attribute="another attribute value" xml:lang="en" xml:id="id6"> + <lambda attribute="content" xml:lang="no"> + <any xml:lang="en-US" xml:id="id7"/> + <sigma> + <epsilon> + <theta abort="another attribute value" xml:id="id8"> + <green>This text must be green</green> + </theta> + </epsilon> + </sigma> + </lambda> + </sigma> + </lambda> + </iota> + </theta> + </xi> + </kappa> + </rho> + </eta> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="no-nb"]//xi[@xml:lang="en-US"][not(preceding-sibling::*)]/gamma[@attr][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:id="id1"]/psi[contains(@attribute,"this.n")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[contains(@attribute,"attribu")][@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::beta[@xml:lang="en-US"][@xml:id="id3"][following-sibling::upsilon[@xml:id="id4"][following-sibling::gamma[starts-with(@title,"10")][not(child::node())][following-sibling::nu//beta[starts-with(@delete,"solid 1p")][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:id="id5"]/rho[not(child::node())][following-sibling::omega[@title][following-sibling::omicron[starts-with(concat(@src,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 2]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="no-nb"> + <xi xml:lang="en-US"> + <gamma attr="this-is-att-value"/> + <psi xml:id="id1"> + <psi attribute="this.nodeValue" xml:lang="en-US"/> + <omega attribute="attribute" xml:lang="en-US" xml:id="id2"/> + <beta xml:lang="en-US" xml:id="id3"/> + <upsilon xml:id="id4"/> + <gamma title="100%"/> + <nu> + <beta delete="solid 1px green"/> + <gamma xml:id="id5"> + <rho/> + <omega title="_blank"/> + <omicron src="attribute" xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </gamma> + </nu> + </psi> + </xi> + </epsilon> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@title,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id1"]//theta[@xml:lang="en"][@xml:id="id2"][following-sibling::lambda[starts-with(concat(@token,"-"),"true-")][following-sibling::*[position()=2]][following-sibling::upsilon[@xml:lang="en"][preceding-sibling::*[position() = 2]][following-sibling::delta[@true][not(following-sibling::*)]/*[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::sigma[@xml:id="id3"][not(child::node())][following-sibling::delta[starts-with(@content,"anothe")][@xml:id="id4"][not(following-sibling::*)]//lambda[not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]]/rho[starts-with(@desciption,"this.nodeVa")][@xml:id="id6"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta title="attribute" xml:lang="nb" xml:id="id1"> + <theta xml:lang="en" xml:id="id2"/> + <lambda token="true"/> + <upsilon xml:lang="en"/> + <delta true="123456789"> + <any/> + <sigma xml:id="id3"/> + <delta content="another attribute value" xml:id="id4"> + <lambda/> + <pi xml:lang="no" xml:id="id5"> + <rho desciption="this.nodeValue" xml:id="id6"> + <green>This text must be green</green> + </rho> + </pi> + </delta> + </delta> + </delta> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no-nb"]//*[starts-with(concat(@insert,"-"),"_blank-")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::eta[@xml:id="id1"]/beta[starts-with(concat(@abort,"-"),"false-")][@xml:lang="nb"][@xml:id="id2"][following-sibling::nu[starts-with(concat(@object,"-"),"_blank-")][@xml:lang="no"][not(following-sibling::*)]/gamma[starts-with(concat(@att,"-"),"attribute-")][@xml:lang="en"][following-sibling::psi[contains(concat(@title,"$")," green$")][@xml:id="id3"][following-sibling::*[position()=3]][following-sibling::kappa[@object][preceding-sibling::*[position() = 2]][following-sibling::gamma[@att="attribute"][@xml:id="id4"][not(child::node())][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]//xi[starts-with(@class,"cont")][@xml:id="id6"][not(preceding-sibling::*)]//pi[@token][@xml:lang="en"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::epsilon[contains(concat(@attr,"$"),"0%$")][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]]/gamma[@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::gamma[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::chi[@token][@xml:id="id11"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::phi[@object="attribute value"][not(following-sibling::*)]/sigma[@xml:lang="en"][not(preceding-sibling::*)]]]]]]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <iota xml:lang="no-nb"> + <any insert="_blank" xml:lang="en"/> + <eta xml:id="id1"> + <beta abort="false" xml:lang="nb" xml:id="id2"/> + <nu object="_blank" xml:lang="no"> + <gamma att="attribute-value" xml:lang="en"/> + <psi title="solid 1px green" xml:id="id3"/> + <kappa object="solid 1px green"/> + <gamma att="attribute" xml:id="id4"/> + <xi xml:lang="en-GB" xml:id="id5"> + <xi class="content" xml:id="id6"> + <pi token="another attribute value" xml:lang="en" xml:id="id7"/> + <epsilon attr="100%" xml:lang="en-GB" xml:id="id8"> + <gamma xml:lang="en-GB" xml:id="id9"> + <omicron xml:lang="no-nb"/> + <gamma/> + <rho xml:id="id10"/> + <chi token="_blank" xml:id="id11"/> + <phi object="attribute value"> + <sigma xml:lang="en"> + <green>This text must be green</green> + </sigma> + </phi> + </gamma> + </epsilon> + </xi> + </xi> + </nu> + </eta> + </iota> + </tree> + </test> + <test> + <xpath>//chi[contains(concat(@insert,"$"),"ank$")][@xml:lang="no"]//omicron[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)]//mu[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=9]][following-sibling::*[@xml:id="id3"][following-sibling::rho[@xml:lang="no-nb"][@xml:id="id4"][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][following-sibling::beta[starts-with(@title,"fa")][following-sibling::*[preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::phi[@name="true"][@xml:lang="no-nb"][not(child::node())][following-sibling::zeta[starts-with(concat(@number,"-"),"this-")][@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 7]][following-sibling::phi[@xml:lang="en-GB"][@xml:id="id6"][not(child::node())][following-sibling::upsilon//mu[following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:id="id7"]//kappa[not(following-sibling::*)]/delta[@xml:id="id8"][following-sibling::gamma[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::kappa[@xml:id="id10"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi insert="_blank" xml:lang="no"> + <omicron xml:lang="nb" xml:id="id1"> + <mu xml:lang="en" xml:id="id2"/> + <any xml:id="id3"/> + <rho xml:lang="no-nb" xml:id="id4"/> + <tau xml:lang="no-nb"/> + <beta title="false"/> + <any/> + <phi name="true" xml:lang="no-nb"/> + <zeta number="this-is-att-value" xml:lang="en" xml:id="id5"/> + <phi xml:lang="en-GB" xml:id="id6"/> + <upsilon> + <mu/> + <rho xml:id="id7"> + <kappa> + <delta xml:id="id8"/> + <gamma xml:id="id9"/> + <kappa xml:id="id10"> + <green>This text must be green</green> + </kappa> + </kappa> + </rho> + </upsilon> + </omicron> + </chi> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="no-nb"][@xml:id="id1"]/iota[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::mu[preceding-sibling::*[position() = 1]][following-sibling::pi[contains(concat(@desciption,"$"),"e$")][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::upsilon[starts-with(concat(@att,"-"),"attribute value-")][@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]//delta[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::eta[following-sibling::nu[starts-with(concat(@insert,"-"),"this-")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/phi[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta xml:lang="no-nb" xml:id="id1"> + <iota xml:lang="en-GB" xml:id="id2"/> + <mu/> + <pi desciption="true" xml:lang="en" xml:id="id3"/> + <upsilon att="attribute value" xml:lang="no-nb" xml:id="id4"> + <delta xml:lang="en"/> + <eta/> + <nu insert="this-is-att-value"> + <phi xml:lang="nb"> + <green>This text must be green</green> + </phi> + </nu> + </upsilon> + </theta> + </tree> + </test> + <test> + <xpath>//alpha[@content="content"][@xml:id="id1"]/delta[@token="attribute"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/sigma[@class][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[starts-with(@title,"solid 1px gre")][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa[@xml:lang="en"][@xml:id="id4"]//alpha[@abort="another attribute value"][@xml:id="id5"]/eta[starts-with(@abort,"another attribute ")][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::*[position()=9]][following-sibling::rho[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=8]][following-sibling::*[contains(concat(@token,"$"),"ank$")][@xml:lang="en"][@xml:id="id7"][not(child::node())][following-sibling::chi[@xml:id="id8"][preceding-sibling::*[position() = 3]][following-sibling::epsilon[@xml:id="id9"][not(child::node())][following-sibling::pi[@xml:id="id10"][preceding-sibling::*[position() = 5]][following-sibling::tau[@name][@xml:lang="en"][preceding-sibling::*[position() = 6]][not(child::node())][following-sibling::upsilon[contains(concat(@object,"$"),"e$")][@xml:lang="no"][@xml:id="id11"][following-sibling::*[position()=2]][following-sibling::epsilon[preceding-sibling::*[position() = 8]][following-sibling::*[position()=1]][following-sibling::lambda[starts-with(@data,"attribute-")][preceding-sibling::*[position() = 9]]//eta[@xml:lang="en-US"][not(preceding-sibling::*)]/psi[@xml:lang="en"][@xml:id="id12"][not(preceding-sibling::*)][not(following-sibling::*)]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <alpha content="content" xml:id="id1"> + <delta token="attribute" xml:id="id2"/> + <chi xml:lang="en-GB"> + <sigma class="attribute-value" xml:lang="en-GB"/> + <omicron title="solid 1px green" xml:id="id3"> + <nu/> + <kappa xml:lang="en" xml:id="id4"> + <alpha abort="another attribute value" xml:id="id5"> + <eta abort="another attribute value" xml:lang="en-GB" xml:id="id6"/> + <rho xml:lang="en-GB"/> + <any token="_blank" xml:lang="en" xml:id="id7"/> + <chi xml:id="id8"/> + <epsilon xml:id="id9"/> + <pi xml:id="id10"/> + <tau name="false" xml:lang="en"/> + <upsilon object="false" xml:lang="no" xml:id="id11"/> + <epsilon/> + <lambda data="attribute-value"> + <eta xml:lang="en-US"> + <psi xml:lang="en" xml:id="id12"> + <green>This text must be green</green> + </psi> + </eta> + </lambda> + </alpha> + </kappa> + </omicron> + </chi> + </alpha> + </tree> + </test> + <test> + <xpath>//xi[contains(concat(@data,"$"),"k$")][@xml:lang="en"]/omicron[contains(concat(@or,"$"),"lse$")][@xml:lang="en-US"][not(following-sibling::*)]//phi[contains(concat(@object,"$"),"00%$")][@xml:lang="en-US"][@xml:id="id1"][not(child::node())][following-sibling::psi[@insert="true"][not(child::node())][following-sibling::epsilon[starts-with(concat(@false,"-"),"attribute value-")][@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]/sigma[@xml:id="id3"][not(following-sibling::*)]/delta[not(preceding-sibling::*)][not(following-sibling::*)]/omega[starts-with(@false,"tr")][@xml:lang="en-US"][not(preceding-sibling::*)]/delta[starts-with(@and,"123456789")][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <xi data="_blank" xml:lang="en"> + <omicron or="false" xml:lang="en-US"> + <phi object="100%" xml:lang="en-US" xml:id="id1"/> + <psi insert="true"/> + <epsilon false="attribute value" xml:lang="no" xml:id="id2"> + <sigma xml:id="id3"> + <delta> + <omega false="true" xml:lang="en-US"> + <delta and="123456789"> + <green>This text must be green</green> + </delta> + </omega> + </delta> + </sigma> + </epsilon> + </omicron> + </xi> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="no"][@xml:id="id1"]//*[@attribute][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::zeta[@xml:id="id2"][preceding-sibling::*[position() = 1]]//lambda[@content="attribute"][not(child::node())][following-sibling::mu[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/kappa[@class="attribute-value"][not(following-sibling::*)][not(preceding-sibling::kappa)]//lambda[starts-with(@token,"a")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::zeta[@or][@xml:lang="en-US"][not(following-sibling::*)]/alpha[@xml:id="id5"][not(child::node())][following-sibling::pi[@xml:lang="en-GB"]//alpha[starts-with(@false,"at")][@xml:id="id6"]//eta[starts-with(@content,"so")][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::eta/sigma[@xml:lang="en-GB"][@xml:id="id8"][not(child::node())][following-sibling::alpha[starts-with(@false,"attribute-")][@xml:lang="no-nb"]//lambda[@false][not(following-sibling::*)]/pi[@false="_blank"][not(preceding-sibling::*)]//upsilon[not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega xml:lang="no" xml:id="id1"> + <any attribute="this.nodeValue" xml:lang="en-US"/> + <zeta xml:id="id2"> + <lambda content="attribute"/> + <mu xml:lang="en-GB" xml:id="id3"> + <kappa class="attribute-value"> + <lambda token="attribute-value" xml:lang="en-GB" xml:id="id4"/> + <zeta or="attribute" xml:lang="en-US"> + <alpha xml:id="id5"/> + <pi xml:lang="en-GB"> + <alpha false="attribute" xml:id="id6"> + <eta content="solid 1px green" xml:id="id7"/> + <eta> + <sigma xml:lang="en-GB" xml:id="id8"/> + <alpha false="attribute-value" xml:lang="no-nb"> + <lambda false="content"> + <pi false="_blank"> + <upsilon> + <green>This text must be green</green> + </upsilon> + </pi> + </lambda> + </alpha> + </eta> + </alpha> + </pi> + </zeta> + </kappa> + </mu> + </zeta> + </omega> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en-GB"][@xml:id="id1"]//gamma[@xml:lang="en-GB"][not(child::node())][following-sibling::*//gamma[@xml:id="id2"][following-sibling::delta[@object][not(preceding-sibling::delta)]//omega[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(preceding-sibling::epsilon)]//rho[@xml:lang="no-nb"]/kappa[@xml:lang="en-GB"]/kappa[not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@class="this.nodeValue"][@xml:id="id6"][preceding-sibling::*[position() = 1]]/tau[@xml:lang="no-nb"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:lang="en-GB"][not(following-sibling::*)]//nu[@xml:lang="nb"][not(preceding-sibling::*)]/phi[@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@true][@xml:id="id9"]/alpha[@xml:id="id10"][not(child::node())][following-sibling::mu[@src="attribute value"][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::mu)]//nu[starts-with(concat(@object,"-"),"true-")][not(preceding-sibling::*)][not(child::node())][following-sibling::*[starts-with(concat(@true,"-"),"true-")][@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[starts-with(@token,"_bla")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <kappa xml:lang="en-GB" xml:id="id1"> + <gamma xml:lang="en-GB"/> + <any> + <gamma xml:id="id2"/> + <delta object="another attribute value"> + <omega xml:lang="no-nb" xml:id="id3"/> + <epsilon xml:id="id4"> + <rho xml:lang="no-nb"> + <kappa xml:lang="en-GB"> + <kappa> + <alpha xml:lang="no" xml:id="id5"/> + <chi class="this.nodeValue" xml:id="id6"> + <tau xml:lang="no-nb" xml:id="id7"/> + <iota xml:lang="en-GB"> + <nu xml:lang="nb"> + <phi xml:lang="no-nb" xml:id="id8"> + <psi true="123456789" xml:id="id9"> + <alpha xml:id="id10"/> + <mu src="attribute value" xml:lang="no-nb"> + <nu object="true"/> + <any true="true" xml:lang="nb" xml:id="id11"> + <lambda token="_blank"> + <green>This text must be green</green> + </lambda> + </any> + </mu> + </psi> + </phi> + </nu> + </iota> + </chi> + </kappa> + </kappa> + </rho> + </epsilon> + </delta> + </any> + </kappa> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="no-nb"][@xml:id="id1"]/delta[@false][@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]//nu[contains(@number,"0")][@xml:id="id3"][not(preceding-sibling::*)][not(preceding-sibling::nu)]/upsilon[starts-with(@src,"ano")][@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::theta[@xml:lang="en"][@xml:id="id5"][not(following-sibling::*)]//xi[contains(concat(@attrib,"$"),"se$")][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="no"][not(following-sibling::*)]//rho[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::rho)]//phi[@src][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[starts-with(concat(@content,"-"),"attribute value-")][@xml:lang="nb"][not(following-sibling::*)]//psi[@attribute][@xml:lang="en"][not(preceding-sibling::*)]/upsilon[contains(@insert,"nother attri")]//delta[@number]/psi[@true="this-is-att-value"][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(preceding-sibling::psi)][following-sibling::tau[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::alpha[@content="false"][not(child::node())][following-sibling::beta[contains(concat(@content,"$"),"false$")][@xml:lang="nb"]//delta[@xml:lang="no-nb"][@xml:id="id10"]//iota[@xml:lang="no"][@xml:id="id11"][not(preceding-sibling::*)]//gamma[@src][@xml:id="id12"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <alpha xml:lang="no-nb" xml:id="id1"> + <delta false="attribute-value" xml:lang="en-GB" xml:id="id2"> + <nu number="100%" xml:id="id3"> + <upsilon src="another attribute value" xml:lang="nb" xml:id="id4"/> + <theta xml:lang="en" xml:id="id5"> + <xi attrib="false" xml:lang="en" xml:id="id6"/> + <nu xml:lang="no"> + <rho xml:id="id7"> + <phi src="this.nodeValue" xml:id="id8"> + <kappa content="attribute value" xml:lang="nb"> + <psi attribute="content" xml:lang="en"> + <upsilon insert="another attribute value"> + <delta number="attribute value"> + <psi true="this-is-att-value" xml:lang="en"/> + <tau xml:lang="nb" xml:id="id9"/> + <alpha content="false"/> + <beta content="false" xml:lang="nb"> + <delta xml:lang="no-nb" xml:id="id10"> + <iota xml:lang="no" xml:id="id11"> + <gamma src="100%" xml:id="id12"> + <green>This text must be green</green> + </gamma> + </iota> + </delta> + </beta> + </delta> + </upsilon> + </psi> + </kappa> + </phi> + </rho> + </nu> + </theta> + </nu> + </delta> + </alpha> + </tree> + </test> + <test> + <xpath>//mu[@xml:lang="no-nb"][@xml:id="id1"]//tau[@xml:id="id2"][not(following-sibling::*)]//omicron[@xml:lang="en-US"][@xml:id="id3"][following-sibling::delta[@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[contains(concat(@att,"$")," value$")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/theta[contains(@abort,"1px green")][not(preceding-sibling::*)]/zeta[@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::upsilon[@attr][@xml:lang="no"]/epsilon[contains(concat(@object,"$"),"ttribute value$")][@xml:lang="nb"][@xml:id="id6"]//omega[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::omega)][not(child::node())][following-sibling::beta[@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::omicron[@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/rho[@xml:id="id10"]//psi[@attr][@xml:lang="en-GB"][@xml:id="id11"][not(following-sibling::psi)][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id12"][preceding-sibling::*[position() = 1]]//pi[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@xml:lang="en-GB"][not(following-sibling::*)]/xi[@xml:lang="en-US"][not(preceding-sibling::*)]/kappa[@xml:lang="en-US"][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id13"]/zeta[contains(concat(@number,"$"),"ribute-value$")][not(preceding-sibling::*)]//omicron[@xml:lang="en"][@xml:id="id14"][not(preceding-sibling::*)][following-sibling::iota[contains(concat(@attrib,"$"),"-value$")][@xml:lang="no"][@xml:id="id15"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[@xml:lang="no"][@xml:id="id16"]][position() = 1]]]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu xml:lang="no-nb" xml:id="id1"> + <tau xml:id="id2"> + <omicron xml:lang="en-US" xml:id="id3"/> + <delta xml:id="id4"/> + <gamma att="attribute value" xml:lang="nb"> + <theta abort="solid 1px green"> + <zeta xml:lang="no" xml:id="id5"/> + <upsilon attr="123456789" xml:lang="no"> + <epsilon object="another attribute value" xml:lang="nb" xml:id="id6"> + <omega xml:id="id7"/> + <beta xml:id="id8"/> + <omicron xml:id="id9"> + <rho xml:id="id10"> + <psi attr="attribute value" xml:lang="en-GB" xml:id="id11"/> + <omicron xml:lang="en-US" xml:id="id12"> + <pi/> + <gamma xml:lang="en-GB"> + <xi xml:lang="en-US"> + <kappa xml:lang="en-US"/> + <pi xml:lang="no-nb" xml:id="id13"> + <zeta number="attribute-value"> + <omicron xml:lang="en" xml:id="id14"/> + <iota attrib="attribute-value" xml:lang="no" xml:id="id15"> + <omicron xml:lang="no" xml:id="id16"> + <green>This text must be green</green> + </omicron> + </iota> + </zeta> + </pi> + </xi> + </gamma> + </omicron> + </rho> + </omicron> + </epsilon> + </upsilon> + </theta> + </gamma> + </tau> + </mu> + </tree> + </test> + <test> + <xpath>//phi//zeta[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//alpha[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[@xml:lang="en-US"][@xml:id="id1"]/epsilon[@token="this.nodeValue"][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::kappa[@data][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//mu[@string="false"][@xml:lang="nb"][not(preceding-sibling::*)]//epsilon[not(preceding-sibling::*)][not(following-sibling::*)]//pi[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::iota[starts-with(@content,"123")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/sigma[not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en-US"][not(following-sibling::*)]]]]][position() = 1]]</xpath> + <tree> + <phi> + <zeta/> + <kappa xml:lang="no-nb"> + <alpha xml:lang="en-US"> + <epsilon xml:lang="en-US" xml:id="id1"> + <epsilon token="this.nodeValue" xml:lang="no-nb" xml:id="id2"/> + <pi xml:lang="en-US"/> + <kappa data="true" xml:lang="no"> + <mu string="false" xml:lang="nb"> + <epsilon> + <pi xml:lang="no" xml:id="id3"/> + <iota content="123456789" xml:lang="no" xml:id="id4"/> + <omicron xml:lang="no" xml:id="id5"> + <sigma> + <delta xml:lang="en-US"> + <green>This text must be green</green> + </delta> + </sigma> + </omicron> + </epsilon> + </mu> + </kappa> + </epsilon> + </alpha> + </kappa> + </phi> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="no-nb"][@xml:id="id1"]/omega[contains(@content,"%")][@xml:lang="en-US"]//psi[@insert][not(preceding-sibling::*)][not(following-sibling::*)]/*[not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@content][@xml:lang="en"]//sigma[not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@xml:lang="no-nb"][following-sibling::xi[starts-with(@false,"12")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]]</xpath> + <tree> + <alpha xml:lang="no-nb" xml:id="id1"> + <omega content="100%" xml:lang="en-US"> + <psi insert="this.nodeValue"> + <any> + <zeta content="this.nodeValue" xml:lang="en"> + <sigma> + <omicron xml:lang="no-nb"/> + <xi false="123456789" xml:lang="nb"> + <green>This text must be green</green> + </xi> + </sigma> + </zeta> + </any> + </psi> + </omega> + </alpha> + </tree> + </test> + <test> + <xpath>//psi[contains(@src,"n")]//gamma[@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]//beta[@xml:id="id2"][not(preceding-sibling::*)]//sigma[contains(concat(@false,"$"),"rue$")][@xml:lang="no-nb"][not(preceding-sibling::*)]/xi[contains(concat(@number,"$")," 1px green$")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]/pi[contains(concat(@src,"$"),"ontent$")][not(child::node())][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::rho[starts-with(@attr,"tr")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/zeta[contains(@attribute,"e")][@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[starts-with(concat(@desciption,"-"),"true-")][@xml:lang="en"][not(following-sibling::*)]//xi[@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@insert="this.nodeValue"][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//omega[starts-with(concat(@delete,"-"),"solid 1px green-")]/psi[contains(@or,"te value")][@xml:lang="en-GB"][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::phi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(following-sibling::phi)][not(child::node())][following-sibling::theta[@false="solid 1px green"][following-sibling::eta[preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:lang="en-GB"][preceding-sibling::*[position() = 4]]/alpha[@xml:id="id9"]][position() = 1]]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi src="solid 1px green"> + <gamma xml:lang="en-US" xml:id="id1"> + <beta xml:id="id2"> + <sigma false="true" xml:lang="no-nb"> + <xi number="solid 1px green" xml:lang="nb" xml:id="id3"/> + <zeta xml:lang="en-US" xml:id="id4"> + <pi src="content"/> + <mu xml:lang="no"/> + <rho attr="true" xml:lang="no-nb"> + <zeta attribute="true" xml:lang="en-US" xml:id="id5"/> + <nu> + <phi desciption="true" xml:lang="en"> + <xi xml:lang="en-US" xml:id="id6"/> + <delta insert="this.nodeValue" xml:lang="no-nb"> + <omega delete="solid 1px green"> + <psi or="attribute value" xml:lang="en-GB"/> + <zeta xml:lang="en-GB" xml:id="id7"> + <phi xml:id="id8"/> + <phi xml:lang="en-US"/> + <theta false="solid 1px green"/> + <eta/> + <alpha xml:lang="en-GB"> + <alpha xml:id="id9"> + <green>This text must be green</green> + </alpha> + </alpha> + </zeta> + </omega> + </delta> + </phi> + </nu> + </rho> + </zeta> + </sigma> + </beta> + </gamma> + </psi> + </tree> + </test> + <test> + <xpath>//phi[contains(concat(@object,"$"),"9$")][@xml:id="id1"]/xi[following-sibling::*[position()=1]][following-sibling::omicron[preceding-sibling::*[position() = 1]]//lambda[not(preceding-sibling::*)][not(child::node())][following-sibling::beta[starts-with(concat(@attribute,"-"),"_blank-")][following-sibling::chi[@xml:id="id2"][following-sibling::sigma[@and][@xml:lang="en"][@xml:id="id3"]/eta[contains(@false,"tr")][@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]/iota[starts-with(concat(@abort,"-"),"solid 1px green-")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@content="content"][not(preceding-sibling::*)]//mu[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="nb"][@xml:id="id7"][not(following-sibling::*)]//mu[@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::mu[contains(@insert,"another")]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi object="123456789" xml:id="id1"> + <xi/> + <omicron> + <lambda/> + <beta attribute="_blank"/> + <chi xml:id="id2"/> + <sigma and="_blank" xml:lang="en" xml:id="id3"> + <eta false="attribute-value" xml:lang="nb" xml:id="id4"> + <iota abort="solid 1px green" xml:id="id5"> + <delta content="content"> + <mu xml:id="id6"/> + <lambda xml:lang="nb" xml:id="id7"> + <mu xml:lang="no-nb"/> + <mu insert="another attribute value"> + <green>This text must be green</green> + </mu> + </lambda> + </delta> + </iota> + </eta> + </sigma> + </omicron> + </phi> + </tree> + </test> + <test> + <xpath>//chi[starts-with(@true,"this.nod")]//sigma[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@insert][@xml:lang="no-nb"][not(child::node())][following-sibling::phi[@title][@xml:lang="en-GB"][following-sibling::pi[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::lambda[starts-with(@data,"_")][@xml:lang="en-GB"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]//iota[@xml:lang="en"][@xml:id="id3"]//lambda[contains(concat(@att,"$"),"100%$")][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi true="this.nodeValue"> + <sigma xml:id="id1"/> + <zeta xml:lang="no"> + <mu insert="attribute value" xml:lang="no-nb"/> + <phi title="true" xml:lang="en-GB"/> + <pi/> + <lambda data="_blank" xml:lang="en-GB"/> + <rho xml:lang="en" xml:id="id2"> + <iota xml:lang="en" xml:id="id3"> + <lambda att="100%" xml:lang="no"> + <green>This text must be green</green> + </lambda> + </iota> + </rho> + </zeta> + </chi> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="no"]/kappa[starts-with(concat(@title,"-"),"100%-")][@xml:lang="en"][not(child::node())][following-sibling::omicron[starts-with(@attribute,"solid ")][@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]]//alpha[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@attr="false"][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//upsilon[not(preceding-sibling::*)][following-sibling::gamma[contains(@attribute,"ank")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]]</xpath> + <tree> + <any xml:lang="no"> + <kappa title="100%" xml:lang="en"/> + <omicron attribute="solid 1px green" xml:lang="no-nb" xml:id="id1"> + <alpha xml:lang="en"/> + <gamma attr="false" xml:lang="no"> + <upsilon/> + <gamma attribute="_blank" xml:lang="en-GB"> + <green>This text must be green</green> + </gamma> + </gamma> + </omicron> + </any> + </tree> + </test> + <test> + <xpath>//lambda[contains(@att,"e")][@xml:lang="en-GB"]//kappa[@object="solid 1px green"][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::lambda[contains(@string,"her attri")][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::rho[@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[starts-with(concat(@true,"-"),"123456789-")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/alpha//zeta[following-sibling::*[position()=1]][following-sibling::*[@data][preceding-sibling::*[position() = 1]]//xi[contains(concat(@abort,"$"),"green$")][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[starts-with(concat(@title,"-"),"123456789-")][@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/psi[contains(@delete,"e")][@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)]/epsilon[@string][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@xml:id="id7"][not(following-sibling::*)]//delta[contains(concat(@abort,"$"),"nother attribute value$")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[@xml:id="id8"][not(following-sibling::*)]/lambda[@xml:lang="nb"][@xml:id="id9"][following-sibling::gamma[@desciption][@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]]/rho[contains(@and,"100")]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <lambda att="true" xml:lang="en-GB"> + <kappa object="solid 1px green" xml:lang="nb"/> + <lambda string="another attribute value" xml:id="id1"/> + <rho xml:id="id2"/> + <rho true="123456789"> + <alpha> + <zeta/> + <any data="_blank"> + <xi abort="solid 1px green" xml:id="id3"/> + <omicron title="123456789" xml:lang="en" xml:id="id4"/> + <upsilon xml:lang="en"> + <psi delete="attribute" xml:lang="no-nb" xml:id="id5"> + <epsilon string="100%" xml:lang="en-GB" xml:id="id6"> + <any xml:id="id7"> + <delta abort="another attribute value" xml:lang="en-US"> + <epsilon xml:id="id8"> + <lambda xml:lang="nb" xml:id="id9"/> + <gamma desciption="another attribute value" xml:lang="nb" xml:id="id10"> + <rho and="100%"> + <green>This text must be green</green> + </rho> + </gamma> + </epsilon> + </delta> + </any> + </epsilon> + </psi> + </upsilon> + </any> + </alpha> + </rho> + </lambda> + </tree> + </test> + <test> + <xpath>//eta[starts-with(@src,"solid ")][@xml:lang="en-US"]//chi[@xml:id="id1"]//rho[@xml:lang="en-US"][following-sibling::delta[starts-with(@string,"attribut")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::sigma[following-sibling::phi//omicron[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::gamma[not(child::node())][following-sibling::omega[contains(concat(@attr,"$"),"e$")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omega[@class][not(following-sibling::*)]/eta//iota[@xml:lang="no-nb"][not(child::node())][following-sibling::omega[contains(concat(@delete,"$"),"56789$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:lang="en-US"][not(preceding-sibling::*)]//delta[@src][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@delete][following-sibling::mu[@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@attr="123456789"][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]]//delta[contains(concat(@and,"$"),"value$")][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@number][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@string][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta src="solid 1px green" xml:lang="en-US"> + <chi xml:id="id1"> + <rho xml:lang="en-US"/> + <delta string="attribute value" xml:lang="en-US"/> + <nu xml:lang="nb"/> + <sigma/> + <phi> + <omicron xml:lang="en-GB"/> + <gamma/> + <omega attr="true" xml:lang="nb"/> + <omega class="attribute value"> + <eta> + <iota xml:lang="no-nb"/> + <omega delete="123456789"> + <mu xml:lang="en-US"> + <delta src="content" xml:lang="nb"> + <any delete="solid 1px green"/> + <mu xml:id="id2"/> + <eta attr="123456789" xml:lang="en-GB"> + <delta and="another attribute value"/> + <nu number="content" xml:id="id3"/> + <pi string="true"> + <green>This text must be green</green> + </pi> + </eta> + </delta> + </mu> + </omega> + </eta> + </omega> + </phi> + </chi> + </eta> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="en-US"]/kappa[not(following-sibling::*)]//eta[contains(@abort,"789")][not(preceding-sibling::*)][not(following-sibling::*)]//psi[contains(concat(@or,"$"),"te$")]/phi[not(preceding-sibling::*)]//*[@or="solid 1px green"][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:id="id2"]//omega[starts-with(concat(@delete,"-"),"attribute-")][@xml:lang="en-GB"][following-sibling::mu[@xml:lang="no"][not(following-sibling::*)]/omega[contains(concat(@title,"$"),"ribute value$")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="no"][not(child::node())][following-sibling::nu[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:id="id5"][not(following-sibling::*)]/pi[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[not(preceding-sibling::xi)]]][position() = 1]]]</xpath> + <tree> + <lambda xml:lang="en-US"> + <kappa> + <eta abort="123456789"> + <psi or="attribute"> + <phi> + <any or="solid 1px green" xml:lang="en-GB" xml:id="id1"> + <gamma xml:id="id2"> + <omega delete="attribute-value" xml:lang="en-GB"/> + <mu xml:lang="no"> + <omega title="another attribute value" xml:lang="nb" xml:id="id3"/> + <tau xml:lang="no"/> + <nu xml:id="id4"/> + <alpha xml:id="id5"> + <pi xml:lang="en-US"> + <xi> + <green>This text must be green</green> + </xi> + </pi> + </alpha> + </mu> + </gamma> + </any> + </phi> + </psi> + </eta> + </kappa> + </lambda> + </tree> + </test> + <test> + <xpath>//omicron[@xml:lang="no"][@xml:id="id1"]//omicron[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::omicron or following-sibling::omicron)]//zeta[starts-with(concat(@src,"-"),"false-")][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[starts-with(concat(@abort,"-"),"123456789-")][not(following-sibling::*)]/iota[following-sibling::kappa[contains(concat(@or,"$"),"ttribute-value$")][@xml:id="id4"][preceding-sibling::*[position() = 1]]/gamma[@true][not(following-sibling::*)]//sigma[@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::rho[@xml:lang="en-US"]//nu[@xml:lang="en"][not(following-sibling::*)]//epsilon[@name][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[starts-with(concat(@data,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)]//xi[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[contains(@number,"00%")][@xml:lang="en-GB"][following-sibling::omicron[contains(@true,"d 1px ")][@xml:id="id8"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omicron xml:lang="no" xml:id="id1"> + <omicron xml:lang="en" xml:id="id2"> + <zeta src="false" xml:id="id3"/> + <eta abort="123456789"> + <iota/> + <kappa or="attribute-value" xml:id="id4"> + <gamma true="true"> + <sigma xml:lang="en-US" xml:id="id5"/> + <rho xml:lang="en-US"> + <nu xml:lang="en"> + <epsilon name="123456789"> + <upsilon data="attribute" xml:lang="en-GB" xml:id="id6"> + <xi xml:lang="nb"> + <omega xml:id="id7"/> + <chi number="100%" xml:lang="en-GB"/> + <omicron true="solid 1px green" xml:id="id8"> + <green>This text must be green</green> + </omicron> + </xi> + </upsilon> + </epsilon> + </nu> + </rho> + </gamma> + </kappa> + </eta> + </omicron> + </omicron> + </tree> + </test> + <test> + <xpath>//theta[@attr][@xml:lang="en-US"][@xml:id="id1"]//epsilon[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::nu[contains(@attr,"-")][preceding-sibling::*[position() = 2]]/epsilon[not(preceding-sibling::*)]//nu[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[@abort][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[@and][@xml:lang="no"]//alpha[starts-with(@desciption,"att")][@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <theta attr="attribute" xml:lang="en-US" xml:id="id1"> + <epsilon xml:lang="en" xml:id="id2"/> + <upsilon xml:lang="no"/> + <nu attr="attribute-value"> + <epsilon> + <nu xml:lang="no-nb" xml:id="id3"/> + <alpha abort="attribute" xml:lang="no"/> + <alpha and="100%" xml:lang="no"> + <alpha desciption="attribute" xml:lang="no-nb" xml:id="id4"> + <green>This text must be green</green> + </alpha> + </alpha> + </epsilon> + </nu> + </theta> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@or,"$"),"0%$")][@xml:lang="en-GB"][@xml:id="id1"]/upsilon[@data][not(preceding-sibling::*)][following-sibling::eta[starts-with(@attribute,"th")]//xi[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::rho[@and][@xml:id="id4"][following-sibling::delta[starts-with(concat(@abort,"-"),"100%-")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/eta[@xml:lang="en"][following-sibling::iota[following-sibling::nu[preceding-sibling::*[position() = 2]][not(following-sibling::*)]/lambda[contains(concat(@string,"$"),"0%$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@string][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[starts-with(concat(@string,"-"),"another attribute value-")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::rho[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]/chi[not(preceding-sibling::*)][not(child::node())][following-sibling::rho[starts-with(concat(@content,"-"),"100%-")][@xml:lang="no"]//mu[@xml:lang="en-GB"][not(following-sibling::*)]/pi[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[starts-with(@false,"t")][@xml:lang="nb"][not(following-sibling::*)]//rho[@xml:lang="en-US"][not(child::node())][following-sibling::theta[not(following-sibling::*)]/beta[@desciption][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <iota or="100%" xml:lang="en-GB" xml:id="id1"> + <upsilon data="100%"/> + <eta attribute="this.nodeValue"> + <xi xml:lang="nb" xml:id="id2"/> + <upsilon xml:lang="no-nb" xml:id="id3"/> + <rho and="false" xml:id="id4"/> + <delta abort="100%" xml:lang="no-nb" xml:id="id5"> + <eta xml:lang="en"/> + <iota/> + <nu> + <lambda string="100%"/> + <chi> + <chi string="100%" xml:id="id6"> + <rho string="another attribute value" xml:lang="en"/> + <rho xml:lang="en-GB" xml:id="id7"> + <chi/> + <rho content="100%" xml:lang="no"> + <mu xml:lang="en-GB"> + <pi xml:lang="nb"/> + <tau false="true" xml:lang="nb"> + <rho xml:lang="en-US"/> + <theta> + <beta desciption="attribute-value"> + <green>This text must be green</green> + </beta> + </theta> + </tau> + </mu> + </rho> + </rho> + </chi> + </chi> + </nu> + </delta> + </eta> + </iota> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="no"][@xml:id="id1"]//tau[contains(@delete,"5678")][@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]//gamma[@xml:lang="en"][not(following-sibling::*)]//nu[@xml:id="id3"][following-sibling::*[position()=2]][following-sibling::sigma[@xml:lang="en-US"][@xml:id="id4"][following-sibling::alpha[@src="content"][@xml:id="id5"]/lambda[not(child::node())][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::nu[starts-with(concat(@title,"-"),"another attribute value-")][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::*[starts-with(@delete,"t")][not(child::node())][following-sibling::lambda[@xml:id="id7"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::xi[starts-with(@src,"_blank")][@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//upsilon[contains(concat(@delete,"$"),"ontent$")][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[contains(@content,"9")][@xml:id="id10"][preceding-sibling::*[position() = 2]]//xi[contains(@abort,"ue")][@xml:lang="no"][@xml:id="id11"][following-sibling::*[position()=4]][not(child::node())][following-sibling::psi[starts-with(concat(@content,"-"),"solid 1px green-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::pi[contains(@delete,"green")][@xml:id="id12"][following-sibling::*[position()=2]][following-sibling::phi[@xml:id="id13"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::pi[contains(@data,"_")]]]][position() = 1]]][position() = 1]]][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <lambda xml:lang="no" xml:id="id1"> + <tau delete="123456789" xml:lang="no-nb" xml:id="id2"> + <gamma xml:lang="en"> + <nu xml:id="id3"/> + <sigma xml:lang="en-US" xml:id="id4"/> + <alpha src="content" xml:id="id5"> + <lambda/> + <mu xml:lang="no"/> + <nu title="another attribute value" xml:id="id6"/> + <any delete="this.nodeValue"/> + <lambda xml:id="id7"/> + <xi src="_blank" xml:lang="en" xml:id="id8"> + <upsilon delete="content" xml:lang="nb" xml:id="id9"/> + <nu xml:lang="no-nb"/> + <upsilon content="123456789" xml:id="id10"> + <xi abort="another attribute value" xml:lang="no" xml:id="id11"/> + <psi content="solid 1px green" xml:lang="no-nb"/> + <pi delete="solid 1px green" xml:id="id12"/> + <phi xml:id="id13"/> + <pi data="_blank"> + <green>This text must be green</green> + </pi> + </upsilon> + </xi> + </alpha> + </gamma> + </tau> + </lambda> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no-nb"]/eta[@data][@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)]//lambda[@xml:lang="nb"][not(following-sibling::*)]//iota[not(following-sibling::*)]//kappa[@or][@xml:id="id2"][not(child::node())][following-sibling::rho[@name="another attribute value"][@xml:lang="no"]/delta[starts-with(concat(@class,"-"),"false-")][@xml:lang="en"][not(preceding-sibling::*)]/eta[@src="another attribute value"][@xml:id="id3"][following-sibling::nu[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[starts-with(@content,"at")][@xml:lang="en-GB"][@xml:id="id4"]//lambda[starts-with(concat(@att,"-"),"this.nodeValue-")][@xml:lang="nb"][not(preceding-sibling::*)]//beta[@insert="attribute value"][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[@xml:lang="no"][following-sibling::theta[starts-with(@or,"attribu")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@class][@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[starts-with(concat(@att,"-"),"123456789-")][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@xml:lang="no"][following-sibling::upsilon[@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 2]][following-sibling::epsilon[@or][not(child::node())][following-sibling::omega[@xml:id="id8"][preceding-sibling::*[position() = 4]][not(preceding-sibling::omega)]/iota[@xml:lang="nb"][@xml:id="id9"][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <tau xml:lang="no-nb"> + <eta data="this-is-att-value" xml:lang="nb" xml:id="id1"> + <lambda xml:lang="nb"> + <iota> + <kappa or="attribute value" xml:id="id2"/> + <rho name="another attribute value" xml:lang="no"> + <delta class="false" xml:lang="en"> + <eta src="another attribute value" xml:id="id3"/> + <nu xml:lang="no-nb"> + <upsilon content="attribute value" xml:lang="en-GB" xml:id="id4"> + <lambda att="this.nodeValue" xml:lang="nb"> + <beta insert="attribute value" xml:lang="nb" xml:id="id5"> + <chi xml:lang="no"/> + <theta or="attribute-value"> + <alpha class="solid 1px green" xml:lang="en-US" xml:id="id6"> + <phi att="123456789"/> + <beta> + <kappa xml:lang="no"/> + <upsilon xml:id="id7"/> + <nu/> + <epsilon or="attribute-value"/> + <omega xml:id="id8"> + <iota xml:lang="nb" xml:id="id9"> + <green>This text must be green</green> + </iota> + </omega> + </beta> + </alpha> + </theta> + </beta> + </lambda> + </upsilon> + </nu> + </delta> + </rho> + </iota> + </lambda> + </eta> + </tau> + </tree> + </test> + <test> + <xpath>//eta/iota[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(preceding-sibling::iota)]//theta[contains(concat(@true,"$"),"en$")][@xml:lang="no-nb"][not(following-sibling::*)]//delta[contains(concat(@number,"$"),"blank$")][@xml:lang="en"][@xml:id="id2"]/eta[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[starts-with(concat(@title,"-"),"solid 1px green-")][@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::*[starts-with(@content,"anoth")][@xml:lang="en-US"][@xml:id="id5"][not(child::node())][following-sibling::gamma[@and="another attribute value"][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[@class="this-is-att-value"][@xml:id="id6"][not(preceding-sibling::*)]//theta[contains(@title,"%")][@xml:lang="no-nb"][not(child::node())][following-sibling::pi[@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::psi[contains(@delete,"tru")][following-sibling::*[position()=2]][following-sibling::kappa[@att="another attribute value"][preceding-sibling::*[position() = 3]][following-sibling::alpha[@xml:lang="no-nb"]//gamma]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta> + <iota xml:lang="en-GB" xml:id="id1"> + <theta true="solid 1px green" xml:lang="no-nb"> + <delta number="_blank" xml:lang="en" xml:id="id2"> + <eta xml:lang="en-US" xml:id="id3"> + <rho title="solid 1px green" xml:lang="en" xml:id="id4"/> + <any content="another attribute value" xml:lang="en-US" xml:id="id5"/> + <gamma and="another attribute value" xml:lang="en-GB"> + <alpha class="this-is-att-value" xml:id="id6"> + <theta title="100%" xml:lang="no-nb"/> + <pi xml:id="id7"/> + <psi delete="true"/> + <kappa att="another attribute value"/> + <alpha xml:lang="no-nb"> + <gamma> + <green>This text must be green</green> + </gamma> + </alpha> + </alpha> + </gamma> + </eta> + </delta> + </theta> + </iota> + </eta> + </tree> + </test> + <test> + <xpath>//sigma[contains(concat(@attribute,"$"),"bute value$")][@xml:id="id1"]//epsilon[contains(concat(@false,"$"),"e$")][@xml:lang="nb"][@xml:id="id2"]/alpha[following-sibling::*[@attribute][not(child::node())][following-sibling::*[@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omega/theta[not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id4"][not(child::node())][following-sibling::zeta[@attribute]//xi[starts-with(@name,"this-is-at")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@false][@xml:lang="en-US"][not(child::node())][following-sibling::epsilon[@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@name][@xml:id="id7"]//gamma[following-sibling::lambda[@xml:lang="nb"]/mu[starts-with(concat(@and,"-"),"false-")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="no-nb"]//lambda[@xml:lang="nb"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[contains(@and,"e")][following-sibling::gamma[@insert][@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]][position() = 1]][position() = 1]]]]]][position() = 1]]]</xpath> + <tree> + <sigma attribute="another attribute value" xml:id="id1"> + <epsilon false="false" xml:lang="nb" xml:id="id2"> + <alpha/> + <any attribute="attribute"/> + <any xml:lang="nb"/> + <omega> + <theta> + <delta xml:lang="en-GB" xml:id="id3"/> + <iota xml:id="id4"/> + <zeta attribute="attribute value"> + <xi name="this-is-att-value" xml:lang="en-GB" xml:id="id5"/> + <pi false="attribute-value" xml:lang="en-US"/> + <epsilon xml:lang="nb" xml:id="id6"/> + <phi name="100%" xml:id="id7"> + <gamma/> + <lambda xml:lang="nb"> + <mu and="false" xml:lang="no-nb"> + <mu xml:lang="no-nb"> + <lambda xml:lang="nb" xml:id="id8"> + <iota and="attribute"/> + <gamma insert="false" xml:lang="nb" xml:id="id9"> + <green>This text must be green</green> + </gamma> + </lambda> + </mu> + </mu> + </lambda> + </phi> + </zeta> + </theta> + </omega> + </epsilon> + </sigma> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@desciption,"$"),"e$")][@xml:lang="en"][@xml:id="id1"]/theta[contains(concat(@desciption,"$"),"23456789$")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]/psi[starts-with(@data,"fal")][@xml:lang="en-GB"][@xml:id="id3"]/iota[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::omicron[starts-with(@false,"attribut")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]/xi[@token="attribute"][@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)][position() = 1]]</xpath> + <tree> + <beta desciption="true" xml:lang="en" xml:id="id1"> + <theta desciption="123456789" xml:lang="en" xml:id="id2"> + <psi data="false" xml:lang="en-GB" xml:id="id3"> + <iota xml:lang="en-GB" xml:id="id4"/> + <omicron false="attribute" xml:lang="no-nb" xml:id="id5"> + <xi token="attribute" xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </xi> + </omicron> + </psi> + </theta> + </beta> + </tree> + </test> + <test> + <xpath>//iota[starts-with(concat(@and,"-"),"solid 1px green-")]//psi//theta[not(preceding-sibling::*)][following-sibling::alpha[@desciption="_blank"][following-sibling::*[position()=2]][following-sibling::sigma[@xml:lang="en-GB"][following-sibling::kappa[contains(concat(@true,"$"),"en$")][@xml:lang="no"][@xml:id="id1"]//pi[@class="solid 1px green"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::pi)]//upsilon[starts-with(concat(@token,"-"),"123456789-")][@xml:lang="no"][not(following-sibling::*)]//phi[@insert][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::kappa[contains(concat(@delete,"$"),"alue$")][@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::*[@xml:lang="no-nb"][not(preceding-sibling::any)]//rho[@false][following-sibling::chi[contains(concat(@attrib,"$"),"lid 1px green$")][@xml:lang="en-US"][following-sibling::*[position()=3]][following-sibling::epsilon[@xml:lang="no"][preceding-sibling::*[position() = 2]][following-sibling::beta[@xml:lang="en"][@xml:id="id5"][not(child::node())][following-sibling::omicron[contains(concat(@attr,"$")," value$")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota and="solid 1px green"> + <psi> + <theta/> + <alpha desciption="_blank"/> + <sigma xml:lang="en-GB"/> + <kappa true="solid 1px green" xml:lang="no" xml:id="id1"> + <pi class="solid 1px green" xml:id="id2"> + <upsilon token="123456789" xml:lang="no"> + <phi insert="this-is-att-value" xml:id="id3"/> + <kappa delete="attribute-value" xml:lang="no" xml:id="id4"/> + <any xml:lang="no-nb"> + <rho false="this.nodeValue"/> + <chi attrib="solid 1px green" xml:lang="en-US"/> + <epsilon xml:lang="no"/> + <beta xml:lang="en" xml:id="id5"/> + <omicron attr="attribute value" xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </any> + </upsilon> + </pi> + </kappa> + </psi> + </iota> + </tree> + </test> + <test> + <xpath>//xi[@attrib="attribute-value"][@xml:lang="no-nb"]/beta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]][following-sibling::mu[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::upsilon[@att][not(child::node())][following-sibling::beta[@true="123456789"][@xml:lang="nb"]/eta[not(preceding-sibling::*)][not(following-sibling::*)]//theta[starts-with(concat(@class,"-"),"attribute value-")][@xml:lang="no-nb"][not(child::node())][following-sibling::*[@xml:lang="en-GB"][not(following-sibling::*)]/*[starts-with(@token,"solid ")][not(following-sibling::*)]/tau[contains(concat(@class,"$"),"_blank$")][@xml:lang="en-GB"][@xml:id="id1"][following-sibling::eta[starts-with(@token,"t")][@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//theta[@or][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[not(following-sibling::*)]//rho[@and="attribute value"][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[not(following-sibling::*)]/omicron[starts-with(concat(@string,"-"),"content-")][@xml:lang="nb"][not(preceding-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi attrib="attribute-value" xml:lang="no-nb"> + <beta xml:lang="en-GB"/> + <nu/> + <mu xml:lang="en-GB"/> + <upsilon att="attribute value"/> + <beta true="123456789" xml:lang="nb"> + <eta> + <theta class="attribute value" xml:lang="no-nb"/> + <any xml:lang="en-GB"> + <any token="solid 1px green"> + <tau class="_blank" xml:lang="en-GB" xml:id="id1"/> + <eta token="this.nodeValue" xml:lang="no" xml:id="id2"/> + <delta xml:lang="no-nb" xml:id="id3"> + <theta or="100%"/> + <psi> + <rho and="attribute value" xml:lang="en-GB" xml:id="id4"/> + <any> + <omicron string="content" xml:lang="nb"> + <green>This text must be green</green> + </omicron> + </any> + </psi> + </delta> + </any> + </any> + </eta> + </beta> + </xi> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en"][@xml:id="id1"]//lambda[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[contains(@insert,"is-is-att-value")][@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)][not(preceding-sibling::xi)]/omega[@xml:id="id3"][not(following-sibling::*)]//alpha[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[contains(@token,"%")][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <upsilon xml:lang="en" xml:id="id1"> + <lambda xml:lang="nb"/> + <xi insert="this-is-att-value" xml:lang="en" xml:id="id2"> + <omega xml:id="id3"> + <alpha xml:id="id4"> + <sigma token="100%"> + <green>This text must be green</green> + </sigma> + </alpha> + </omega> + </xi> + </upsilon> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]//iota[contains(@object,"%")][not(preceding-sibling::*)][not(child::node())][following-sibling::*[contains(concat(@attrib,"$"),"value$")][@xml:id="id2"]/phi[contains(@attrib,"ent")][@xml:lang="en"]/eta[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@xml:lang="no-nb"][not(child::node())][following-sibling::xi[@xml:lang="nb"][not(following-sibling::*)]/delta[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="en-US"][@xml:id="id4"][following-sibling::omicron[contains(@name,"9")][@xml:lang="nb"]//epsilon[@number][@xml:id="id5"][not(child::node())][following-sibling::zeta[@true][@xml:lang="en-GB"][following-sibling::*[position()=7]][not(child::node())][following-sibling::theta[starts-with(concat(@insert,"-"),"true-")][preceding-sibling::*[position() = 2]][following-sibling::*[position()=6]][following-sibling::eta[@attrib="false"][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=5]][following-sibling::omicron[starts-with(concat(@content,"-"),"attribute-")][@xml:id="id7"][not(child::node())][following-sibling::zeta[@xml:id="id8"][not(child::node())][following-sibling::gamma[@desciption="true"][@xml:id="id9"][preceding-sibling::*[position() = 6]][following-sibling::kappa[@xml:id="id10"][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][not(following-sibling::*)]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi xml:id="id1"> + <iota object="100%"/> + <any attrib="attribute-value" xml:id="id2"> + <phi attrib="content" xml:lang="en"> + <eta xml:id="id3"> + <beta xml:lang="no-nb"/> + <xi xml:lang="nb"> + <delta false="123456789" xml:lang="en-US" xml:id="id4"/> + <omicron name="123456789" xml:lang="nb"> + <epsilon number="100%" xml:id="id5"/> + <zeta true="100%" xml:lang="en-GB"/> + <theta insert="true"/> + <eta attrib="false" xml:id="id6"/> + <omicron content="attribute" xml:id="id7"/> + <zeta xml:id="id8"/> + <gamma desciption="true" xml:id="id9"/> + <kappa xml:id="id10"/> + <tau xml:lang="no-nb"> + <green>This text must be green</green> + </tau> + </omicron> + </xi> + </eta> + </phi> + </any> + </psi> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="en-US"]/zeta[@xml:lang="en"][not(child::node())][following-sibling::theta[@token][@xml:lang="nb"][not(preceding-sibling::theta or following-sibling::theta)][not(child::node())][following-sibling::psi[contains(@token,"ribu")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::epsilon[@xml:id="id1"][preceding-sibling::*[position() = 3]][following-sibling::upsilon[@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::chi[contains(concat(@or,"$"),"blank$")][@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 5]][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <sigma xml:lang="en-US"> + <zeta xml:lang="en"/> + <theta token="123456789" xml:lang="nb"/> + <psi token="attribute" xml:lang="nb"/> + <epsilon xml:id="id1"/> + <upsilon xml:lang="nb"/> + <chi or="_blank" xml:lang="en-GB" xml:id="id2"> + <green>This text must be green</green> + </chi> + </sigma> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en-GB"]/psi[@xml:id="id1"][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@xml:lang="nb"][not(following-sibling::*)]/rho[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[starts-with(@insert,"thi")][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::alpha[not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega xml:lang="en-GB"> + <psi xml:id="id1"/> + <phi> + <any xml:lang="nb"> + <rho xml:id="id2"/> + <omega insert="this.nodeValue" xml:id="id3"/> + <alpha> + <green>This text must be green</green> + </alpha> + </any> + </phi> + </omega> + </tree> + </test> + <test> + <xpath>//xi[contains(@attr,"tru")][@xml:lang="en-US"][@xml:id="id1"]/theta[not(following-sibling::*)]//omega[contains(@object,"this")][@xml:id="id2"][not(preceding-sibling::*)]/zeta[contains(concat(@title,"$"),"nk$")][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::iota[@xml:lang="no-nb"][not(following-sibling::*)]//pi[@xml:id="id4"][not(child::node())][following-sibling::nu[@attrib][@xml:lang="nb"][@xml:id="id5"][following-sibling::omega[contains(@and,"e")][@xml:lang="en"][following-sibling::iota[@xml:lang="en-GB"][not(following-sibling::*)]//beta[@xml:lang="no"][following-sibling::sigma[contains(concat(@false,"$"),"k$")][not(child::node())][following-sibling::sigma[@string="attribute-value"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@or="attribute"][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/iota[starts-with(@name,"attrib")][@xml:id="id8"][not(child::node())][following-sibling::theta[@content][@xml:id="id9"]]][position() = 1]]]]]]]]</xpath> + <tree> + <xi attr="true" xml:lang="en-US" xml:id="id1"> + <theta> + <omega object="this.nodeValue" xml:id="id2"> + <zeta title="_blank" xml:id="id3"/> + <iota xml:lang="no-nb"> + <pi xml:id="id4"/> + <nu attrib="attribute-value" xml:lang="nb" xml:id="id5"/> + <omega and="false" xml:lang="en"/> + <iota xml:lang="en-GB"> + <beta xml:lang="no"/> + <sigma false="_blank"/> + <sigma string="attribute-value"/> + <any or="attribute" xml:id="id6"/> + <chi xml:lang="no" xml:id="id7"> + <iota name="attribute-value" xml:id="id8"/> + <theta content="this-is-att-value" xml:id="id9"> + <green>This text must be green</green> + </theta> + </chi> + </iota> + </iota> + </omega> + </theta> + </xi> + </tree> + </test> + <test> + <xpath>//sigma[@token]//eta[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[@number][@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//omicron[@data][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::lambda[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::tau[not(following-sibling::*)]/lambda[@xml:id="id4"][not(preceding-sibling::*)]/mu[starts-with(@title,"s")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omicron[@src][@xml:lang="no"][not(child::node())][following-sibling::psi[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:lang="no-nb"][not(following-sibling::*)]/beta[contains(concat(@token,"$"),"r attribute value$")][@xml:lang="no-nb"][not(preceding-sibling::*)]//chi[@token][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@title="false"][@xml:lang="en-US"][@xml:id="id7"]//lambda[@desciption][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:lang="en-US"][not(following-sibling::*)]//iota/mu[@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:id="id9"][not(child::node())][following-sibling::gamma[contains(concat(@string,"$"),"tent$")][@xml:lang="nb"][@xml:id="id10"]/lambda[@desciption][@xml:lang="en"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::xi[@xml:id="id12"][preceding-sibling::*[position() = 1]][not(following-sibling::xi)][following-sibling::theta[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id13"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <sigma token="attribute value"> + <eta xml:lang="no" xml:id="id1"/> + <any number="123456789" xml:lang="no-nb" xml:id="id2"> + <omicron data="attribute value" xml:lang="nb"/> + <lambda xml:id="id3"/> + <tau> + <lambda xml:id="id4"> + <mu title="solid 1px green" xml:id="id5"/> + <iota xml:lang="en"> + <omicron src="false" xml:lang="no"/> + <psi xml:lang="nb"/> + <theta xml:lang="no-nb"> + <beta token="another attribute value" xml:lang="no-nb"> + <chi token="_blank" xml:lang="no" xml:id="id6"> + <nu title="false" xml:lang="en-US" xml:id="id7"> + <lambda desciption="100%" xml:lang="en-GB"> + <chi xml:lang="en-US"> + <iota> + <mu xml:id="id8"> + <lambda xml:id="id9"/> + <gamma string="content" xml:lang="nb" xml:id="id10"> + <lambda desciption="_blank" xml:lang="en" xml:id="id11"/> + <xi xml:id="id12"/> + <theta content="attribute" xml:lang="en-GB" xml:id="id13"> + <green>This text must be green</green> + </theta> + </gamma> + </mu> + </iota> + </chi> + </lambda> + </nu> + </chi> + </beta> + </theta> + </iota> + </lambda> + </tau> + </any> + </sigma> + </tree> + </test> + <test> + <xpath>//omicron[@xml:id="id1"]/phi[contains(concat(@title,"$"),"1px green$")][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]//tau[@xml:id="id3"][not(child::node())][following-sibling::delta[@true="true"][not(following-sibling::*)]//epsilon[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@xml:lang="no"][following-sibling::psi[@number][@xml:lang="nb"][following-sibling::gamma[following-sibling::zeta[contains(concat(@object,"$"),"%$")][@xml:lang="nb"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[starts-with(@att,"f")][not(preceding-sibling::sigma)]]]]][position() = 1]]</xpath> + <tree> + <omicron xml:id="id1"> + <phi title="solid 1px green" xml:lang="nb" xml:id="id2"> + <tau xml:id="id3"/> + <delta true="true"> + <epsilon xml:lang="no" xml:id="id4"> + <tau xml:lang="no"/> + <psi number="100%" xml:lang="nb"/> + <gamma/> + <zeta object="100%" xml:lang="nb"/> + <sigma att="false"> + <green>This text must be green</green> + </sigma> + </epsilon> + </delta> + </phi> + </omicron> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="no"]//lambda[following-sibling::*[position()=1]][following-sibling::phi[@content="this.nodeValue"][@xml:lang="no-nb"][@xml:id="id1"][not(following-sibling::*)]//theta[@abort][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@data][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[starts-with(concat(@number,"-"),"true-")][@xml:id="id3"][not(following-sibling::zeta)][not(child::node())][following-sibling::beta[@xml:id="id4"][not(following-sibling::*)]/rho[@xml:lang="nb"]//zeta[@content="attribute"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::beta[contains(concat(@attribute,"$"),"n$")][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]//sigma[contains(concat(@class,"$"),"789$")][@xml:lang="en-US"]/eta[@number][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:id="id8"][preceding-sibling::*[position() = 1]]/omicron[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::iota[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//theta[@xml:lang="en-US"][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <sigma xml:lang="no"> + <lambda/> + <phi content="this.nodeValue" xml:lang="no-nb" xml:id="id1"> + <theta abort="another attribute value"> + <delta data="attribute" xml:id="id2"/> + <zeta number="true" xml:id="id3"/> + <beta xml:id="id4"> + <rho xml:lang="nb"> + <zeta content="attribute" xml:id="id5"/> + <beta attribute="solid 1px green" xml:lang="en" xml:id="id6"> + <sigma class="123456789" xml:lang="en-US"> + <eta number="123456789" xml:id="id7"/> + <phi xml:id="id8"> + <omicron/> + <iota> + <theta xml:lang="en-US"> + <green>This text must be green</green> + </theta> + </iota> + </phi> + </sigma> + </beta> + </rho> + </beta> + </theta> + </phi> + </sigma> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="no-nb"][@xml:id="id1"]//omega[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@delete][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]]/lambda[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@xml:id="id3"][not(child::node())][following-sibling::alpha[@title][@xml:lang="no"][@xml:id="id4"]//delta[not(preceding-sibling::*)][not(following-sibling::*)]//eta[@att][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[not(preceding-sibling::*)]//psi[@and="false"][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@attribute][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::nu[starts-with(concat(@token,"-"),"123456789-")][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::delta[following-sibling::mu[@data="another attribute value"]//omega[@data][@xml:lang="en-US"][not(preceding-sibling::*)]][position() = 1]]]]]</xpath> + <tree> + <nu xml:lang="no-nb" xml:id="id1"> + <omega xml:lang="no-nb"> + <any delete="true"/> + <nu> + <lambda xml:id="id2"> + <theta xml:id="id3"/> + <alpha title="attribute" xml:lang="no" xml:id="id4"> + <delta> + <eta att="this-is-att-value"> + <omicron> + <psi and="false" xml:lang="en" xml:id="id5"> + <lambda attribute="_blank" xml:lang="no"/> + <nu token="123456789" xml:id="id6"/> + <delta/> + <mu data="another attribute value"> + <omega data="false" xml:lang="en-US"> + <green>This text must be green</green> + </omega> + </mu> + </psi> + </omicron> + </eta> + </delta> + </alpha> + </lambda> + </nu> + </omega> + </nu> + </tree> + </test> + <test> + <xpath>//kappa//kappa[contains(concat(@false,"$"),"tent$")][@xml:id="id1"][not(child::node())][following-sibling::iota[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@att]//sigma[@xml:lang="en"][@xml:id="id2"][not(child::node())][following-sibling::delta[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[contains(concat(@name,"$"),"ue$")][not(preceding-sibling::*)][following-sibling::lambda[starts-with(concat(@token,"-"),"100%-")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::upsilon[starts-with(@attr,"solid 1px gr")][@xml:lang="en-US"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <kappa> + <kappa false="content" xml:id="id1"/> + <iota xml:lang="en"/> + <psi att="attribute value"> + <sigma xml:lang="en" xml:id="id2"/> + <delta xml:lang="nb"> + <xi name="true"/> + <lambda token="100%" xml:lang="en-GB"/> + <beta xml:id="id3"/> + <upsilon attr="solid 1px green" xml:lang="en-US"> + <green>This text must be green</green> + </upsilon> + </delta> + </psi> + </kappa> + </tree> + </test> + <test> + <xpath>//chi[starts-with(concat(@name,"-"),"solid 1px green-")]/xi[@xml:id="id1"][not(following-sibling::*)]//tau[@xml:lang="en-US"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[contains(@and,"00%")][@xml:id="id3"]/beta[@xml:id="id4"][following-sibling::gamma[@xml:lang="en"][@xml:id="id5"][following-sibling::epsilon[@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[starts-with(concat(@attr,"-"),"true-")][@xml:lang="no"][not(preceding-sibling::nu)][following-sibling::eta[contains(@content,"een")][@xml:lang="no"][preceding-sibling::*[position() = 1]]/iota[@xml:lang="no"][following-sibling::*[position()=1]][following-sibling::iota[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/theta[@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::sigma[@desciption="true"][@xml:id="id8"]//kappa[contains(@insert,"ri")][not(preceding-sibling::*)][following-sibling::omega[starts-with(concat(@false,"-"),"true-")]//mu[contains(@false,"ru")][@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::omicron[@xml:lang="nb"][@xml:id="id9"][not(child::node())][following-sibling::iota[@xml:lang="nb"][not(following-sibling::*)]//alpha[@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[contains(@src,"nt")][preceding-sibling::*[position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi name="solid 1px green"> + <xi xml:id="id1"> + <tau xml:lang="en-US" xml:id="id2"/> + <sigma and="100%" xml:id="id3"> + <beta xml:id="id4"/> + <gamma xml:lang="en" xml:id="id5"/> + <epsilon xml:id="id6"> + <nu attr="true" xml:lang="no"/> + <eta content="solid 1px green" xml:lang="no"> + <iota xml:lang="no"/> + <iota xml:lang="en-US"> + <theta xml:id="id7"/> + <sigma desciption="true" xml:id="id8"> + <kappa insert="attribute"/> + <omega false="true"> + <mu false="true" xml:lang="en"/> + <omicron xml:lang="nb" xml:id="id9"/> + <iota xml:lang="nb"> + <alpha xml:lang="en"/> + <omicron src="content"> + <green>This text must be green</green> + </omicron> + </iota> + </omega> + </sigma> + </iota> + </eta> + </epsilon> + </sigma> + </xi> + </chi> + </tree> + </test> + <test> + <xpath>//beta[@xml:id="id1"]//iota[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]/iota[@xml:lang="no-nb"][not(preceding-sibling::*)]//epsilon[@xml:lang="en"][not(preceding-sibling::*)]/lambda[not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)]//delta[@false][@xml:lang="no-nb"]</xpath> + <tree> + <beta xml:id="id1"> + <iota xml:lang="en-US" xml:id="id2"> + <iota xml:lang="no-nb"> + <epsilon xml:lang="en"> + <lambda> + <epsilon xml:lang="en-US" xml:id="id3"> + <delta false="attribute" xml:lang="no-nb"> + <green>This text must be green</green> + </delta> + </epsilon> + </lambda> + </epsilon> + </iota> + </iota> + </beta> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]/beta[starts-with(@attrib,"solid 1px gr")][following-sibling::tau[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::psi[@string][@xml:lang="no-nb"][@xml:id="id3"][not(child::node())][following-sibling::alpha[@delete][@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 4]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:id="id1"> + <beta attrib="solid 1px green"/> + <tau xml:lang="en-US"/> + <zeta xml:id="id2"/> + <psi string="solid 1px green" xml:lang="no-nb" xml:id="id3"/> + <alpha delete="attribute" xml:lang="en" xml:id="id4"> + <green>This text must be green</green> + </alpha> + </nu> + </tree> + </test> + <test> + <xpath>//iota[contains(concat(@token,"$"),"false$")][@xml:lang="en"][@xml:id="id1"]/lambda[@number="true"][@xml:id="id2"]/upsilon[@token][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[@xml:lang="nb"][not(following-sibling::*)]/eta[not(preceding-sibling::*)][following-sibling::nu[starts-with(concat(@object,"-"),"solid 1px green-")][@xml:id="id3"][preceding-sibling::*[position() = 1]]/nu[@src][not(following-sibling::*)]/tau[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[not(following-sibling::*)]//tau[starts-with(@false,"th")]//mu[starts-with(@delete,"a")][@xml:lang="nb"][@xml:id="id5"]//lambda[starts-with(concat(@and,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)]/nu[contains(concat(@string,"$"),"tent$")][@xml:lang="no"][not(preceding-sibling::*)]//chi[position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota token="false" xml:lang="en" xml:id="id1"> + <lambda number="true" xml:id="id2"> + <upsilon token="_blank" xml:lang="no"/> + <rho xml:lang="nb"> + <eta/> + <nu object="solid 1px green" xml:id="id3"> + <nu src="this-is-att-value"> + <tau xml:lang="en" xml:id="id4"/> + <xi> + <tau false="this.nodeValue"> + <mu delete="attribute" xml:lang="nb" xml:id="id5"> + <lambda and="attribute" xml:lang="nb" xml:id="id6"> + <nu string="content" xml:lang="no"> + <chi> + <green>This text must be green</green> + </chi> + </nu> + </lambda> + </mu> + </tau> + </xi> + </nu> + </nu> + </rho> + </lambda> + </iota> + </tree> + </test> + <test> + <xpath>//mu//lambda[starts-with(@attr,"100")][@xml:lang="no-nb"][@xml:id="id1"]/chi[@xml:id="id2"][not(child::node())][following-sibling::beta[@delete="true"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@src="solid 1px green"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::sigma[not(child::node())][following-sibling::rho[starts-with(@attribute,"attribu")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[starts-with(@abort,"this.nodeV")][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[contains(concat(@attrib,"$"),"lue$")]/chi[@abort="false"][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::nu[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::mu[@xml:id="id6"]/beta[following-sibling::kappa[starts-with(concat(@object,"-"),"this-")][@xml:lang="en-US"][@xml:id="id7"][not(child::node())][following-sibling::rho[@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::sigma[@title][@xml:id="id9"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//xi[@false][not(preceding-sibling::*)][following-sibling::pi[@xml:id="id10"][preceding-sibling::*[position() = 1]]//nu[starts-with(@attribute,"conte")][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::psi[starts-with(concat(@number,"-"),"true-")][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@true="123456789"][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::rho[@xml:lang="en-US"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]]][position() = 1]]]]]]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <mu> + <lambda attr="100%" xml:lang="no-nb" xml:id="id1"> + <chi xml:id="id2"/> + <beta delete="true" xml:id="id3"> + <phi src="solid 1px green" xml:id="id4"/> + <sigma/> + <rho attribute="attribute"> + <alpha abort="this.nodeValue"/> + <chi attrib="this-is-att-value"> + <chi abort="false" xml:lang="en" xml:id="id5"/> + <nu xml:lang="en-US"/> + <mu xml:id="id6"> + <beta/> + <kappa object="this-is-att-value" xml:lang="en-US" xml:id="id7"/> + <rho xml:id="id8"/> + <sigma title="this-is-att-value" xml:id="id9"> + <xi false="another attribute value"/> + <pi xml:id="id10"> + <nu attribute="content"/> + <psi number="true" xml:id="id11"/> + <xi true="123456789" xml:lang="no-nb"/> + <rho xml:lang="en-US"> + <green>This text must be green</green> + </rho> + </pi> + </sigma> + </mu> + </chi> + </rho> + </beta> + </lambda> + </mu> + </tree> + </test> + <test> + <xpath>//xi[@attrib]//delta[@xml:lang="no-nb"][not(preceding-sibling::*)]/gamma[not(following-sibling::*)]//beta[contains(concat(@title,"$"),"odeValue$")][@xml:id="id1"]/omega[contains(@true,"ribute value")][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id2"]/chi[@xml:lang="en"][not(following-sibling::*)][not(parent::*/*[position()=2])]/rho[@insert][@xml:lang="no"][following-sibling::iota[following-sibling::upsilon[starts-with(@abort,"this.nodeVal")][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]]]</xpath> + <tree> + <xi attrib="attribute-value"> + <delta xml:lang="no-nb"> + <gamma> + <beta title="this.nodeValue" xml:id="id1"> + <omega true="another attribute value"> + <upsilon xml:id="id2"> + <chi xml:lang="en"> + <rho insert="another attribute value" xml:lang="no"/> + <iota/> + <upsilon abort="this.nodeValue" xml:id="id3"> + <green>This text must be green</green> + </upsilon> + </chi> + </upsilon> + </omega> + </beta> + </gamma> + </delta> + </xi> + </tree> + </test> + <test> + <xpath>//mu//epsilon[@attrib="123456789"][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 1]]/gamma[@xml:id="id2"][not(child::node())][following-sibling::rho[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::kappa[@xml:lang="no"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::zeta[contains(@and,"123456")][@xml:lang="en-US"][following-sibling::chi[contains(concat(@or,"$"),"odeValue$")][preceding-sibling::*[position() = 5]]/lambda[starts-with(@object,"1")][@xml:id="id5"][not(following-sibling::*)]/theta[not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu> + <epsilon attrib="123456789" xml:id="id1"/> + <theta> + <gamma xml:id="id2"/> + <rho xml:id="id3"/> + <kappa xml:lang="no"/> + <upsilon xml:id="id4"/> + <zeta and="123456789" xml:lang="en-US"/> + <chi or="this.nodeValue"> + <lambda object="100%" xml:id="id5"> + <theta/> + <epsilon xml:lang="no-nb"> + <green>This text must be green</green> + </epsilon> + </lambda> + </chi> + </theta> + </mu> + </tree> + </test> + <test> + <xpath>//sigma[@xml:id="id1"]/gamma[@xml:lang="en-US"][following-sibling::*[position()=1]][following-sibling::nu//alpha[@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=3]][not(child::node())][following-sibling::tau[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[not(child::node())][following-sibling::gamma/kappa[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[not(child::node())][following-sibling::xi[@xml:lang="en-US"][@xml:id="id3"]//beta[@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[starts-with(@string,"fal")][@xml:lang="en"][following-sibling::*[position()=3]][not(child::node())][following-sibling::epsilon[contains(@name,"eVal")][@xml:lang="en-GB"][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[not(child::node())][following-sibling::iota[@delete][@xml:lang="en-US"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//eta[not(preceding-sibling::*)][following-sibling::eta[@number][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//gamma[contains(@token,"ank")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)]//omega[not(following-sibling::*)]/delta[@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <sigma xml:id="id1"> + <gamma xml:lang="en-US"/> + <nu> + <alpha xml:lang="en" xml:id="id2"/> + <tau xml:lang="nb"/> + <kappa/> + <gamma> + <kappa xml:lang="en-US"/> + <upsilon/> + <xi xml:lang="en-US" xml:id="id3"> + <beta xml:lang="en-GB" xml:id="id4"/> + <alpha string="false" xml:lang="en"/> + <epsilon name="this.nodeValue" xml:lang="en-GB"/> + <mu/> + <iota delete="true" xml:lang="en-US"> + <eta/> + <eta number="_blank"> + <gamma token="_blank" xml:lang="en-GB" xml:id="id5"> + <omega> + <delta xml:lang="no-nb" xml:id="id6"/> + <rho xml:lang="no-nb"/> + <delta xml:lang="no-nb"> + <green>This text must be green</green> + </delta> + </omega> + </gamma> + </eta> + </iota> + </xi> + </gamma> + </nu> + </sigma> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]//epsilon[not(preceding-sibling::*)][following-sibling::pi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omicron[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[not(child::node())][following-sibling::epsilon[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::tau[@xml:lang="nb"][preceding-sibling::*[position() = 2]]//iota[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::iota[@token="100%"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[@xml:id="id5"][preceding-sibling::*[position() = 2]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <alpha xml:id="id1"> + <epsilon/> + <pi> + <omicron xml:lang="en-GB" xml:id="id2"> + <rho/> + <epsilon xml:lang="no" xml:id="id3"/> + <tau xml:lang="nb"> + <iota/> + <iota token="100%" xml:id="id4"/> + <any xml:id="id5"> + <green>This text must be green</green> + </any> + </tau> + </omicron> + </pi> + </alpha> + </tree> + </test> + <test> + <xpath>//omicron[@number]/tau[@xml:lang="en-GB"][not(preceding-sibling::*)][not(preceding-sibling::tau or following-sibling::tau)][following-sibling::iota[starts-with(concat(@class,"-"),"true-")][preceding-sibling::*[position() = 1]][following-sibling::nu[@xml:id="id1"][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 3]][following-sibling::pi[contains(@desciption,"0")][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/sigma[@token][following-sibling::eta[contains(concat(@object,"$"),"her attribute value$")][@xml:lang="en-US"][@xml:id="id2"]//rho[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)]//*[contains(concat(@att,"$"),"ute value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@desciption]]]]]][position() = 1]]</xpath> + <tree> + <omicron number="another attribute value"> + <tau xml:lang="en-GB"/> + <iota class="true"/> + <nu xml:id="id1"/> + <chi/> + <pi desciption="100%" xml:lang="no-nb"> + <sigma token="true"/> + <eta object="another attribute value" xml:lang="en-US" xml:id="id2"> + <rho xml:lang="en-GB" xml:id="id3"> + <any att="another attribute value" xml:lang="no-nb"/> + <any desciption="123456789"> + <green>This text must be green</green> + </any> + </rho> + </eta> + </pi> + </omicron> + </tree> + </test> + <test> + <xpath>//delta[contains(concat(@class,"$"),"9$")][@xml:lang="nb"]/mu[@xml:lang="no"][not(preceding-sibling::*)]/phi[starts-with(concat(@string,"-"),"attribute-")][@xml:lang="no"][@xml:id="id1"][not(child::node())][following-sibling::theta[contains(concat(@class,"$"),"tribute value$")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::mu[following-sibling::phi[@delete][@xml:id="id4"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::chi[@xml:lang="no"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]//chi[@class="solid 1px green"][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]/zeta[@object="_blank"][@xml:lang="en-GB"]/*[not(preceding-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta class="123456789" xml:lang="nb"> + <mu xml:lang="no"> + <phi string="attribute" xml:lang="no" xml:id="id1"/> + <theta class="another attribute value" xml:id="id2"/> + <zeta xml:lang="no" xml:id="id3"/> + <mu/> + <phi delete="attribute value" xml:id="id4"/> + <chi xml:lang="no"> + <chi class="solid 1px green" xml:lang="nb" xml:id="id5"> + <gamma xml:lang="en-US" xml:id="id6"> + <zeta object="_blank" xml:lang="en-GB"> + <any> + <green>This text must be green</green> + </any> + </zeta> + </gamma> + </chi> + </chi> + </mu> + </delta> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="nb"]/kappa[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[contains(@number,"his-is-at")][not(following-sibling::*)]//epsilon[@attrib][@xml:id="id2"][not(following-sibling::*)]//tau[@number][@xml:lang="en"][not(following-sibling::*)]//beta[starts-with(concat(@attr,"-"),"123456789-")][@xml:id="id3"][not(following-sibling::*)]//kappa[@xml:id="id4"][not(child::node())][following-sibling::epsilon[starts-with(@abort,"solid 1px gr")][@xml:id="id5"][not(child::node())][following-sibling::beta[not(following-sibling::*)]//nu/iota[not(preceding-sibling::*)]/eta[starts-with(concat(@data,"-"),"100%-")][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@attr][@xml:lang="no"][not(child::node())][following-sibling::omega[contains(@false,"tent")][preceding-sibling::*[position() = 2]]//upsilon[starts-with(@insert,"false")][@xml:lang="en-US"]//lambda[@attribute][@xml:lang="no-nb"][@xml:id="id6"][not(child::node())][following-sibling::kappa[@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][following-sibling::zeta[starts-with(concat(@true,"-"),"content-")][@xml:id="id8"][following-sibling::*[position()=4]][following-sibling::pi[preceding-sibling::*[position() = 3]][following-sibling::omega[starts-with(@attribute,"so")][not(child::node())][following-sibling::sigma[@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::psi[@xml:lang="en-GB"][preceding-sibling::*[position() = 6]][not(following-sibling::*)]/beta[@xml:lang="en"]/psi[@xml:lang="nb"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <theta xml:lang="nb"> + <kappa xml:id="id1"> + <nu number="this-is-att-value"> + <epsilon attrib="attribute value" xml:id="id2"> + <tau number="100%" xml:lang="en"> + <beta attr="123456789" xml:id="id3"> + <kappa xml:id="id4"/> + <epsilon abort="solid 1px green" xml:id="id5"/> + <beta> + <nu> + <iota> + <eta data="100%"/> + <chi attr="this.nodeValue" xml:lang="no"/> + <omega false="content"> + <upsilon insert="false" xml:lang="en-US"> + <lambda attribute="attribute value" xml:lang="no-nb" xml:id="id6"/> + <kappa xml:id="id7"/> + <zeta true="content" xml:id="id8"/> + <pi/> + <omega attribute="solid 1px green"/> + <sigma xml:id="id9"/> + <psi xml:lang="en-GB"> + <beta xml:lang="en"> + <psi xml:lang="nb"> + <green>This text must be green</green> + </psi> + </beta> + </psi> + </upsilon> + </omega> + </iota> + </nu> + </beta> + </beta> + </tau> + </epsilon> + </nu> + </kappa> + </theta> + </tree> + </test> + <test> + <xpath>//omega/epsilon[@insert][not(child::node())][following-sibling::zeta[starts-with(concat(@string,"-"),"attribute value-")][@xml:id="id1"][not(child::node())][following-sibling::gamma[starts-with(@false,"this-is-att-")][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/pi[not(preceding-sibling::*)][following-sibling::phi[@content][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[contains(@true," 1px green")][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 3]]//zeta[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)]//iota[contains(@token,"se")][@xml:id="id8"][not(child::node())][following-sibling::xi[starts-with(concat(@insert,"-"),"another attribute value-")][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[contains(@object,"te")][@xml:id="id10"][not(child::node())][following-sibling::psi[@xml:lang="nb"][following-sibling::nu[contains(concat(@content,"$"),"ute$")][@xml:lang="no-nb"][following-sibling::nu[starts-with(@string,"solid 1px gre")][@xml:lang="en-GB"][@xml:id="id11"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <omega> + <epsilon insert="attribute"/> + <zeta string="attribute value" xml:id="id1"/> + <gamma false="this-is-att-value" xml:lang="en" xml:id="id2"> + <pi/> + <phi content="_blank" xml:id="id3"/> + <xi xml:id="id4"/> + <any true="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <zeta xml:id="id6"> + <kappa xml:lang="nb" xml:id="id7"> + <iota token="false" xml:id="id8"/> + <xi insert="another attribute value" xml:id="id9"/> + <rho object="attribute" xml:id="id10"/> + <psi xml:lang="nb"/> + <nu content="attribute" xml:lang="no-nb"/> + <nu string="solid 1px green" xml:lang="en-GB" xml:id="id11"> + <green>This text must be green</green> + </nu> + </kappa> + </zeta> + </any> + </gamma> + </omega> + </tree> + </test> + <test> + <xpath>//*[@string]/chi//mu[@name][@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[contains(@desciption,"b")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::tau[contains(concat(@att,"$"),"true$")][following-sibling::upsilon[contains(@attr,"nk")][@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::xi[contains(concat(@class,"$"),"se$")][@xml:lang="en-GB"][following-sibling::*[@xml:id="id4"][preceding-sibling::*[position() = 4]]/lambda[@xml:lang="en"][@xml:id="id5"]//beta[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@delete][following-sibling::psi[@xml:lang="no-nb"][@xml:id="id7"]/psi[@xml:id="id8"][not(preceding-sibling::*)]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any string="this-is-att-value"> + <chi> + <mu name="attribute-value" xml:lang="no-nb" xml:id="id1"> + <sigma desciption="_blank" xml:lang="nb" xml:id="id2"/> + <tau att="true"/> + <upsilon attr="_blank" xml:lang="nb" xml:id="id3"/> + <xi class="false" xml:lang="en-GB"/> + <any xml:id="id4"> + <lambda xml:lang="en" xml:id="id5"> + <beta xml:id="id6"/> + <zeta delete="attribute"/> + <psi xml:lang="no-nb" xml:id="id7"> + <psi xml:id="id8"> + <green>This text must be green</green> + </psi> + </psi> + </lambda> + </any> + </mu> + </chi> + </any> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en"][@xml:id="id1"]/theta[contains(concat(@data,"$"),"e$")][not(preceding-sibling::*)][following-sibling::rho[@xml:lang="nb"][preceding-sibling::*[position() = 1]]//tau[@token][@xml:lang="no"][following-sibling::iota[@xml:lang="en-US"][@xml:id="id2"][following-sibling::tau[@attr][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//eta[@xml:lang="no"][following-sibling::*[position()=3]][not(child::node())][following-sibling::lambda[starts-with(concat(@abort,"-"),"this-")][@xml:lang="nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::alpha)][following-sibling::delta[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 3]]//omega/*[starts-with(@false,"so")][not(preceding-sibling::*)][following-sibling::iota[@xml:id="id5"][not(child::node())][following-sibling::alpha[@attr="attribute-value"][@xml:id="id6"][following-sibling::pi[starts-with(concat(@attr,"-"),"another attribute value-")][preceding-sibling::*[position() = 3]][following-sibling::omega/zeta[@xml:lang="no-nb"][not(preceding-sibling::*)]//lambda[@and][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]]]][position() = 1]]]]</xpath> + <tree> + <upsilon xml:lang="en" xml:id="id1"> + <theta data="false"/> + <rho xml:lang="nb"> + <tau token="100%" xml:lang="no"/> + <iota xml:lang="en-US" xml:id="id2"/> + <tau attr="this.nodeValue"> + <eta xml:lang="no"/> + <lambda abort="this-is-att-value" xml:lang="nb"/> + <alpha xml:id="id3"/> + <delta xml:lang="en-US" xml:id="id4"> + <omega> + <any false="solid 1px green"/> + <iota xml:id="id5"/> + <alpha attr="attribute-value" xml:id="id6"/> + <pi attr="another attribute value"/> + <omega> + <zeta xml:lang="no-nb"> + <lambda and="solid 1px green" xml:lang="en-US"> + <mu> + <green>This text must be green</green> + </mu> + </lambda> + </zeta> + </omega> + </omega> + </delta> + </tau> + </rho> + </upsilon> + </tree> + </test> + <test> + <xpath>//epsilon[starts-with(concat(@attr,"-"),"this-")][@xml:lang="no-nb"]//sigma[@delete="solid 1px green"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[contains(concat(@title,"$"),"e$")][@xml:id="id2"][not(following-sibling::*)]//chi[starts-with(concat(@class,"-"),"this-")]//chi[contains(@token,"12")][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[contains(concat(@string,"$"),"te value$")][@xml:lang="no"][not(preceding-sibling::*)]/omega[@and][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omega[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::alpha[not(following-sibling::*)]//lambda[@object][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)]][position() = 1]]</xpath> + <tree> + <epsilon attr="this-is-att-value" xml:lang="no-nb"> + <sigma delete="solid 1px green" xml:id="id1"> + <eta title="attribute-value" xml:id="id2"> + <chi class="this-is-att-value"> + <chi token="123456789"> + <lambda string="another attribute value" xml:lang="no"> + <omega and="this.nodeValue" xml:id="id3"/> + <any xml:id="id4"> + <omega xml:lang="en-US" xml:id="id5"/> + <alpha> + <lambda object="this-is-att-value" xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </lambda> + </alpha> + </any> + </lambda> + </chi> + </chi> + </eta> + </sigma> + </epsilon> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="no"]//iota[@xml:lang="en"][@xml:id="id1"]//nu[@xml:lang="nb"]//nu[@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::nu[@xml:lang="no-nb"][@xml:id="id2"][following-sibling::epsilon[preceding-sibling::*[position() = 2]]//lambda[not(child::node())][following-sibling::beta[@true="attribute"][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@xml:lang="en-GB"]/sigma[starts-with(concat(@string,"-"),"attribute-")][@xml:lang="en"]/psi[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[contains(concat(@attr,"$"),"ue$")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/epsilon[starts-with(concat(@data,"-"),"solid 1px green-")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega xml:lang="no"> + <iota xml:lang="en" xml:id="id1"> + <nu xml:lang="nb"> + <nu xml:lang="en"/> + <nu xml:lang="no-nb" xml:id="id2"/> + <epsilon> + <lambda/> + <beta true="attribute" xml:lang="en-US" xml:id="id3"> + <phi xml:lang="en-GB"> + <sigma string="attribute-value" xml:lang="en"> + <psi xml:id="id4"/> + <delta attr="true" xml:id="id5"/> + <theta xml:id="id6"> + <epsilon data="solid 1px green"> + <green>This text must be green</green> + </epsilon> + </theta> + </sigma> + </phi> + </beta> + </epsilon> + </nu> + </iota> + </omega> + </tree> + </test> + <test> + <xpath>//xi/beta[@number][@xml:id="id1"][not(child::node())][following-sibling::theta[@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@and][@xml:id="id3"][not(following-sibling::*)][not(preceding-sibling::alpha)]//delta[following-sibling::*[position()=1]][following-sibling::delta[contains(concat(@token,"$"),"t$")][@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)]/alpha[following-sibling::*[position()=1]][following-sibling::pi[@string][preceding-sibling::*[position() = 1]]//mu[@class="123456789"][@xml:lang="en"][@xml:id="id5"]][position() = 1]]]]</xpath> + <tree> + <xi> + <beta number="attribute-value" xml:id="id1"/> + <theta xml:lang="nb" xml:id="id2"/> + <alpha and="attribute" xml:id="id3"> + <delta/> + <delta token="content" xml:lang="no" xml:id="id4"> + <alpha/> + <pi string="attribute value"> + <mu class="123456789" xml:lang="en" xml:id="id5"> + <green>This text must be green</green> + </mu> + </pi> + </delta> + </alpha> + </xi> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="no"]/psi[not(preceding-sibling::*)][not(child::node())][following-sibling::tau[starts-with(concat(@content,"-"),"100%-")]//gamma[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]/chi[@and][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::pi[position() = 1]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="no"> + <psi/> + <tau content="100%"> + <gamma xml:lang="no-nb" xml:id="id1"/> + <zeta xml:lang="no-nb"> + <chi and="this.nodeValue" xml:lang="en"/> + <pi> + <green>This text must be green</green> + </pi> + </zeta> + </tau> + </phi> + </tree> + </test> + <test> + <xpath>//sigma/zeta[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[@class="100%"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id3"][not(following-sibling::*)]//iota[@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::rho[@xml:lang="en"][@xml:id="id5"]//zeta[@abort="attribute"][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[starts-with(concat(@true,"-"),"attribute-")][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//alpha[@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@xml:lang="en"][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id8"]//omicron[starts-with(@name,"attribute-value")][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[contains(@number,"tent")][@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(@att,"ibute valu")][@xml:lang="en-US"][not(child::node())][following-sibling::gamma[contains(concat(@object,"$"),"te value$")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma> + <zeta xml:id="id1"/> + <xi class="100%" xml:id="id2"/> + <alpha xml:lang="en-GB" xml:id="id3"> + <iota xml:lang="en-GB" xml:id="id4"/> + <rho xml:lang="en" xml:id="id5"> + <zeta abort="attribute" xml:lang="en-GB"/> + <delta true="attribute" xml:id="id6"> + <alpha xml:lang="en" xml:id="id7"> + <omicron xml:lang="en"/> + <chi xml:lang="no" xml:id="id8"> + <omicron name="attribute-value" xml:id="id9"> + <upsilon number="content" xml:id="id10"/> + <sigma att="attribute value" xml:lang="en-US"/> + <gamma object="another attribute value"> + <green>This text must be green</green> + </gamma> + </omicron> + </chi> + </alpha> + </delta> + </rho> + </alpha> + </sigma> + </tree> + </test> + <test> + <xpath>//mu[@object="100%"][@xml:lang="no-nb"]//psi[@name][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)]//iota[following-sibling::kappa[@src][following-sibling::mu[following-sibling::*[position()=5]][following-sibling::upsilon[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::chi[following-sibling::iota[@xml:lang="nb"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::eta[@xml:lang="en"][preceding-sibling::*[position() = 6]][following-sibling::chi[starts-with(@attrib,"123")][@xml:lang="no"][preceding-sibling::*[position() = 7]]/omega[@or][@xml:lang="en-GB"][following-sibling::*[position()=2]][following-sibling::mu[@delete][following-sibling::*[position()=1]][following-sibling::kappa[contains(concat(@object,"$"),"%$")][@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]//alpha[@xml:lang="en"][@xml:id="id3"]//eta[@desciption][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(concat(@false,"-"),"true-")][preceding-sibling::*[position() = 1]]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <mu object="100%" xml:lang="no-nb"> + <psi name="another attribute value" xml:lang="en-GB" xml:id="id1"> + <iota/> + <kappa src="this-is-att-value"/> + <mu/> + <upsilon/> + <chi/> + <iota xml:lang="nb"/> + <eta xml:lang="en"/> + <chi attrib="123456789" xml:lang="no"> + <omega or="this-is-att-value" xml:lang="en-GB"/> + <mu delete="content"/> + <kappa object="100%" xml:lang="no-nb" xml:id="id2"> + <alpha xml:lang="en" xml:id="id3"> + <eta desciption="content"/> + <delta false="true"> + <green>This text must be green</green> + </delta> + </alpha> + </kappa> + </chi> + </psi> + </mu> + </tree> + </test> + <test> + <xpath>//nu[@and][@xml:lang="en-GB"]//nu[@xml:id="id1"][not(child::node())][following-sibling::eta[@insert][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[starts-with(@abort,"solid 1px ")][@xml:id="id2"][preceding-sibling::*[position() = 2]]/xi[@xml:lang="en-GB"][not(following-sibling::*)]/psi[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::psi)]//mu[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[following-sibling::*[position()=3]][not(child::node())][following-sibling::delta[not(child::node())][following-sibling::xi[@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::theta[preceding-sibling::*[position() = 4]][not(following-sibling::*)]//eta[not(following-sibling::*)]/beta[contains(concat(@data,"$"),"alse$")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]/lambda[@attribute="true"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::beta[@xml:lang="en-US"][@xml:id="id8"][position() = 1]][position() = 1]]]]]][position() = 1]]]</xpath> + <tree> + <nu and="attribute value" xml:lang="en-GB"> + <nu xml:id="id1"/> + <eta insert="content" xml:lang="no-nb"/> + <any abort="solid 1px green" xml:id="id2"> + <xi xml:lang="en-GB"> + <psi xml:lang="en-US" xml:id="id3"> + <mu xml:lang="no" xml:id="id4"/> + <lambda/> + <delta/> + <xi xml:id="id5"/> + <theta> + <eta> + <beta data="false" xml:lang="en"/> + <theta xml:lang="en-US" xml:id="id6"> + <lambda attribute="true" xml:id="id7"/> + <beta xml:lang="en-US" xml:id="id8"> + <green>This text must be green</green> + </beta> + </theta> + </eta> + </theta> + </psi> + </xi> + </any> + </nu> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="nb"][@xml:id="id1"]/epsilon[@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]/phi[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::phi)]/upsilon[@and="this.nodeValue"][@xml:lang="no-nb"][not(following-sibling::*)]//mu[starts-with(@object,"attri")][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::psi[@xml:lang="no-nb"][not(following-sibling::*)]//phi[@string][not(following-sibling::*)]/alpha[starts-with(concat(@name,"-"),"content-")][not(following-sibling::*)]/delta[@title][@xml:lang="no"][following-sibling::*[@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@false][preceding-sibling::*[position() = 2]]/psi[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::delta[starts-with(@attribute,"t")][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//mu[@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[contains(concat(@abort,"$"),"this.nodeValue$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <theta xml:lang="nb" xml:id="id1"> + <epsilon xml:lang="en" xml:id="id2"> + <phi xml:lang="en"> + <upsilon and="this.nodeValue" xml:lang="no-nb"> + <mu object="attribute-value" xml:lang="no-nb" xml:id="id3"/> + <psi xml:lang="no-nb"> + <phi string="this.nodeValue"> + <alpha name="content"> + <delta title="true" xml:lang="no"/> + <any xml:lang="en-GB" xml:id="id4"/> + <mu false="true"> + <psi xml:lang="en-US" xml:id="id5"> + <xi xml:lang="no"/> + <delta attribute="this.nodeValue" xml:id="id6"> + <mu xml:id="id7"/> + <beta abort="this.nodeValue" xml:lang="no-nb"> + <green>This text must be green</green> + </beta> + </delta> + </psi> + </mu> + </alpha> + </phi> + </psi> + </upsilon> + </phi> + </epsilon> + </theta> + </tree> + </test> + <test> + <xpath>//lambda[contains(@desciption,"als")]/zeta[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)]//beta[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::rho[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[starts-with(concat(@and,"-"),"another attribute value-")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[starts-with(@object,"attr")][@xml:lang="en-GB"][@xml:id="id3"]/epsilon[@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[contains(concat(@abort,"$"),"e$")][@xml:id="id5"][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda desciption="false"> + <zeta xml:lang="en" xml:id="id1"> + <beta xml:lang="no"/> + <rho> + <beta and="another attribute value" xml:id="id2"> + <theta object="attribute value" xml:lang="en-GB" xml:id="id3"> + <epsilon xml:id="id4"/> + <gamma abort="another attribute value" xml:id="id5"> + <green>This text must be green</green> + </gamma> + </theta> + </beta> + </rho> + </zeta> + </lambda> + </tree> + </test> + <test> + <xpath>//eta[contains(concat(@name,"$"),"en$")][@xml:lang="no-nb"]/lambda[starts-with(@abort,"attrib")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@and="attribute value"][@xml:id="id2"][not(following-sibling::*)]/eta[contains(@class,"ribute-value")][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:id="id3"]//zeta[contains(concat(@or,"$"),"alue$")][not(preceding-sibling::*)]//nu[contains(concat(@delete,"$"),"00%$")][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@attr]/omicron[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::phi[@xml:id="id4"][preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <eta name="solid 1px green" xml:lang="no-nb"> + <lambda abort="attribute-value" xml:id="id1"/> + <pi and="attribute value" xml:id="id2"> + <eta class="attribute-value"/> + <sigma xml:id="id3"> + <zeta or="attribute value"> + <nu delete="100%"/> + <zeta attr="another attribute value"> + <omicron xml:lang="en-US"/> + <phi xml:id="id4"> + <green>This text must be green</green> + </phi> + </zeta> + </zeta> + </sigma> + </pi> + </eta> + </tree> + </test> + <test> + <xpath>//nu[@object][@xml:lang="en-GB"]/iota[starts-with(@desciption,"sol")][@xml:lang="no"][@xml:id="id1"]//iota[contains(@delete,"lan")][@xml:lang="nb"][not(child::node())][following-sibling::kappa[@true]/phi[not(preceding-sibling::*)]/zeta[starts-with(concat(@true,"-"),"true-")][@xml:lang="no-nb"][not(preceding-sibling::*)]//omega[contains(@insert,"lue")][@xml:id="id2"][not(following-sibling::*)]/lambda[contains(concat(@object,"$"),"ntent$")][@xml:lang="no"][not(preceding-sibling::lambda)]/kappa[@object][@xml:id="id3"]]</xpath> + <tree> + <nu object="100%" xml:lang="en-GB"> + <iota desciption="solid 1px green" xml:lang="no" xml:id="id1"> + <iota delete="_blank" xml:lang="nb"/> + <kappa true="123456789"> + <phi> + <zeta true="true" xml:lang="no-nb"> + <omega insert="attribute value" xml:id="id2"> + <lambda object="content" xml:lang="no"> + <kappa object="100%" xml:id="id3"> + <green>This text must be green</green> + </kappa> + </lambda> + </omega> + </zeta> + </phi> + </kappa> + </iota> + </nu> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="en-US"]//tau[starts-with(@content,"content")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@xml:lang="en"][@xml:id="id1"]/*[@token][@xml:lang="en-US"][following-sibling::lambda[@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=7]][not(child::node())][following-sibling::*[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::alpha[contains(concat(@src,"$"),"lse$")][@xml:lang="en"][not(child::node())][following-sibling::gamma[@content][@xml:id="id3"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::beta[@attrib][@xml:lang="no"][not(child::node())][following-sibling::delta[@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 7]][following-sibling::sigma[@token][not(following-sibling::*)]//kappa[@or="this.nodeValue"][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/*[contains(@data,"lse")][@xml:lang="nb"]/chi[@xml:lang="no"][@xml:id="id6"][following-sibling::gamma[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[starts-with(@object,"thi")][not(child::node())][following-sibling::lambda[@xml:lang="nb"][not(following-sibling::*)]/gamma[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]]]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="en-US"> + <tau content="content" xml:lang="en-GB"> + <kappa xml:lang="en" xml:id="id1"> + <any token="100%" xml:lang="en-US"/> + <lambda xml:id="id2"/> + <any xml:lang="no-nb"/> + <omicron/> + <alpha src="false" xml:lang="en"/> + <gamma content="_blank" xml:id="id3"/> + <beta attrib="123456789" xml:lang="no"/> + <delta xml:lang="nb" xml:id="id4"/> + <sigma token="solid 1px green"> + <kappa or="this.nodeValue" xml:lang="no" xml:id="id5"> + <any data="false" xml:lang="nb"> + <chi xml:lang="no" xml:id="id6"/> + <gamma xml:lang="no" xml:id="id7"/> + <any object="this-is-att-value"/> + <lambda xml:lang="nb"> + <gamma xml:lang="en" xml:id="id8"> + <green>This text must be green</green> + </gamma> + </lambda> + </any> + </kappa> + </sigma> + </kappa> + </tau> + </epsilon> + </tree> + </test> + <test> + <xpath>//iota[contains(@or,"node")][@xml:lang="en-US"]/epsilon[@false][not(following-sibling::*)]/chi[starts-with(concat(@abort,"-"),"false-")][not(preceding-sibling::*)][not(following-sibling::*)]/phi[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::rho[starts-with(@desciption,"attribute ")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::pi[not(child::node())][following-sibling::phi[@number]/iota[@delete][not(preceding-sibling::*)]/gamma[starts-with(concat(@insert,"-"),"this.nodeValue-")][@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:id="id2"]/chi[contains(concat(@name,"$"),"ontent$")][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[contains(concat(@class,"$"),"e value$")][@xml:id="id3"]//beta[@true="attribute"][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]/eta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron]][position() = 1]]]]]</xpath> + <tree> + <iota or="this.nodeValue" xml:lang="en-US"> + <epsilon false="another attribute value"> + <chi abort="false"> + <phi/> + <rho desciption="attribute value" xml:lang="en-US"/> + <pi/> + <phi number="another attribute value"> + <iota delete="attribute"> + <gamma insert="this.nodeValue" xml:lang="nb" xml:id="id1"/> + <kappa xml:id="id2"> + <chi name="content" xml:lang="no"/> + <xi class="attribute value" xml:id="id3"> + <beta true="attribute" xml:lang="en" xml:id="id4"> + <eta xml:lang="en-GB"/> + <omicron> + <green>This text must be green</green> + </omicron> + </beta> + </xi> + </kappa> + </iota> + </phi> + </chi> + </epsilon> + </iota> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="en-GB"]/kappa[contains(@abort,"alue")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[starts-with(concat(@attribute,"-"),"attribute value-")][not(child::node())][following-sibling::theta[@string="attribute value"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="en-GB"][not(following-sibling::*)]//psi[not(preceding-sibling::*)][not(following-sibling::*)]/alpha[@xml:id="id4"][following-sibling::eta[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//nu[contains(concat(@att,"$"),"e$")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="no"][@xml:id="id6"]/gamma[@xml:id="id7"][not(preceding-sibling::*)]/rho[@or][@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[preceding-sibling::*[position() = 1]]/lambda[not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@content="attribute"][@xml:id="id9"][not(following-sibling::*)]//rho[starts-with(@string,"attribute value")][@xml:lang="no"][not(following-sibling::*)][not(following-sibling::rho)]/psi[@attrib][@xml:lang="no-nb"][@xml:id="id10"][not(child::node())][following-sibling::zeta[@delete="this-is-att-value"][@xml:lang="en-GB"][not(child::node())][following-sibling::omega[starts-with(@src,"attribute va")][@xml:id="id11"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:lang="en-GB"> + <kappa abort="another attribute value" xml:id="id1"> + <sigma attribute="attribute value"/> + <theta string="attribute value" xml:id="id2"> + <omicron xml:lang="no-nb" xml:id="id3"/> + <lambda xml:lang="en-GB"> + <psi> + <alpha xml:id="id4"/> + <eta xml:lang="no-nb" xml:id="id5"> + <nu att="true" xml:lang="no-nb"/> + <omicron xml:lang="no" xml:id="id6"> + <gamma xml:id="id7"> + <rho or="attribute" xml:lang="en" xml:id="id8"/> + <phi> + <lambda> + <sigma content="attribute" xml:id="id9"> + <rho string="attribute value" xml:lang="no"> + <psi attrib="this.nodeValue" xml:lang="no-nb" xml:id="id10"/> + <zeta delete="this-is-att-value" xml:lang="en-GB"/> + <omega src="attribute value" xml:id="id11"> + <green>This text must be green</green> + </omega> + </rho> + </sigma> + </lambda> + </phi> + </gamma> + </omicron> + </eta> + </psi> + </lambda> + </theta> + </kappa> + </iota> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="en"]/*[@xml:lang="en-GB"][not(following-sibling::*)]/*[contains(concat(@string,"$"),"false$")][@xml:lang="en"][not(preceding-sibling::*)]/omega[@att="this.nodeValue"][following-sibling::*[position()=1]][following-sibling::delta[starts-with(@attrib,"tr")][@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[@xml:lang="no"][not(preceding-sibling::*)]//tau[contains(concat(@name,"$"),"ue$")][@xml:id="id2"][not(preceding-sibling::*)]/rho[@or][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[not(preceding-sibling::*)][following-sibling::theta[@attr][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/*[starts-with(concat(@class,"-"),"solid 1px green-")][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[not(following-sibling::*)]//*[starts-with(@data,"10")][@xml:lang="nb"][not(following-sibling::*)]/kappa[@title="100%"][following-sibling::alpha[starts-with(concat(@delete,"-"),"this.nodeValue-")][@xml:id="id3"][following-sibling::alpha[@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::mu[@insert][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//lambda[@delete="another attribute value"][@xml:lang="en-GB"][following-sibling::zeta[starts-with(@or,"attrib")][@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]][position() = 1]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <psi xml:lang="en"> + <any xml:lang="en-GB"> + <any string="false" xml:lang="en"> + <omega att="this.nodeValue"/> + <delta attrib="true" xml:lang="en-GB" xml:id="id1"> + <pi xml:lang="no"> + <tau name="this-is-att-value" xml:id="id2"> + <rho or="attribute" xml:lang="en"> + <alpha/> + <theta attr="solid 1px green" xml:lang="en-GB"> + <any class="solid 1px green"/> + <kappa> + <any data="100%" xml:lang="nb"> + <kappa title="100%"/> + <alpha delete="this.nodeValue" xml:id="id3"/> + <alpha xml:lang="en-GB"/> + <mu insert="_blank" xml:lang="en-GB" xml:id="id4"> + <lambda delete="another attribute value" xml:lang="en-GB"/> + <zeta or="attribute value" xml:lang="no-nb" xml:id="id5"/> + <psi> + <green>This text must be green</green> + </psi> + </mu> + </any> + </kappa> + </theta> + </rho> + </tau> + </pi> + </delta> + </any> + </any> + </psi> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]//iota[@xml:lang="en"][not(child::node())][following-sibling::gamma[@object][@xml:id="id2"][following-sibling::beta[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//theta[@name="attribute value"][@xml:id="id4"][following-sibling::delta[@name][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu/iota[@insert][@xml:lang="no-nb"][@xml:id="id6"][not(following-sibling::*)]//mu[contains(@data,"t-v")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::gamma[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//theta[not(preceding-sibling::*)][following-sibling::epsilon[contains(concat(@desciption,"$"),"value$")][following-sibling::zeta//psi[not(child::node())][following-sibling::zeta[contains(concat(@desciption,"$"),"ute value$")][@xml:lang="no"]/iota[@xml:lang="en-US"][@xml:id="id7"][not(following-sibling::*)]//lambda[contains(concat(@insert,"$"),"r attribute value$")][not(preceding-sibling::*)]//iota[@title][@xml:lang="no-nb"][@xml:id="id8"][not(preceding-sibling::*)]/gamma[@name][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"][following-sibling::alpha[not(following-sibling::*)]//chi[@number="solid 1px green"][@xml:lang="nb"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi xml:id="id1"> + <iota xml:lang="en"/> + <gamma object="true" xml:id="id2"/> + <beta xml:lang="no" xml:id="id3"> + <theta name="attribute value" xml:id="id4"/> + <delta name="123456789" xml:lang="no-nb" xml:id="id5"> + <nu> + <iota insert="attribute" xml:lang="no-nb" xml:id="id6"> + <mu data="this-is-att-value" xml:lang="en"/> + <gamma/> + <alpha xml:lang="en-US"> + <theta/> + <epsilon desciption="this-is-att-value"/> + <zeta> + <psi/> + <zeta desciption="attribute value" xml:lang="no"> + <iota xml:lang="en-US" xml:id="id7"> + <lambda insert="another attribute value"> + <iota title="_blank" xml:lang="no-nb" xml:id="id8"> + <gamma name="_blank" xml:lang="en-US"/> + <epsilon xml:lang="en-GB"/> + <alpha> + <chi number="solid 1px green" xml:lang="nb"> + <green>This text must be green</green> + </chi> + </alpha> + </iota> + </lambda> + </iota> + </zeta> + </zeta> + </alpha> + </iota> + </nu> + </delta> + </beta> + </chi> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]/eta[contains(@or,"d 1px ")][@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::theta[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::psi[@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::xi[starts-with(@data,"tr")][@xml:id="id5"][following-sibling::omega[@attribute][@xml:id="id6"][following-sibling::lambda[@xml:lang="no"][preceding-sibling::*[position() = 5]][not(following-sibling::*)]/eta[@xml:lang="en-US"]//delta[@xml:lang="en-GB"][following-sibling::alpha[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[@attribute][not(preceding-sibling::*)][not(following-sibling::*)]/theta[following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[starts-with(concat(@false,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:id="id8"]/xi[not(preceding-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <chi xml:id="id1"> + <eta or="solid 1px green" xml:lang="en-US" xml:id="id2"/> + <theta xml:lang="en-GB" xml:id="id3"/> + <psi xml:lang="no-nb" xml:id="id4"/> + <xi data="true" xml:id="id5"/> + <omega attribute="false" xml:id="id6"/> + <lambda xml:lang="no"> + <eta xml:lang="en-US"> + <delta xml:lang="en-GB"/> + <alpha> + <lambda attribute="attribute-value"> + <theta/> + <eta false="attribute" xml:lang="en-US" xml:id="id7"/> + <omega xml:id="id8"> + <xi> + <green>This text must be green</green> + </xi> + </omega> + </lambda> + </alpha> + </eta> + </lambda> + </chi> + </tree> + </test> + <test> + <xpath>//mu[@object][@xml:lang="en"]/*[@attrib][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::chi[@src="false"][following-sibling::sigma[following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[preceding-sibling::*[position() = 3]][not(following-sibling::*)]//omega[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 1]][following-sibling::eta[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu object="this.nodeValue" xml:lang="en"> + <any attrib="123456789"> + <kappa/> + <chi src="false"/> + <sigma/> + <lambda> + <omega xml:lang="no" xml:id="id1"/> + <psi/> + <eta xml:lang="en" xml:id="id2"> + <green>This text must be green</green> + </eta> + </lambda> + </any> + </mu> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en"]/lambda[contains(@and,"deValue")][following-sibling::psi[@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omega[@xml:lang="nb"][following-sibling::iota[@xml:lang="en"][preceding-sibling::*[position() = 1]]/pi[starts-with(@name,"attribu")][not(child::node())][following-sibling::*[@xml:lang="en-US"][not(child::node())][following-sibling::epsilon[not(preceding-sibling::epsilon or following-sibling::epsilon)][not(child::node())][following-sibling::gamma[@string="solid 1px green"][@xml:id="id2"][not(following-sibling::*)]/phi[starts-with(@true,"this.nod")][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//omicron[@or][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@xml:lang="no"][@xml:id="id5"][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <omega xml:lang="en"> + <lambda and="this.nodeValue"/> + <psi xml:id="id1"> + <omega xml:lang="nb"/> + <iota xml:lang="en"> + <pi name="attribute value"/> + <any xml:lang="en-US"/> + <epsilon/> + <gamma string="solid 1px green" xml:id="id2"> + <phi true="this.nodeValue" xml:lang="en" xml:id="id3"> + <omicron or="100%" xml:lang="no" xml:id="id4"> + <mu xml:lang="no" xml:id="id5"> + <green>This text must be green</green> + </mu> + </omicron> + </phi> + </gamma> + </iota> + </psi> + </omega> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="no-nb"]//epsilon[contains(concat(@and,"$"),"x green$")][@xml:lang="no-nb"][not(preceding-sibling::*)]//omega[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[starts-with(concat(@class,"-"),"another attribute value-")][not(following-sibling::*)]/tau[contains(concat(@name,"$"),"r attribute value$")][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="nb"][not(following-sibling::*)]//chi[position() = 1]]]</xpath> + <tree> + <epsilon xml:lang="no-nb"> + <epsilon and="solid 1px green" xml:lang="no-nb"> + <omega xml:lang="en-GB"/> + <lambda class="another attribute value"> + <tau name="another attribute value"/> + <beta xml:lang="nb"> + <chi> + <green>This text must be green</green> + </chi> + </beta> + </lambda> + </epsilon> + </epsilon> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]//psi[@insert="123456789"][not(preceding-sibling::*)][following-sibling::theta[@xml:id="id2"]//delta[starts-with(concat(@token,"-"),"attribute-")][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[starts-with(@attr,"fal")][not(preceding-sibling::*)]/psi/rho[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="no-nb"]/beta[starts-with(concat(@true,"-"),"content-")][@xml:lang="en-US"][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::sigma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@name][@xml:lang="en"]//theta[starts-with(concat(@and,"-"),"this.nodeValue-")][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[starts-with(@false,"attr")][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::eta[contains(concat(@and,"$"),"value$")][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::alpha[@data][not(following-sibling::*)]]]]][position() = 1]]]]</xpath> + <tree> + <chi xml:id="id1"> + <psi insert="123456789"/> + <theta xml:id="id2"> + <delta token="attribute"> + <alpha attr="false"> + <psi> + <rho xml:lang="no" xml:id="id3"> + <pi xml:id="id4"/> + <upsilon xml:lang="no-nb"> + <beta true="content" xml:lang="en-US" xml:id="id5"/> + <sigma> + <omicron xml:id="id6"/> + <omicron name="_blank" xml:lang="en"> + <theta and="this.nodeValue" xml:lang="no" xml:id="id7"/> + <chi false="attribute" xml:id="id8"/> + <eta and="attribute-value"/> + <alpha data="100%"> + <green>This text must be green</green> + </alpha> + </omicron> + </sigma> + </upsilon> + </rho> + </psi> + </alpha> + </delta> + </theta> + </chi> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="en"]/alpha[@number][@xml:id="id1"][following-sibling::beta[contains(concat(@att,"$"),"23456789$")][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]//*[@xml:id="id3"][not(preceding-sibling::*)][not(preceding-sibling::any)][not(child::node())][following-sibling::*[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[not(preceding-sibling::*)][not(preceding-sibling::nu)][not(child::node())][following-sibling::iota[not(child::node())][following-sibling::rho[@xml:id="id5"][following-sibling::gamma[@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/kappa[@class="attribute-value"][@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)]/gamma[@xml:id="id8"][following-sibling::pi[starts-with(@name,"t")][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@name][@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 2]]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <lambda xml:lang="en"> + <alpha number="true" xml:id="id1"/> + <beta att="123456789" xml:lang="nb" xml:id="id2"> + <any xml:id="id3"/> + <any xml:id="id4"> + <nu/> + <iota/> + <rho xml:id="id5"/> + <gamma xml:lang="no-nb" xml:id="id6"> + <kappa class="attribute-value" xml:lang="en-GB" xml:id="id7"> + <gamma xml:id="id8"/> + <pi name="this-is-att-value" xml:id="id9"/> + <rho name="_blank" xml:lang="en-US" xml:id="id10"> + <green>This text must be green</green> + </rho> + </kappa> + </gamma> + </any> + </beta> + </lambda> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no"]//delta[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omicron[@xml:id="id1"][preceding-sibling::*[position() = 1]]//lambda[@number="attribute-value"][following-sibling::*[position()=3]][following-sibling::tau[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[@data][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 3]]/psi[@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[starts-with(concat(@class,"-"),"solid 1px green-")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::iota[@attribute][@xml:id="id6"][not(child::node())][following-sibling::pi[@xml:lang="en-GB"][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta xml:lang="no"> + <delta/> + <omicron xml:id="id1"> + <lambda number="attribute-value"/> + <tau xml:lang="en" xml:id="id2"/> + <any data="content" xml:id="id3"/> + <upsilon xml:lang="en-US" xml:id="id4"> + <psi xml:lang="no"/> + <tau class="solid 1px green" xml:id="id5"> + <mu content="attribute" xml:lang="en-GB"/> + <iota attribute="this.nodeValue" xml:id="id6"/> + <pi xml:lang="en-GB"> + <green>This text must be green</green> + </pi> + </tau> + </upsilon> + </omicron> + </beta> + </tree> + </test> + <test> + <xpath>//pi[contains(concat(@false,"$"),"56789$")][@xml:lang="en-US"][@xml:id="id1"]//epsilon[starts-with(@number,"_blank")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::xi[@xml:id="id2"][following-sibling::alpha[@xml:id="id3"]/phi[@and][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::gamma[@xml:lang="nb"][not(following-sibling::*)]/rho[@xml:lang="en-US"][@xml:id="id4"]/zeta[@attribute]//theta[@delete][not(preceding-sibling::*)]/theta[@insert][following-sibling::*[position()=3]][following-sibling::omicron[@object="content"][@xml:lang="en"][@xml:id="id5"][following-sibling::lambda[@xml:id="id6"][not(child::node())][following-sibling::iota[@xml:lang="en-GB"]//omicron[@attribute="solid 1px green"][@xml:id="id7"][following-sibling::iota[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]]//*[following-sibling::alpha[starts-with(@att,"_blank")][@xml:id="id9"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@src][@xml:id="id10"][preceding-sibling::*[position() = 2]]/psi[@xml:id="id11"][not(following-sibling::*)]//beta[@object][@xml:id="id12"][not(preceding-sibling::*)]//psi[@attribute][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[starts-with(concat(@true,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id13"][position() = 1]][position() = 1]]]]][position() = 1]]]]]]</xpath> + <tree> + <pi false="123456789" xml:lang="en-US" xml:id="id1"> + <epsilon number="_blank" xml:lang="en-US"/> + <xi xml:id="id2"/> + <alpha xml:id="id3"> + <phi and="this-is-att-value"/> + <gamma xml:lang="nb"> + <rho xml:lang="en-US" xml:id="id4"> + <zeta attribute="attribute value"> + <theta delete="100%"> + <theta insert="100%"/> + <omicron object="content" xml:lang="en" xml:id="id5"/> + <lambda xml:id="id6"/> + <iota xml:lang="en-GB"> + <omicron attribute="solid 1px green" xml:id="id7"/> + <iota xml:lang="en-US" xml:id="id8"> + <any/> + <alpha att="_blank" xml:id="id9"/> + <theta src="solid 1px green" xml:id="id10"> + <psi xml:id="id11"> + <beta object="attribute" xml:id="id12"> + <psi attribute="content"/> + <upsilon true="attribute-value" xml:lang="nb" xml:id="id13"> + <green>This text must be green</green> + </upsilon> + </beta> + </psi> + </theta> + </iota> + </iota> + </theta> + </zeta> + </rho> + </gamma> + </alpha> + </pi> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en"][@xml:id="id1"]//alpha[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="no"][following-sibling::rho[@xml:lang="en-US"][following-sibling::zeta[@xml:lang="no"][preceding-sibling::*[position() = 3]][following-sibling::pi[preceding-sibling::*[position() = 4]][not(following-sibling::*)]//zeta[@att][@xml:lang="no-nb"][not(following-sibling::*)]/rho[@delete][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::lambda[contains(@title,"rue")][@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//sigma[@delete][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[@attr="solid 1px green"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[following-sibling::kappa[preceding-sibling::*[position() = 3]][not(following-sibling::*)]//omega[@and][@xml:id="id5"][not(preceding-sibling::*)]/iota[@attribute="attribute-value"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="en" xml:id="id1"> + <alpha xml:lang="no-nb"/> + <iota xml:lang="no"/> + <rho xml:lang="en-US"/> + <zeta xml:lang="no"/> + <pi> + <zeta att="solid 1px green" xml:lang="no-nb"> + <rho delete="content" xml:lang="no" xml:id="id2"/> + <lambda title="true" xml:lang="en-GB" xml:id="id3"/> + <kappa xml:lang="en" xml:id="id4"> + <sigma delete="attribute value"/> + <iota attr="solid 1px green"/> + <psi/> + <kappa> + <omega and="true" xml:id="id5"> + <iota attribute="attribute-value" xml:id="id6"> + <green>This text must be green</green> + </iota> + </omega> + </kappa> + </kappa> + </zeta> + </pi> + </kappa> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]//zeta[@xml:id="id2"][not(child::node())][following-sibling::*[@xml:lang="en-US"][not(following-sibling::*)]//upsilon[not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::zeta[starts-with(concat(@true,"-"),"content-")][@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]/lambda[contains(concat(@attr,"$"),"ue$")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@attr][@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::*[@number][@xml:lang="nb"][not(following-sibling::*)][not(following-sibling::any)]//omega[@insert="123456789"][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[@true][following-sibling::alpha[@xml:lang="en"][@xml:id="id7"][not(following-sibling::*)]/chi[@xml:id="id8"][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <xi xml:id="id1"> + <zeta xml:id="id2"/> + <any xml:lang="en-US"> + <upsilon> + <omicron xml:lang="en-US" xml:id="id3"/> + <zeta true="content" xml:lang="nb" xml:id="id4"> + <lambda attr="another attribute value" xml:lang="en-US"/> + <mu attr="100%" xml:lang="nb" xml:id="id5"/> + <any number="_blank" xml:lang="nb"> + <omega insert="123456789" xml:lang="no" xml:id="id6"/> + <xi xml:lang="en-US"> + <beta true="attribute"/> + <alpha xml:lang="en" xml:id="id7"> + <chi xml:id="id8"> + <green>This text must be green</green> + </chi> + </alpha> + </xi> + </any> + </zeta> + </upsilon> + </any> + </xi> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no"]/zeta[@xml:lang="nb"][not(preceding-sibling::*)]//pi[starts-with(@title,"fals")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[not(preceding-sibling::psi)][not(child::node())][following-sibling::zeta[contains(@class,"bla")][@xml:id="id1"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//sigma[@attr="attribute-value"][@xml:id="id2"][following-sibling::lambda[@attrib][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[starts-with(concat(@title,"-"),"123456789-")][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::eta[starts-with(concat(@data,"-"),"100%-")][@xml:id="id4"][not(child::node())][following-sibling::*[@and][@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::epsilon[@title][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::theta[@attribute="attribute value"][@xml:lang="nb"][@xml:id="id6"]//kappa[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::tau[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 2]]/delta[@src][@xml:lang="nb"][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::*[contains(concat(@number,"$"),"ute$")][@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en"]/alpha[@delete][not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::alpha)]][position() = 1]]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <psi xml:lang="no"> + <zeta xml:lang="nb"> + <pi title="false" xml:lang="en-GB"/> + <psi/> + <zeta class="_blank" xml:id="id1"> + <sigma attr="attribute-value" xml:id="id2"/> + <lambda attrib="solid 1px green"> + <epsilon title="123456789" xml:lang="en" xml:id="id3"/> + <eta data="100%" xml:id="id4"/> + <any and="this.nodeValue" xml:lang="no-nb" xml:id="id5"/> + <epsilon title="this.nodeValue"/> + <theta attribute="attribute value" xml:lang="nb" xml:id="id6"> + <kappa xml:lang="en-GB" xml:id="id7"/> + <lambda xml:lang="en-US" xml:id="id8"/> + <tau xml:lang="nb" xml:id="id9"> + <delta src="attribute" xml:lang="nb"/> + <iota/> + <any number="attribute" xml:lang="en-US" xml:id="id10"/> + <lambda xml:lang="en"> + <alpha delete="solid 1px green"> + <green>This text must be green</green> + </alpha> + </lambda> + </tau> + </theta> + </lambda> + </zeta> + </zeta> + </psi> + </tree> + </test> + <test> + <xpath>//psi//*[not(preceding-sibling::*)][not(preceding-sibling::any)][following-sibling::omega[@xml:lang="nb"][@xml:id="id1"]//omega[starts-with(concat(@and,"-"),"content-")][@xml:lang="nb"][@xml:id="id2"][following-sibling::tau[@xml:lang="en"][@xml:id="id3"][following-sibling::delta[contains(@true,"ue")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//gamma[@object="attribute value"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::eta[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omega[@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::kappa[preceding-sibling::*[position() = 5]][not(following-sibling::*)]/zeta[@xml:lang="en-GB"][@xml:id="id6"][following-sibling::psi[contains(concat(@att,"$"),"se$")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:lang="en-US"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::pi[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 3]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi> + <any/> + <omega xml:lang="nb" xml:id="id1"> + <omega and="content" xml:lang="nb" xml:id="id2"/> + <tau xml:lang="en" xml:id="id3"/> + <delta true="this-is-att-value" xml:lang="nb"> + <gamma object="attribute value"/> + <mu xml:id="id4"/> + <eta/> + <omega xml:lang="en-GB" xml:id="id5"/> + <gamma/> + <kappa> + <zeta xml:lang="en-GB" xml:id="id6"/> + <psi att="false" xml:lang="no"/> + <delta xml:lang="en-US" xml:id="id7"/> + <pi xml:lang="en-US" xml:id="id8"> + <green>This text must be green</green> + </pi> + </kappa> + </delta> + </omega> + </psi> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="nb"]//upsilon[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[starts-with(concat(@title,"-"),"this-")][@xml:lang="en"][@xml:id="id1"][not(following-sibling::*)]//upsilon[starts-with(@name,"this-is-att-val")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[starts-with(concat(@number,"-"),"false-")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//alpha[@xml:lang="en"][not(child::node())][following-sibling::tau[starts-with(concat(@token,"-"),"solid 1px green-")][@xml:lang="nb"]//omicron[following-sibling::psi[@number][@xml:lang="en-GB"]][position() = 1]]]</xpath> + <tree> + <any xml:lang="nb"> + <upsilon xml:lang="en-GB"> + <mu title="this-is-att-value" xml:lang="en" xml:id="id1"> + <upsilon name="this-is-att-value" xml:id="id2"/> + <nu number="false" xml:lang="en" xml:id="id3"> + <alpha xml:lang="en"/> + <tau token="solid 1px green" xml:lang="nb"> + <omicron/> + <psi number="content" xml:lang="en-GB"> + <green>This text must be green</green> + </psi> + </tau> + </nu> + </mu> + </upsilon> + </any> + </tree> + </test> + <test> + <xpath>//zeta[@xml:lang="en-GB"]/sigma[@delete="this.nodeValue"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@src][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[contains(@title,"true")]/omega[@xml:lang="en"][not(following-sibling::*)]//zeta[@content="100%"][@xml:id="id2"][not(preceding-sibling::*)]/iota[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="no-nb"][not(following-sibling::*)]/upsilon[contains(concat(@false,"$"),"ent$")][not(following-sibling::*)][not(preceding-sibling::upsilon)]/*[@true][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <zeta xml:lang="en-GB"> + <sigma delete="this.nodeValue"> + <rho src="true" xml:lang="en-US" xml:id="id1"/> + <any title="true"> + <omega xml:lang="en"> + <zeta content="100%" xml:id="id2"> + <iota xml:lang="no-nb" xml:id="id3"> + <zeta xml:lang="no-nb"> + <upsilon false="content"> + <any true="123456789" xml:id="id4"/> + <epsilon xml:id="id5"> + <green>This text must be green</green> + </epsilon> + </upsilon> + </zeta> + </iota> + </zeta> + </omega> + </any> + </sigma> + </zeta> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="no-nb"][@xml:id="id1"]/*[starts-with(concat(@abort,"-"),"content-")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omega[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::omega)]//iota[@xml:id="id4"][following-sibling::*[position()=4]][following-sibling::upsilon[@string][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::delta[following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[starts-with(concat(@src,"-"),"solid 1px green-")][following-sibling::mu[@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/nu[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/theta[starts-with(concat(@attribute,"-"),"another attribute value-")][@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::xi[@abort][@xml:lang="en"][preceding-sibling::*[position() = 1]]/sigma[@true][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::zeta[@title][@xml:lang="nb"][@xml:id="id8"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@xml:lang="nb"][@xml:id="id9"][not(following-sibling::*)]//alpha[contains(@attrib,"olid")][@xml:id="id10"][not(preceding-sibling::*)][not(preceding-sibling::alpha)][not(child::node())][following-sibling::tau[not(following-sibling::*)]/omicron[@content][@xml:lang="en-GB"]//phi[starts-with(@class,"_blan")][@xml:lang="no"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@string][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta xml:lang="no-nb" xml:id="id1"> + <any abort="content" xml:lang="en" xml:id="id2"/> + <omega xml:id="id3"> + <iota xml:id="id4"/> + <upsilon string="another attribute value" xml:lang="en-GB" xml:id="id5"/> + <delta/> + <omega src="solid 1px green"/> + <mu xml:lang="no-nb" xml:id="id6"> + <nu xml:id="id7"> + <delta/> + <theta xml:lang="en-US"> + <theta attribute="another attribute value" xml:lang="en"/> + <xi abort="attribute" xml:lang="en"> + <sigma true="123456789" xml:lang="nb"/> + <zeta title="_blank" xml:lang="nb" xml:id="id8"/> + <beta xml:lang="nb" xml:id="id9"> + <alpha attrib="solid 1px green" xml:id="id10"/> + <tau> + <omicron content="attribute value" xml:lang="en-GB"> + <phi class="_blank" xml:lang="no" xml:id="id11"> + <upsilon string="this-is-att-value"> + <green>This text must be green</green> + </upsilon> + </phi> + </omicron> + </tau> + </beta> + </xi> + </theta> + </nu> + </mu> + </omega> + </eta> + </tree> + </test> + <test> + <xpath>//lambda[starts-with(@string,"tr")][@xml:lang="en-US"][@xml:id="id1"]/eta[not(following-sibling::*)]/alpha[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::beta[@xml:id="id2"][not(following-sibling::*)]//lambda[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[contains(@true,"l")][@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]]</xpath> + <tree> + <lambda string="true" xml:lang="en-US" xml:id="id1"> + <eta> + <alpha xml:lang="no-nb"/> + <beta xml:id="id2"> + <lambda xml:lang="en-US"> + <rho true="_blank" xml:lang="nb" xml:id="id3"> + <green>This text must be green</green> + </rho> + </lambda> + </beta> + </eta> + </lambda> + </tree> + </test> + <test> + <xpath>//delta[@delete][@xml:lang="no-nb"]//alpha[@xml:id="id1"]//psi[@xml:id="id2"][not(following-sibling::*)]//delta[starts-with(@desciption,"this-is-att-valu")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::tau[contains(concat(@number,"$"),"ttribute$")][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::rho[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::phi[@class][preceding-sibling::*[position() = 3]][not(following-sibling::*)]]]]</xpath> + <tree> + <delta delete="this.nodeValue" xml:lang="no-nb"> + <alpha xml:id="id1"> + <psi xml:id="id2"> + <delta desciption="this-is-att-value" xml:lang="en-GB"/> + <tau number="attribute" xml:id="id3"/> + <rho xml:lang="no" xml:id="id4"/> + <phi class="content"> + <green>This text must be green</green> + </phi> + </psi> + </alpha> + </delta> + </tree> + </test> + <test> + <xpath>//chi[contains(concat(@string,"$"),"23456789$")]//phi[@xml:lang="en-US"][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//omicron[starts-with(concat(@false,"-"),"_blank-")][@xml:id="id3"][following-sibling::pi[@token="123456789"][@xml:lang="en"][not(child::node())][following-sibling::lambda[@attribute][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::omega[contains(concat(@or,"$"),"false$")][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::chi[@xml:id="id6"]//epsilon[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[contains(@and,"true")][@xml:lang="en"][preceding-sibling::*[position() = 1]]//kappa[@xml:id="id8"][not(preceding-sibling::*)]/mu[@attrib][not(preceding-sibling::*)]/mu[@class][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[starts-with(concat(@number,"-"),"100%-")][not(following-sibling::*)][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <chi string="123456789"> + <phi xml:lang="en-US" xml:id="id1"/> + <lambda xml:lang="en-US" xml:id="id2"> + <omicron false="_blank" xml:id="id3"/> + <pi token="123456789" xml:lang="en"/> + <lambda attribute="attribute-value" xml:id="id4"/> + <omega or="false" xml:id="id5"/> + <chi xml:id="id6"> + <epsilon xml:lang="no" xml:id="id7"/> + <delta and="true" xml:lang="en"> + <kappa xml:id="id8"> + <mu attrib="100%"> + <mu class="attribute-value" xml:id="id9"> + <nu number="100%"> + <green>This text must be green</green> + </nu> + </mu> + </mu> + </kappa> + </delta> + </chi> + </lambda> + </chi> + </tree> + </test> + <test> + <xpath>//alpha//rho[@xml:id="id1"][not(preceding-sibling::*)]//xi[@xml:id="id2"]//zeta[@xml:lang="en-US"][@xml:id="id3"][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::pi[@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/omega[not(preceding-sibling::*)]/pi[@xml:id="id6"]//omicron[@xml:lang="no-nb"]//psi[@abort="this-is-att-value"][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::gamma[contains(concat(@class,"$"),"%$")][@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[contains(concat(@title,"$"),"123456789$")][@xml:id="id9"]/gamma[@xml:lang="en"][@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <alpha> + <rho xml:id="id1"> + <xi xml:id="id2"> + <zeta xml:lang="en-US" xml:id="id3"/> + <alpha xml:lang="en-GB" xml:id="id4"/> + <pi xml:id="id5"> + <omega> + <pi xml:id="id6"> + <omicron xml:lang="no-nb"> + <psi abort="this-is-att-value" xml:lang="nb" xml:id="id7"/> + <gamma class="100%" xml:lang="en-GB" xml:id="id8"/> + <iota title="123456789" xml:id="id9"> + <gamma xml:lang="en" xml:id="id10"/> + <gamma xml:lang="en-US"> + <green>This text must be green</green> + </gamma> + </iota> + </omicron> + </pi> + </omega> + </pi> + </xi> + </rho> + </alpha> + </tree> + </test> + <test> + <xpath>//rho//tau[starts-with(@content,"s")]//*[@xml:id="id1"][not(preceding-sibling::*)]//epsilon[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[contains(concat(@true,"$"),"k$")][@xml:lang="no"][@xml:id="id2"]//eta[@xml:lang="en-GB"][not(preceding-sibling::*)]/xi[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/zeta[@content][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::omicron[contains(concat(@true,"$"),"ue$")][@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::tau[preceding-sibling::*[position() = 2]][following-sibling::gamma[contains(concat(@attribute,"$"),"alue$")][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[@att="solid 1px green"][@xml:id="id5"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::nu[@xml:id="id6"][not(following-sibling::*)]/beta[starts-with(concat(@delete,"-"),"this.nodeValue-")][@xml:lang="en-US"][@xml:id="id7"]/delta[@delete][@xml:id="id8"][not(preceding-sibling::delta)][following-sibling::nu[not(child::node())][following-sibling::sigma[@xml:lang="en-US"][following-sibling::theta[contains(concat(@string,"$"),"e$")][@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::beta[not(following-sibling::*)]/zeta[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <rho> + <tau content="solid 1px green"> + <any xml:id="id1"> + <epsilon/> + <gamma true="_blank" xml:lang="no" xml:id="id2"> + <eta xml:lang="en-GB"> + <xi xml:lang="en-US" xml:id="id3"> + <zeta content="this.nodeValue" xml:lang="no-nb"/> + <omicron true="true" xml:lang="nb" xml:id="id4"/> + <tau/> + <gamma attribute="attribute-value"/> + <theta att="solid 1px green" xml:id="id5"/> + <nu xml:id="id6"> + <beta delete="this.nodeValue" xml:lang="en-US" xml:id="id7"> + <delta delete="_blank" xml:id="id8"/> + <nu/> + <sigma xml:lang="en-US"/> + <theta string="true" xml:lang="nb"/> + <beta> + <zeta xml:lang="nb"> + <zeta xml:id="id9"/> + <beta xml:lang="en"> + <green>This text must be green</green> + </beta> + </zeta> + </beta> + </beta> + </nu> + </xi> + </eta> + </gamma> + </any> + </tau> + </rho> + </tree> + </test> + <test> + <xpath>//eta[@xml:id="id1"]//sigma[@insert="this-is-att-value"][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@xml:lang="no"][following-sibling::gamma[@xml:lang="no"][@xml:id="id2"][following-sibling::mu//iota/beta[@true="_blank"][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::sigma[@or][preceding-sibling::*[position() = 1]][following-sibling::xi[not(following-sibling::*)]//nu[@false][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@string="content"][@xml:lang="en-GB"]/zeta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:id="id5"][preceding-sibling::*[position() = 1]]/nu[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[contains(@class,"co")][not(preceding-sibling::*)][not(preceding-sibling::nu)][not(child::node())][following-sibling::beta[@xml:id="id7"][following-sibling::iota[contains(@and,"ribute")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]/omicron[@attrib="solid 1px green"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[@title][@xml:lang="nb"][preceding-sibling::*[position() = 1]]//zeta[following-sibling::pi[@token="100%"][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[contains(concat(@and,"$"),"tent$")][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@desciption][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[contains(concat(@delete,"$"),"ue$")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <eta xml:id="id1"> + <sigma insert="this-is-att-value" xml:lang="nb"> + <upsilon xml:lang="no"/> + <gamma xml:lang="no" xml:id="id2"/> + <mu> + <iota> + <beta true="_blank" xml:lang="no" xml:id="id3"/> + <sigma or="false"/> + <xi> + <nu false="another attribute value" xml:lang="nb" xml:id="id4"> + <psi string="content" xml:lang="en-GB"> + <zeta xml:lang="en-GB"/> + <delta xml:id="id5"> + <nu xml:id="id6"> + <nu class="content"/> + <beta xml:id="id7"/> + <iota and="attribute" xml:lang="nb"> + <omicron attrib="solid 1px green"/> + <phi title="false" xml:lang="nb"> + <zeta/> + <pi token="100%" xml:lang="en"> + <iota and="content"/> + <any desciption="solid 1px green" xml:lang="en"/> + <delta delete="true" xml:lang="nb"> + <green>This text must be green</green> + </delta> + </pi> + </phi> + </iota> + </nu> + </delta> + </psi> + </nu> + </xi> + </iota> + </mu> + </sigma> + </eta> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]//xi[starts-with(concat(@object,"-"),"true-")][@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::tau[contains(@content,"k")][preceding-sibling::*[position() = 1]][following-sibling::chi[not(following-sibling::*)]//upsilon[@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::epsilon[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[starts-with(@string,"this-is-a")][@xml:id="id4"][not(child::node())][following-sibling::psi[contains(@object,"value")][@xml:lang="nb"][not(following-sibling::*)]/zeta[not(child::node())][following-sibling::omicron[contains(concat(@insert,"$"),"tent$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <psi xml:id="id1"> + <xi object="true" xml:lang="en-US" xml:id="id2"/> + <tau content="_blank"/> + <chi> + <upsilon xml:lang="en" xml:id="id3"/> + <epsilon xml:lang="no"> + <sigma string="this-is-att-value" xml:id="id4"/> + <psi object="attribute value" xml:lang="nb"> + <zeta/> + <omicron insert="content" xml:lang="no-nb"> + <green>This text must be green</green> + </omicron> + </psi> + </epsilon> + </chi> + </psi> + </tree> + </test> + <test> + <xpath>//omega/tau[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]]/nu[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[contains(concat(@src,"$"),"9$")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::eta[@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]//rho[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@attribute="this.nodeValue"][@xml:lang="nb"][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <omega> + <tau xml:lang="no"/> + <beta xml:lang="nb" xml:id="id1"> + <nu xml:lang="no-nb"> + <eta src="123456789" xml:lang="no" xml:id="id2"> + <phi xml:lang="en"/> + <eta xml:lang="nb" xml:id="id3"> + <rho xml:id="id4"> + <psi attribute="this.nodeValue" xml:lang="nb"> + <green>This text must be green</green> + </psi> + </rho> + </eta> + </eta> + </nu> + </beta> + </omega> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]//alpha[@xml:lang="en-GB"]//gamma[@xml:lang="no-nb"][not(following-sibling::*)]/sigma[starts-with(@object,"solid 1px gr")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[contains(concat(@attrib,"$"),"Value$")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[contains(concat(@attribute,"$"),"false$")][@xml:id="id3"]//*[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]//beta[not(preceding-sibling::*)][following-sibling::phi[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[@xml:lang="nb"][preceding-sibling::*[position() = 2]][following-sibling::xi[@class="100%"][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(preceding-sibling::xi)]//*[@xml:lang="en"][not(following-sibling::*)][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <psi xml:id="id1"> + <alpha xml:lang="en-GB"> + <gamma xml:lang="no-nb"> + <sigma object="solid 1px green" xml:lang="en"/> + <epsilon> + <lambda attrib="this.nodeValue" xml:id="id2"/> + <delta attribute="false" xml:id="id3"> + <any xml:lang="no" xml:id="id4"> + <beta/> + <phi xml:lang="en" xml:id="id5"/> + <kappa xml:lang="nb"/> + <xi class="100%" xml:lang="en-US" xml:id="id6"> + <any xml:lang="en"> + <green>This text must be green</green> + </any> + </xi> + </any> + </delta> + </epsilon> + </gamma> + </alpha> + </psi> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]/kappa[@xml:id="id2"]/phi[starts-with(concat(@token,"-"),"123456789-")][@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)]//omega[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@abort][not(following-sibling::*)]//*[@name][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(concat(@attr,"-"),"attribute value-")][not(following-sibling::*)]//rho[contains(@title,"0%")][@xml:lang="no"][following-sibling::phi[starts-with(@attr,"100%")][@xml:lang="nb"][following-sibling::beta/omicron[@xml:id="id5"][not(preceding-sibling::*)]/omega[contains(concat(@class,"$"),"true$")][@xml:id="id6"]//lambda[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::pi[starts-with(concat(@delete,"-"),"solid 1px green-")][@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::gamma[@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::kappa[@xml:lang="en"][following-sibling::kappa[contains(@desciption,"bl")]/alpha[starts-with(concat(@title,"-"),"attribute-")][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[@true="_blank"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(following-sibling::phi)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <nu xml:id="id1"> + <kappa xml:id="id2"> + <phi token="123456789" xml:lang="en-GB" xml:id="id3"> + <omega xml:id="id4"/> + <epsilon abort="true"> + <any name="100%" xml:lang="en-US"/> + <kappa attr="attribute value"> + <rho title="100%" xml:lang="no"/> + <phi attr="100%" xml:lang="nb"/> + <beta> + <omicron xml:id="id5"> + <omega class="true" xml:id="id6"> + <lambda xml:lang="en-US" xml:id="id7"/> + <pi delete="solid 1px green" xml:lang="en-US" xml:id="id8"/> + <gamma xml:lang="en-GB" xml:id="id9"/> + <kappa xml:lang="en"/> + <kappa desciption="_blank"> + <alpha title="attribute" xml:id="id10"/> + <phi true="_blank"> + <green>This text must be green</green> + </phi> + </kappa> + </omega> + </omicron> + </beta> + </kappa> + </epsilon> + </phi> + </kappa> + </nu> + </tree> + </test> + <test> + <xpath>//kappa[@xml:id="id1"]//zeta[following-sibling::omega[not(following-sibling::*)]/eta[starts-with(concat(@data,"-"),"true-")][not(child::node())][following-sibling::theta[@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::gamma[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::delta[not(child::node())][following-sibling::psi[starts-with(concat(@or,"-"),"attribute value-")][@xml:lang="en-US"][preceding-sibling::*[position() = 4]]//sigma[@xml:id="id4"][not(child::node())][following-sibling::kappa[@insert][@xml:lang="en"][@xml:id="id5"][not(child::node())][following-sibling::mu[@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::iota[@xml:lang="no-nb"]//chi[not(preceding-sibling::*)]//sigma[starts-with(concat(@insert,"-"),"solid 1px green-")][@xml:lang="no"][following-sibling::eta[@or][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[contains(@false,"rue")][@xml:id="id8"][following-sibling::tau[starts-with(@or,"solid 1px ")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][not(following-sibling::*)]/iota[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="no"][@xml:id="id9"][not(following-sibling::*)][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <kappa xml:id="id1"> + <zeta/> + <omega> + <eta data="true"/> + <theta xml:lang="no" xml:id="id2"/> + <gamma xml:id="id3"/> + <delta/> + <psi or="attribute value" xml:lang="en-US"> + <sigma xml:id="id4"/> + <kappa insert="content" xml:lang="en" xml:id="id5"/> + <mu xml:id="id6"/> + <iota xml:lang="no-nb"> + <chi> + <sigma insert="solid 1px green" xml:lang="no"/> + <eta or="_blank" xml:id="id7"> + <xi false="true" xml:id="id8"/> + <tau or="solid 1px green" xml:lang="en"/> + <kappa xml:lang="no-nb"> + <iota xml:lang="no-nb"/> + <psi xml:lang="no" xml:id="id9"> + <green>This text must be green</green> + </psi> + </kappa> + </eta> + </chi> + </iota> + </psi> + </omega> + </kappa> + </tree> + </test> + <test> + <xpath>//alpha[contains(concat(@src,"$"),"e$")]/iota[@att][@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::theta[starts-with(@insert,"conte")][@xml:lang="nb"][@xml:id="id2"][following-sibling::delta[starts-with(@name,"this.nodeVa")][@xml:lang="en-US"][following-sibling::psi[starts-with(concat(@attrib,"-"),"content-")][@xml:lang="no"][following-sibling::*[position()=3]][following-sibling::epsilon[contains(concat(@insert,"$"),"ue$")][@xml:lang="no-nb"][@xml:id="id3"][not(child::node())][following-sibling::epsilon[@xml:id="id4"][not(child::node())][following-sibling::*[contains(@number,"en")][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <alpha src="true"> + <iota att="_blank" xml:lang="en" xml:id="id1"/> + <theta insert="content" xml:lang="nb" xml:id="id2"/> + <delta name="this.nodeValue" xml:lang="en-US"/> + <psi attrib="content" xml:lang="no"/> + <epsilon insert="true" xml:lang="no-nb" xml:id="id3"/> + <epsilon xml:id="id4"/> + <any number="solid 1px green"> + <green>This text must be green</green> + </any> + </alpha> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="nb"]//pi[starts-with(@data,"attribut")][@xml:id="id1"][following-sibling::omega[contains(@attribute,"ue")][@xml:lang="no-nb"][following-sibling::chi[@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 2]]/gamma[starts-with(concat(@or,"-"),"attribute value-")][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::phi[contains(@content,"fal")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//sigma[@xml:lang="en"]//kappa[@xml:id="id4"][following-sibling::omega[preceding-sibling::*[position() = 1]]//theta[@xml:lang="no-nb"][@xml:id="id5"][following-sibling::*[position()=3]][not(following-sibling::theta)][not(child::node())][following-sibling::epsilon[@delete][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::gamma[@abort][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::mu[@name][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//beta[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <any xml:lang="nb"> + <pi data="attribute value" xml:id="id1"/> + <omega attribute="this-is-att-value" xml:lang="no-nb"/> + <chi xml:lang="en" xml:id="id2"> + <gamma or="attribute value"/> + <phi content="false" xml:lang="en" xml:id="id3"> + <sigma xml:lang="en"> + <kappa xml:id="id4"/> + <omega> + <theta xml:lang="no-nb" xml:id="id5"/> + <epsilon delete="false"/> + <gamma abort="attribute" xml:lang="en-US"/> + <mu name="_blank" xml:lang="en-GB" xml:id="id6"> + <beta xml:lang="en-US"> + <green>This text must be green</green> + </beta> + </mu> + </omega> + </sigma> + </phi> + </chi> + </any> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="en-US"]//iota[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@delete][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@xml:lang="nb"][following-sibling::*[position()=1]][not(preceding-sibling::zeta)][not(child::node())][following-sibling::eta[@data][preceding-sibling::*[position() = 3]][not(preceding-sibling::eta)]//iota[contains(concat(@string,"$"),"content$")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::upsilon[following-sibling::*[position()=1]][following-sibling::upsilon[not(following-sibling::*)]//delta[@class="_blank"][following-sibling::*[position()=1]][following-sibling::zeta[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[contains(@token,"se")][@xml:id="id4"][not(preceding-sibling::*)]/nu[@number="another attribute value"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@xml:id="id6"][not(following-sibling::*)]/mu[starts-with(@number,"another attribute valu")][not(following-sibling::*)]/delta[starts-with(@abort,"fal")][@xml:lang="en"][not(child::node())][following-sibling::gamma[@xml:id="id7"][not(following-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota xml:lang="en-US"> + <iota xml:id="id1"/> + <beta delete="attribute" xml:id="id2"/> + <zeta xml:lang="nb"/> + <eta data="another attribute value"> + <iota string="content" xml:lang="en-GB"/> + <upsilon/> + <upsilon> + <delta class="_blank"/> + <zeta xml:id="id3"> + <epsilon token="false" xml:id="id4"> + <nu number="another attribute value" xml:id="id5"> + <upsilon xml:id="id6"> + <mu number="another attribute value"> + <delta abort="false" xml:lang="en"/> + <gamma xml:id="id7"> + <green>This text must be green</green> + </gamma> + </mu> + </upsilon> + </nu> + </epsilon> + </zeta> + </upsilon> + </eta> + </iota> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="no-nb"][@xml:id="id1"]/sigma[@xml:lang="en-US"][not(following-sibling::*)]/xi[not(following-sibling::*)]//kappa[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/psi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@src="_blank"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::upsilon[@or][@xml:id="id4"][following-sibling::sigma[@class][@xml:id="id5"][preceding-sibling::*[position() = 2]]][position() = 1]]]</xpath> + <tree> + <epsilon xml:lang="no-nb" xml:id="id1"> + <sigma xml:lang="en-US"> + <xi> + <kappa xml:lang="en" xml:id="id2"/> + <omicron xml:lang="en-GB" xml:id="id3"> + <psi xml:lang="no-nb"> + <iota src="_blank" xml:lang="no-nb"> + <omega xml:lang="en"/> + <upsilon or="content" xml:id="id4"/> + <sigma class="this-is-att-value" xml:id="id5"> + <green>This text must be green</green> + </sigma> + </iota> + </psi> + </omicron> + </xi> + </sigma> + </epsilon> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:id="id1"]//phi[@xml:lang="en-US"][@xml:id="id2"][following-sibling::beta[preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::zeta[starts-with(@string,"solid 1px gr")][@xml:lang="no-nb"][following-sibling::omega[contains(concat(@object,"$"),"rue$")][@xml:id="id3"][not(child::node())][following-sibling::lambda[@name][@xml:lang="no"][not(following-sibling::*)]/gamma[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@title][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//chi[@xml:lang="no-nb"][not(child::node())][following-sibling::zeta[starts-with(@or,"t")][not(child::node())][following-sibling::iota[starts-with(concat(@string,"-"),"100%-")][@xml:lang="no"][@xml:id="id7"][not(child::node())][following-sibling::mu[@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//gamma[@xml:lang="en-US"][@xml:id="id9"][not(following-sibling::*)]//rho[@xml:lang="no-nb"][following-sibling::lambda[@xml:lang="nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::lambda[@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 2]]/upsilon[contains(concat(@content,"$"),"solid 1px green$")][@xml:lang="nb"][not(following-sibling::*)][not(preceding-sibling::upsilon)]//psi[contains(concat(@data,"$"),"id 1px green$")][not(preceding-sibling::*)][not(following-sibling::*)]/psi[contains(@attribute,"ttribute val")][not(preceding-sibling::*)]/upsilon[@class][@xml:lang="nb"][@xml:id="id12"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::gamma[@src][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:lang="en-GB"]//*[contains(@attrib,"ank")][@xml:lang="en-GB"][not(preceding-sibling::*)]][position() = 1]]]]][position() = 1]]]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <epsilon xml:id="id1"> + <phi xml:lang="en-US" xml:id="id2"/> + <beta/> + <zeta string="solid 1px green" xml:lang="no-nb"/> + <omega object="true" xml:id="id3"/> + <lambda name="another attribute value" xml:lang="no"> + <gamma xml:lang="en-US" xml:id="id4"/> + <sigma xml:lang="no" xml:id="id5"/> + <sigma title="attribute-value" xml:id="id6"> + <chi xml:lang="no-nb"/> + <zeta or="this-is-att-value"/> + <iota string="100%" xml:lang="no" xml:id="id7"/> + <mu xml:id="id8"> + <gamma xml:lang="en-US" xml:id="id9"> + <rho xml:lang="no-nb"/> + <lambda xml:lang="nb" xml:id="id10"/> + <lambda xml:lang="no" xml:id="id11"> + <upsilon content="solid 1px green" xml:lang="nb"> + <psi data="solid 1px green"> + <psi attribute="another attribute value"> + <upsilon class="this-is-att-value" xml:lang="nb" xml:id="id12"/> + <gamma src="attribute value"/> + <theta xml:lang="en-GB"> + <any attrib="_blank" xml:lang="en-GB"> + <green>This text must be green</green> + </any> + </theta> + </psi> + </psi> + </upsilon> + </lambda> + </gamma> + </mu> + </sigma> + </lambda> + </epsilon> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en-US"]//tau[starts-with(concat(@attr,"-"),"this-")][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[contains(@class,"ute-value")][@xml:lang="en"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::psi[@xml:lang="en"][not(following-sibling::*)]//iota[@true][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@class="this.nodeValue"][@xml:lang="en"][not(following-sibling::*)]//theta[contains(concat(@attr,"$"),"100%$")][@xml:id="id3"]//rho[@xml:lang="en-US"][following-sibling::*[position()=4]][not(child::node())][following-sibling::omicron[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[@false][@xml:id="id5"][preceding-sibling::*[position() = 2]][following-sibling::phi[starts-with(@data,"attribute-value")][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[starts-with(@attr,"attribut")][@xml:lang="no"][preceding-sibling::*[position() = 4]]//nu[contains(concat(@class,"$"),"tribute-value$")][@xml:id="id6"][following-sibling::*[position()=3]][not(child::node())][following-sibling::theta[following-sibling::*[position()=2]][following-sibling::alpha[contains(@desciption,"value")][@xml:lang="en-GB"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::sigma[contains(concat(@data,"$"),"this-is-att-value$")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <chi xml:lang="en-US"> + <tau attr="this-is-att-value"/> + <beta class="attribute-value" xml:lang="en" xml:id="id1"/> + <psi xml:lang="en"> + <iota true="123456789" xml:id="id2"/> + <psi class="this.nodeValue" xml:lang="en"> + <theta attr="100%" xml:id="id3"> + <rho xml:lang="en-US"/> + <omicron xml:id="id4"/> + <iota false="100%" xml:id="id5"/> + <phi data="attribute-value"/> + <psi attr="attribute" xml:lang="no"> + <nu class="attribute-value" xml:id="id6"/> + <theta/> + <alpha desciption="this-is-att-value" xml:lang="en-GB"/> + <sigma data="this-is-att-value" xml:lang="en-US" xml:id="id7"> + <green>This text must be green</green> + </sigma> + </psi> + </theta> + </psi> + </psi> + </chi> + </tree> + </test> + <test> + <xpath>//omega[@and][@xml:lang="en-GB"][@xml:id="id1"]/omega[contains(concat(@desciption,"$"),"ibute$")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[contains(concat(@object,"$"),"nother attribute value$")][@xml:id="id3"][not(preceding-sibling::*)]//epsilon[@and="123456789"][@xml:lang="en-US"][not(following-sibling::*)]//pi[contains(concat(@content,"$"),"reen$")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]//zeta[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::zeta[following-sibling::alpha[@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::nu[@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//tau[not(child::node())][following-sibling::tau[not(following-sibling::*)]/chi[starts-with(concat(@true,"-"),"123456789-")][@xml:lang="no"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]</xpath> + <tree> + <omega and="_blank" xml:lang="en-GB" xml:id="id1"> + <omega desciption="attribute" xml:lang="no-nb" xml:id="id2"> + <theta object="another attribute value" xml:id="id3"> + <epsilon and="123456789" xml:lang="en-US"> + <pi content="solid 1px green" xml:lang="en" xml:id="id4"> + <zeta xml:id="id5"/> + <zeta/> + <alpha xml:lang="no-nb"/> + <nu xml:id="id6"> + <tau/> + <tau> + <chi true="123456789" xml:lang="no"> + <green>This text must be green</green> + </chi> + </tau> + </nu> + </pi> + </epsilon> + </theta> + </omega> + </omega> + </tree> + </test> + <test> + <xpath>//iota[starts-with(@att,"content")][@xml:id="id1"]//phi[@xml:id="id2"][not(following-sibling::*)]/theta[starts-with(@class,"_")][@xml:lang="en-US"][following-sibling::iota[contains(@abort,"234")][not(child::node())][following-sibling::psi[starts-with(concat(@abort,"-"),"content-")][@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::pi[@string][@xml:lang="en-US"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[contains(@attrib," 1px g")][preceding-sibling::*[position() = 4]]//tau[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::zeta[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omicron[not(following-sibling::*)][not(preceding-sibling::omicron)]//*[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)]//sigma[@content][not(following-sibling::*)]//phi[starts-with(@true,"123456789")][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@attr][@xml:lang="en-GB"][following-sibling::zeta[starts-with(concat(@token,"-"),"another attribute value-")][@xml:id="id8"][following-sibling::zeta[contains(@attr,"e")][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 4]][position() = 1]]]]]]]][position() = 1]]]</xpath> + <tree> + <iota att="content" xml:id="id1"> + <phi xml:id="id2"> + <theta class="_blank" xml:lang="en-US"/> + <iota abort="123456789"/> + <psi abort="content" xml:lang="en-GB" xml:id="id3"/> + <pi string="solid 1px green" xml:lang="en-US" xml:id="id4"/> + <sigma attrib="solid 1px green"> + <tau xml:id="id5"/> + <zeta xml:lang="nb"> + <omicron> + <any xml:lang="en-GB" xml:id="id6"> + <sigma content="attribute"> + <phi true="123456789" xml:lang="nb" xml:id="id7"/> + <beta attr="content" xml:lang="en-GB"/> + <zeta token="another attribute value" xml:id="id8"/> + <zeta attr="false"/> + <upsilon xml:lang="nb" xml:id="id9"> + <green>This text must be green</green> + </upsilon> + </sigma> + </any> + </omicron> + </zeta> + </sigma> + </phi> + </iota> + </tree> + </test> + <test> + <xpath>//pi[contains(@attr,"ibute va")][@xml:id="id1"]//chi[@xml:id="id2"]//phi[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)]/lambda[@xml:lang="en-GB"]/kappa[not(preceding-sibling::*)]//*[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:lang="en-GB"][not(following-sibling::*)]//tau[@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:id="id7"][not(following-sibling::*)]][position() = 1]]]</xpath> + <tree> + <pi attr="attribute value" xml:id="id1"> + <chi xml:id="id2"> + <phi xml:lang="nb" xml:id="id3"> + <lambda xml:lang="en-GB"> + <kappa> + <any xml:id="id4"/> + <gamma xml:id="id5"/> + <lambda xml:lang="en-GB"> + <tau xml:lang="nb" xml:id="id6"/> + <pi xml:id="id7"> + <green>This text must be green</green> + </pi> + </lambda> + </kappa> + </lambda> + </phi> + </chi> + </pi> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="en-US"][@xml:id="id1"]//beta[starts-with(concat(@insert,"-"),"content-")][@xml:lang="en-US"][following-sibling::beta[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::delta[starts-with(@src,"cont")][@xml:id="id2"]/omega[not(preceding-sibling::*)][following-sibling::eta[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::rho[not(child::node())][following-sibling::nu[starts-with(@string,"10")][preceding-sibling::*[position() = 3]][following-sibling::pi[contains(@title,"x green")][not(following-sibling::*)]/chi[starts-with(@and,"attribut")][@xml:id="id4"][not(preceding-sibling::*)]/tau[not(child::node())][following-sibling::epsilon[@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::beta[starts-with(concat(@abort,"-"),"123456789-")][@xml:id="id6"]/rho[@xml:lang="en"][not(preceding-sibling::*)][position() = 1]]][position() = 1]]]]]]]</xpath> + <tree> + <eta xml:lang="en-US" xml:id="id1"> + <beta insert="content" xml:lang="en-US"/> + <beta/> + <delta src="content" xml:id="id2"> + <omega/> + <eta xml:lang="en-US" xml:id="id3"/> + <rho/> + <nu string="100%"/> + <pi title="solid 1px green"> + <chi and="attribute-value" xml:id="id4"> + <tau/> + <epsilon xml:id="id5"/> + <beta abort="123456789" xml:id="id6"> + <rho xml:lang="en"> + <green>This text must be green</green> + </rho> + </beta> + </chi> + </pi> + </delta> + </eta> + </tree> + </test> + <test> + <xpath>//alpha[contains(concat(@abort,"$"),"te$")][@xml:lang="en-GB"][@xml:id="id1"]//lambda[contains(@src,"cont")][@xml:id="id2"]//omicron[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[starts-with(@attrib,"attr")][not(preceding-sibling::*)]/theta[following-sibling::nu[@string][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[@object][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[starts-with(concat(@content,"-"),"another attribute value-")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::tau)]//pi[@and="attribute-value"][not(child::node())][following-sibling::zeta[following-sibling::*[position()=3]][following-sibling::rho[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::rho[@delete][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::gamma[contains(@data,"bute value")][@xml:lang="no"]/tau[contains(concat(@src,"$"),"lue$")][not(preceding-sibling::*)][following-sibling::alpha[@xml:id="id6"][following-sibling::upsilon[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <alpha abort="attribute" xml:lang="en-GB" xml:id="id1"> + <lambda src="content" xml:id="id2"> + <omicron xml:lang="nb"> + <tau attrib="attribute-value"> + <theta/> + <nu string="content" xml:lang="nb"> + <nu object="_blank" xml:id="id3"> + <tau content="another attribute value" xml:lang="en-US"> + <pi and="attribute-value"/> + <zeta/> + <rho xml:id="id4"/> + <rho delete="_blank" xml:lang="no-nb" xml:id="id5"/> + <gamma data="another attribute value" xml:lang="no"> + <tau src="another attribute value"/> + <alpha xml:id="id6"/> + <upsilon xml:lang="no-nb"> + <green>This text must be green</green> + </upsilon> + </gamma> + </tau> + </nu> + </nu> + </tau> + </omicron> + </lambda> + </alpha> + </tree> + </test> + <test> + <xpath>//psi[starts-with(concat(@att,"-"),"100%-")]//chi[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::alpha[preceding-sibling::*[position() = 2]]//phi[@title][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::phi[@insert][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <psi att="100%"> + <chi xml:lang="en-US"/> + <iota xml:id="id1"/> + <alpha> + <phi title="_blank" xml:id="id2"/> + <xi xml:lang="en-US"/> + <phi insert="solid 1px green"/> + <sigma xml:lang="en-GB"> + <green>This text must be green</green> + </sigma> + </alpha> + </psi> + </tree> + </test> + <test> + <xpath>//*[@insert="_blank"]/epsilon[starts-with(@data,"this.")][@xml:id="id1"]/gamma[not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::phi[contains(concat(@desciption,"$"),"0%$")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::zeta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//*[@title][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@abort="another attribute value"][@xml:lang="nb"][@xml:id="id3"][not(child::node())][following-sibling::omicron[@token="attribute-value"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::rho[contains(concat(@title,"$"),"alse$")][@xml:id="id4"][preceding-sibling::*[position() = 3]]//omicron[@xml:id="id5"][not(child::node())][following-sibling::zeta[not(following-sibling::*)]//iota[@xml:lang="en-US"][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/xi[@xml:lang="en-GB"][@xml:id="id7"]//alpha[not(preceding-sibling::*)]//omicron[contains(@name,"e")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[not(following-sibling::*)]//omicron[@xml:id="id8"][not(following-sibling::*)]/alpha[not(child::node())][following-sibling::eta[starts-with(@string,"another at")][@xml:lang="en"][position() = 1]]]][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <any insert="_blank"> + <epsilon data="this.nodeValue" xml:id="id1"> + <gamma/> + <phi desciption="100%" xml:id="id2"/> + <zeta> + <any title="this-is-att-value"/> + <alpha abort="another attribute value" xml:lang="nb" xml:id="id3"/> + <omicron token="attribute-value"/> + <rho title="false" xml:id="id4"> + <omicron xml:id="id5"/> + <zeta> + <iota xml:lang="en-US"/> + <pi/> + <omega xml:lang="no" xml:id="id6"> + <xi xml:lang="en-GB" xml:id="id7"> + <alpha> + <omicron name="true"/> + <omicron> + <omicron xml:id="id8"> + <alpha/> + <eta string="another attribute value" xml:lang="en"> + <green>This text must be green</green> + </eta> + </omicron> + </omicron> + </alpha> + </xi> + </omega> + </zeta> + </rho> + </zeta> + </epsilon> + </any> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]/theta[starts-with(@desciption,"attribut")][@xml:lang="no-nb"][not(following-sibling::*)]/alpha[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::rho[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::*[starts-with(@token,"attribute-val")][@xml:lang="no-nb"][@xml:id="id4"]/lambda[starts-with(@name,"another attr")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:id="id5"]//epsilon[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[starts-with(@src,"att")][@xml:lang="no"][@xml:id="id6"][following-sibling::xi[not(following-sibling::*)]/lambda[starts-with(concat(@true,"-"),"this-")][@xml:id="id7"][not(child::node())][following-sibling::*[@xml:id="id8"][not(child::node())][following-sibling::kappa[not(child::node())][following-sibling::theta[starts-with(@abort,"at")][@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 3]]/epsilon[@false][@xml:lang="en-GB"][@xml:id="id10"][not(preceding-sibling::*)]/chi[@xml:lang="nb"][@xml:id="id11"][not(following-sibling::*)][not(preceding-sibling::chi or following-sibling::chi)]//chi[@xml:id="id12"][not(following-sibling::*)]]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <alpha xml:id="id1"> + <theta desciption="attribute" xml:lang="no-nb"> + <alpha xml:id="id2"/> + <upsilon xml:lang="en"/> + <rho xml:id="id3"/> + <any token="attribute-value" xml:lang="no-nb" xml:id="id4"> + <lambda name="another attribute value" xml:lang="en-US"/> + <phi xml:id="id5"> + <epsilon xml:lang="no-nb"> + <rho/> + <lambda src="attribute value" xml:lang="no" xml:id="id6"/> + <xi> + <lambda true="this-is-att-value" xml:id="id7"/> + <any xml:id="id8"/> + <kappa/> + <theta abort="attribute" xml:lang="nb" xml:id="id9"> + <epsilon false="attribute-value" xml:lang="en-GB" xml:id="id10"> + <chi xml:lang="nb" xml:id="id11"> + <chi xml:id="id12"> + <green>This text must be green</green> + </chi> + </chi> + </epsilon> + </theta> + </xi> + </epsilon> + </phi> + </any> + </theta> + </alpha> + </tree> + </test> + <test> + <xpath>//psi//epsilon[contains(@att,"alue")][@xml:lang="no"][not(following-sibling::*)]/zeta[contains(@object,"s-att-value")][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[following-sibling::pi[contains(concat(@number,"$"),"content$")][@xml:lang="nb"][@xml:id="id1"][not(child::node())][following-sibling::eta[starts-with(@delete,"this-is-att-valu")][@xml:lang="no"]//beta[not(following-sibling::*)]/lambda[@object][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::tau[@xml:id="id3"][not(child::node())][following-sibling::gamma[@insert="100%"][@xml:lang="nb"][not(child::node())][following-sibling::nu[@insert][@xml:id="id4"][preceding-sibling::*[position() = 4]][following-sibling::phi[starts-with(@token,"1234")][not(following-sibling::*)]][position() = 1]]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <psi> + <epsilon att="this-is-att-value" xml:lang="no"> + <zeta object="this-is-att-value"/> + <delta/> + <pi number="content" xml:lang="nb" xml:id="id1"/> + <eta delete="this-is-att-value" xml:lang="no"> + <beta> + <lambda object="attribute value" xml:lang="no"/> + <iota xml:lang="en-GB" xml:id="id2"/> + <tau xml:id="id3"/> + <gamma insert="100%" xml:lang="nb"/> + <nu insert="solid 1px green" xml:id="id4"/> + <phi token="123456789"> + <green>This text must be green</green> + </phi> + </beta> + </eta> + </epsilon> + </psi> + </tree> + </test> + <test> + <xpath>//alpha[@delete]//alpha[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)]//omega[@string][@xml:id="id2"][not(following-sibling::*)]/rho[starts-with(concat(@delete,"-"),"true-")][@xml:id="id3"]//chi[contains(@token,"tribu")][@xml:lang="nb"][@xml:id="id4"]//iota[@insert="true"][@xml:id="id5"][not(preceding-sibling::*)]//chi[@attrib="solid 1px green"][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@and][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@xml:lang="no-nb"][not(preceding-sibling::*)]//zeta[not(following-sibling::*)]/kappa[@content][not(preceding-sibling::*)]//rho[starts-with(concat(@object,"-"),"_blank-")][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:lang="no"][@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[starts-with(@desciption,"this.nodeV")][@xml:id="id7"][not(following-sibling::*)]/theta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:id="id8"]]][position() = 1]]</xpath> + <tree> + <alpha delete="attribute-value"> + <alpha xml:lang="no-nb" xml:id="id1"> + <omega string="_blank" xml:id="id2"> + <rho delete="true" xml:id="id3"> + <chi token="attribute-value" xml:lang="nb" xml:id="id4"> + <iota insert="true" xml:id="id5"> + <chi attrib="solid 1px green" xml:lang="en-US"> + <xi and="content"> + <kappa xml:lang="no-nb"> + <zeta> + <kappa content="attribute"> + <rho object="_blank"> + <eta xml:lang="no" xml:id="id6"/> + <omicron desciption="this.nodeValue" xml:id="id7"> + <theta xml:lang="no"/> + <omicron xml:lang="nb"/> + <phi xml:id="id8"> + <green>This text must be green</green> + </phi> + </omicron> + </rho> + </kappa> + </zeta> + </kappa> + </xi> + </chi> + </iota> + </chi> + </rho> + </omega> + </alpha> + </alpha> + </tree> + </test> + <test> + <xpath>//gamma[@xml:id="id1"]/upsilon[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[@xml:lang="no-nb"][not(following-sibling::*)]/delta[contains(concat(@attrib,"$"),"%$")][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id4"]//sigma[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][position() = 1]]</xpath> + <tree> + <gamma xml:id="id1"> + <upsilon xml:id="id2"> + <gamma xml:lang="no-nb"> + <delta attrib="100%" xml:id="id3"/> + <iota xml:id="id4"> + <sigma xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </sigma> + </iota> + </gamma> + </upsilon> + </gamma> + </tree> + </test> + <test> + <xpath>//delta[starts-with(concat(@and,"-"),"another attribute value-")]/*[@attr][@xml:lang="en-US"][following-sibling::*[position()=2]][following-sibling::xi[contains(concat(@false,"$"),"k$")][@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/gamma[@xml:id="id3"]//zeta[starts-with(@title,"solid 1px gree")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]/rho[starts-with(@name,"1")][@xml:id="id5"][not(child::node())][following-sibling::rho[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[starts-with(@string,"a")][not(following-sibling::*)]//chi[starts-with(@class,"f")][following-sibling::kappa[@object][@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[@xml:lang="en-GB"][not(following-sibling::*)][not(preceding-sibling::epsilon)]//mu[@abort]//theta[starts-with(@class,"solid ")][@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@and][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[starts-with(@attribute,"this")][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::delta[starts-with(concat(@class,"-"),"_blank-")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//omicron[@xml:id="id11"][following-sibling::mu[starts-with(concat(@and,"-"),"100%-")][@xml:lang="en-US"]//theta[@string][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta and="another attribute value"> + <any attr="attribute" xml:lang="en-US"/> + <xi false="_blank" xml:lang="en-US" xml:id="id1"/> + <delta xml:id="id2"> + <gamma xml:id="id3"> + <zeta title="solid 1px green" xml:lang="en" xml:id="id4"> + <rho name="100%" xml:id="id5"/> + <rho xml:id="id6"> + <phi string="attribute-value"> + <chi class="false"/> + <kappa object="attribute-value" xml:lang="nb" xml:id="id7"> + <epsilon xml:lang="en-GB"> + <mu abort="solid 1px green"> + <theta class="solid 1px green" xml:lang="no" xml:id="id8"> + <delta xml:lang="en-US"> + <psi and="attribute-value" xml:id="id9"> + <chi attribute="this.nodeValue" xml:id="id10"/> + <delta class="_blank" xml:lang="en-GB"> + <omicron xml:id="id11"/> + <mu and="100%" xml:lang="en-US"> + <theta string="100%"> + <green>This text must be green</green> + </theta> + </mu> + </delta> + </psi> + </delta> + </theta> + </mu> + </epsilon> + </kappa> + </phi> + </rho> + </zeta> + </gamma> + </delta> + </delta> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="nb"]/beta[contains(concat(@delete,"$")," value$")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[contains(@attrib,"e")][@xml:lang="nb"][@xml:id="id2"][following-sibling::*[starts-with(concat(@true,"-"),"123456789-")][@xml:lang="no-nb"][@xml:id="id3"]/sigma[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::theta[contains(@abort,"56789")][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[@xml:lang="en"][@xml:id="id6"][not(child::node())][following-sibling::psi//eta[contains(concat(@abort,"$"),"e value$")][@xml:lang="no"][not(following-sibling::*)]//sigma[not(preceding-sibling::*)]/omega[@xml:lang="no"]/epsilon[@attrib][@xml:id="id7"][following-sibling::zeta[@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@or="another attribute value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/phi[starts-with(@true,"co")][@xml:lang="no-nb"][@xml:id="id8"][not(following-sibling::*)]/omega[contains(@object,"n")][@xml:lang="en"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="nb"> + <beta delete="attribute value" xml:id="id1"/> + <omega attrib="attribute value" xml:lang="nb" xml:id="id2"/> + <any true="123456789" xml:lang="no-nb" xml:id="id3"> + <sigma xml:lang="en-US" xml:id="id4"/> + <theta abort="123456789" xml:lang="en-GB" xml:id="id5"/> + <psi xml:lang="en" xml:id="id6"/> + <psi> + <eta abort="another attribute value" xml:lang="no"> + <sigma> + <omega xml:lang="no"> + <epsilon attrib="attribute-value" xml:id="id7"/> + <zeta xml:lang="nb"/> + <alpha or="another attribute value"> + <phi true="content" xml:lang="no-nb" xml:id="id8"> + <omega object="content" xml:lang="en"> + <green>This text must be green</green> + </omega> + </phi> + </alpha> + </omega> + </sigma> + </eta> + </psi> + </any> + </upsilon> + </tree> + </test> + <test> + <xpath>//psi[contains(@attr,"lue")][@xml:lang="no-nb"][@xml:id="id1"]//epsilon[@att="content"][@xml:lang="en"][following-sibling::beta[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@delete][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::kappa[following-sibling::omega[@xml:lang="en-GB"]]]]</xpath> + <tree> + <psi attr="this-is-att-value" xml:lang="no-nb" xml:id="id1"> + <epsilon att="content" xml:lang="en"/> + <beta xml:lang="en"> + <kappa delete="100%" xml:id="id2"/> + <kappa/> + <omega xml:lang="en-GB"> + <green>This text must be green</green> + </omega> + </beta> + </psi> + </tree> + </test> + <test> + <xpath>//chi[starts-with(@abort,"_")][@xml:lang="no-nb"]//omega/theta[@xml:id="id1"][following-sibling::pi[@xml:lang="nb"][following-sibling::*[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::iota[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/xi[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@name="false"][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)]//psi[starts-with(@true,"attribut")][@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::xi[@xml:id="id7"][preceding-sibling::*[position() = 1]]/kappa[@token="another attribute value"][@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]/gamma[@number][not(following-sibling::*)][not(following-sibling::gamma)]//theta[@xml:lang="en-GB"][@xml:id="id9"][not(child::node())][following-sibling::theta[@desciption][@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[contains(concat(@att,"$"),"ue$")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi abort="_blank" xml:lang="no-nb"> + <omega> + <theta xml:id="id1"/> + <pi xml:lang="nb"/> + <any xml:lang="en-US" xml:id="id2"/> + <iota xml:lang="en" xml:id="id3"> + <xi xml:lang="en-US" xml:id="id4"> + <lambda name="false" xml:lang="no" xml:id="id5"> + <psi true="attribute" xml:lang="nb" xml:id="id6"/> + <xi xml:id="id7"> + <kappa token="another attribute value" xml:lang="en-GB" xml:id="id8"> + <gamma number="another attribute value"> + <theta xml:lang="en-GB" xml:id="id9"/> + <theta desciption="this-is-att-value" xml:lang="en" xml:id="id10"/> + <tau att="this.nodeValue" xml:lang="en-US"> + <green>This text must be green</green> + </tau> + </gamma> + </kappa> + </xi> + </lambda> + </xi> + </iota> + </omega> + </chi> + </tree> + </test> + <test> + <xpath>//psi[@xml:id="id1"]//zeta[@xml:lang="en-GB"][following-sibling::lambda[@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::kappa[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//gamma[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]//zeta[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[starts-with(@or,"thi")][following-sibling::*[position()=3]][not(child::node())][following-sibling::lambda[contains(concat(@attrib,"$"),"attribute value$")][@xml:lang="en-US"][not(child::node())][following-sibling::omicron[starts-with(concat(@attrib,"-"),"true-")][@xml:lang="en-GB"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[starts-with(@attrib,"this-is-at")][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 3]]/pi[contains(concat(@attribute,"$"),"attribute value$")][@xml:id="id7"]/omicron[@false][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[@xml:lang="en-US"][@xml:id="id8"][not(following-sibling::*)]//rho[@xml:id="id9"][not(preceding-sibling::*)]/iota[@true="solid 1px green"][@xml:id="id10"][not(following-sibling::*)]//gamma[@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@number][not(following-sibling::*)]/kappa[following-sibling::*[position()=3]][following-sibling::xi[preceding-sibling::*[position() = 1]][following-sibling::xi[contains(@class,"ank")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][preceding-sibling::xi[1]][following-sibling::pi[contains(@content,"solid")][@xml:id="id12"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <psi xml:id="id1"> + <zeta xml:lang="en-GB"/> + <lambda xml:lang="no" xml:id="id2"/> + <kappa xml:id="id3"> + <gamma xml:lang="no-nb" xml:id="id4"> + <zeta xml:lang="nb" xml:id="id5"> + <gamma xml:lang="en"> + <theta or="this.nodeValue"/> + <lambda attrib="attribute value" xml:lang="en-US"/> + <omicron attrib="true" xml:lang="en-GB"/> + <eta attrib="this-is-att-value" xml:lang="no" xml:id="id6"> + <pi attribute="another attribute value" xml:id="id7"> + <omicron false="solid 1px green" xml:lang="nb"/> + <any xml:lang="en-US" xml:id="id8"> + <rho xml:id="id9"> + <iota true="solid 1px green" xml:id="id10"> + <gamma xml:id="id11"> + <lambda number="another attribute value"> + <kappa/> + <xi/> + <xi class="_blank" xml:lang="no-nb"/> + <pi content="solid 1px green" xml:id="id12"> + <green>This text must be green</green> + </pi> + </lambda> + </gamma> + </iota> + </rho> + </any> + </pi> + </eta> + </gamma> + </zeta> + </gamma> + </kappa> + </psi> + </tree> + </test> + <test> + <xpath>//theta[@xml:id="id1"]//nu[@xml:lang="no"][not(following-sibling::*)]/psi[starts-with(concat(@class,"-"),"solid 1px green-")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[@attribute="attribute"][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//gamma[@xml:lang="en-GB"]//alpha/zeta[@class][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[contains(@attrib,"ont")][not(preceding-sibling::*)]//psi[@attrib][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::chi[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/pi[contains(@attribute,"id 1px g")][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]]//epsilon[starts-with(@number,"attri")][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@xml:lang="en-US"][@xml:id="id8"][following-sibling::*[position()=2]][following-sibling::epsilon[contains(concat(@attrib,"$"),"te value$")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id9"][not(following-sibling::*)]/eta[@xml:id="id10"][not(preceding-sibling::*)][following-sibling::upsilon[contains(concat(@true,"$"),"true$")][@xml:id="id11"][not(child::node())][following-sibling::pi[@xml:id="id12"][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[not(following-sibling::*)]//omicron[@xml:id="id13"][following-sibling::gamma[@xml:lang="en-GB"][following-sibling::theta[@xml:id="id14"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <theta xml:id="id1"> + <nu xml:lang="no"> + <psi class="solid 1px green" xml:lang="no" xml:id="id2"/> + <delta attribute="attribute" xml:lang="no" xml:id="id3"> + <gamma xml:lang="en-GB"> + <alpha> + <zeta class="content" xml:lang="en-GB" xml:id="id4"> + <theta attrib="content"> + <psi attrib="false" xml:lang="no-nb"/> + <chi xml:id="id5"> + <pi attribute="solid 1px green"/> + <kappa xml:lang="en-GB" xml:id="id6"> + <epsilon number="attribute-value" xml:id="id7"> + <pi xml:lang="en-US" xml:id="id8"/> + <epsilon attrib="another attribute value" xml:lang="nb"/> + <pi xml:lang="no-nb" xml:id="id9"> + <eta xml:id="id10"/> + <upsilon true="true" xml:id="id11"/> + <pi xml:id="id12"/> + <delta> + <omicron xml:id="id13"/> + <gamma xml:lang="en-GB"/> + <theta xml:id="id14"> + <green>This text must be green</green> + </theta> + </delta> + </pi> + </epsilon> + </kappa> + </chi> + </theta> + </zeta> + </alpha> + </gamma> + </delta> + </nu> + </theta> + </tree> + </test> + <test> + <xpath>//phi/*[@xml:lang="nb"][@xml:id="id1"][following-sibling::lambda[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::psi[@xml:lang="nb"][@xml:id="id3"]/phi[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::beta[@object="true"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[following-sibling::*[position()=1]][not(preceding-sibling::xi)][following-sibling::lambda[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@title][@xml:id="id7"][not(preceding-sibling::*)]//sigma[@xml:lang="no"][@xml:id="id8"][not(following-sibling::*)]//theta[@xml:id="id9"][following-sibling::mu[@xml:lang="no-nb"][@xml:id="id10"]//alpha[@xml:id="id11"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id12"][following-sibling::phi[starts-with(concat(@class,"-"),"another attribute value-")][position() = 1]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <phi> + <any xml:lang="nb" xml:id="id1"/> + <lambda xml:lang="no-nb" xml:id="id2"/> + <psi xml:lang="nb" xml:id="id3"> + <phi xml:id="id4"/> + <beta object="true" xml:id="id5"> + <xi/> + <lambda xml:id="id6"> + <xi title="false" xml:id="id7"> + <sigma xml:lang="no" xml:id="id8"> + <theta xml:id="id9"/> + <mu xml:lang="no-nb" xml:id="id10"> + <alpha xml:id="id11"/> + <epsilon xml:id="id12"/> + <phi class="another attribute value"> + <green>This text must be green</green> + </phi> + </mu> + </sigma> + </xi> + </lambda> + </beta> + </psi> + </phi> + </tree> + </test> + <test> + <xpath>//lambda[starts-with(concat(@name,"-"),"attribute value-")][@xml:id="id1"]//rho[contains(concat(@attrib,"$"),"se$")][@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]//upsilon[@xml:id="id3"][not(child::node())][following-sibling::sigma[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id4"]/beta[not(preceding-sibling::*)]/tau[@xml:lang="en-GB"][not(preceding-sibling::*)]/upsilon[@xml:id="id5"][following-sibling::*[position()=2]][following-sibling::kappa[starts-with(concat(@attr,"-"),"this-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/lambda[contains(concat(@class,"$"),"e$")][@xml:id="id6"][not(preceding-sibling::*)]//upsilon[@or][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(concat(@title,"-"),"100%-")][@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)]/eta[@xml:lang="no"][following-sibling::psi[starts-with(concat(@data,"-"),"false-")][@xml:id="id8"][not(child::node())][following-sibling::*[starts-with(@content,"12345")][@xml:id="id9"][not(following-sibling::*)]/xi[contains(@src,"e")][@xml:lang="nb"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::sigma[@src][@xml:lang="en-US"][@xml:id="id11"][not(following-sibling::*)]//alpha[starts-with(@name,"att")][@xml:lang="nb"][@xml:id="id12"][following-sibling::mu[@xml:id="id13"]/eta[@xml:lang="no-nb"][@xml:id="id14"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <lambda name="attribute value" xml:id="id1"> + <rho attrib="false" xml:lang="en-US" xml:id="id2"> + <upsilon xml:id="id3"/> + <sigma xml:lang="no"/> + <phi xml:lang="no-nb" xml:id="id4"> + <beta> + <tau xml:lang="en-GB"> + <upsilon xml:id="id5"/> + <kappa attr="this-is-att-value" xml:lang="en"/> + <nu xml:lang="nb"> + <lambda class="false" xml:id="id6"> + <upsilon or="attribute"> + <beta title="100%" xml:lang="en-US" xml:id="id7"> + <eta xml:lang="no"/> + <psi data="false" xml:id="id8"/> + <any content="123456789" xml:id="id9"> + <xi src="false" xml:lang="nb" xml:id="id10"/> + <sigma src="attribute-value" xml:lang="en-US" xml:id="id11"> + <alpha name="attribute value" xml:lang="nb" xml:id="id12"/> + <mu xml:id="id13"> + <eta xml:lang="no-nb" xml:id="id14"> + <green>This text must be green</green> + </eta> + </mu> + </sigma> + </any> + </beta> + </upsilon> + </lambda> + </nu> + </tau> + </beta> + </phi> + </rho> + </lambda> + </tree> + </test> + <test> + <xpath>//gamma[starts-with(@name,"attribu")][@xml:lang="nb"]//delta[starts-with(@src,"another attribu")][not(preceding-sibling::*)][not(following-sibling::*)]/xi[following-sibling::chi[starts-with(concat(@insert,"-"),"attribute-")][@xml:id="id1"][not(child::node())][following-sibling::nu[@attribute="attribute-value"][@xml:lang="no"][not(following-sibling::*)]/zeta[@insert][@xml:lang="no-nb"][not(following-sibling::*)]/eta[not(child::node())][following-sibling::phi[@or="content"][@xml:lang="en-GB"][@xml:id="id2"][following-sibling::lambda[contains(@number,"bute value")][preceding-sibling::*[position() = 2]]/epsilon[starts-with(@and,"solid 1px g")][not(preceding-sibling::*)][following-sibling::iota[contains(concat(@string,"$"),"%$")][@xml:lang="no-nb"]][position() = 1]]]]]</xpath> + <tree> + <gamma name="attribute" xml:lang="nb"> + <delta src="another attribute value"> + <xi/> + <chi insert="attribute" xml:id="id1"/> + <nu attribute="attribute-value" xml:lang="no"> + <zeta insert="content" xml:lang="no-nb"> + <eta/> + <phi or="content" xml:lang="en-GB" xml:id="id2"/> + <lambda number="attribute value"> + <epsilon and="solid 1px green"/> + <iota string="100%" xml:lang="no-nb"> + <green>This text must be green</green> + </iota> + </lambda> + </zeta> + </nu> + </delta> + </gamma> + </tree> + </test> + <test> + <xpath>//iota/kappa[@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::lambda[@xml:id="id2"][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::*[@xml:id="id3"][preceding-sibling::*[position() = 3]]/kappa[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)]//phi[contains(concat(@class,"$"),"another attribute value$")][@xml:lang="en"][not(preceding-sibling::*)]//sigma[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <iota> + <kappa xml:lang="en-GB" xml:id="id1"/> + <lambda xml:id="id2"/> + <delta xml:lang="en-GB"/> + <any xml:id="id3"> + <kappa xml:lang="nb" xml:id="id4"> + <phi class="another attribute value" xml:lang="en"> + <sigma xml:lang="en-GB"> + <green>This text must be green</green> + </sigma> + </phi> + </kappa> + </any> + </iota> + </tree> + </test> + <test> + <xpath>//rho[starts-with(@src,"fals")][@xml:id="id1"]//nu[starts-with(concat(@att,"-"),"_blank-")][@xml:lang="no"][not(following-sibling::*)]/gamma[@token][not(preceding-sibling::*)][following-sibling::zeta[contains(concat(@attr,"$"),"value$")][preceding-sibling::*[position() = 1]][not(following-sibling::zeta)]/nu[@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//alpha[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[not(child::node())][following-sibling::kappa[contains(@true,"Value")][@xml:lang="no"][@xml:id="id4"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <rho src="false" xml:id="id1"> + <nu att="_blank" xml:lang="no"> + <gamma token="123456789"/> + <zeta attr="attribute value"> + <nu xml:lang="en-GB" xml:id="id2"/> + <psi> + <alpha xml:lang="no"/> + <tau xml:lang="nb" xml:id="id3"> + <iota/> + <kappa true="this.nodeValue" xml:lang="no" xml:id="id4"> + <green>This text must be green</green> + </kappa> + </tau> + </psi> + </zeta> + </nu> + </rho> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@false,"$"),"this.nodeValue$")]//epsilon[contains(concat(@string,"$"),"123456789$")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[starts-with(concat(@true,"-"),"true-")][not(child::node())][following-sibling::mu[not(following-sibling::*)]//pi[@true="_blank"][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::omicron//iota[@abort="content"][@xml:lang="no-nb"]/chi[@xml:lang="no-nb"][not(child::node())][following-sibling::theta[@and][@xml:lang="no"][not(preceding-sibling::theta)]/chi[@xml:lang="en"][not(following-sibling::*)]//chi[@xml:lang="en-GB"][@xml:id="id4"][following-sibling::sigma[@xml:id="id5"]/eta[@xml:lang="en"][not(following-sibling::*)]/chi[@attr][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::epsilon[@class][@xml:id="id7"][following-sibling::phi[contains(concat(@number,"$"),"se$")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/eta[@xml:lang="en-US"][@xml:id="id8"][not(preceding-sibling::*)]//zeta[contains(concat(@src,"$"),"ribute$")][@xml:lang="en-US"][not(preceding-sibling::*)]//iota[@name][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[starts-with(@attrib,"1234")][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@false][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(preceding-sibling::mu)]/iota[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta false="this.nodeValue"> + <epsilon string="123456789" xml:id="id1"/> + <theta true="true"/> + <mu> + <pi true="_blank" xml:id="id2"/> + <mu xml:id="id3"/> + <omicron> + <iota abort="content" xml:lang="no-nb"> + <chi xml:lang="no-nb"/> + <theta and="this.nodeValue" xml:lang="no"> + <chi xml:lang="en"> + <chi xml:lang="en-GB" xml:id="id4"/> + <sigma xml:id="id5"> + <eta xml:lang="en"> + <chi attr="this.nodeValue" xml:lang="en-GB" xml:id="id6"/> + <epsilon class="solid 1px green" xml:id="id7"/> + <phi number="false"> + <eta xml:lang="en-US" xml:id="id8"> + <zeta src="attribute" xml:lang="en-US"> + <iota name="attribute value"/> + <chi attrib="123456789" xml:lang="no"/> + <mu false="this.nodeValue" xml:id="id9"> + <iota xml:lang="nb"> + <green>This text must be green</green> + </iota> + </mu> + </zeta> + </eta> + </phi> + </eta> + </sigma> + </chi> + </theta> + </iota> + </omicron> + </mu> + </beta> + </tree> + </test> + <test> + <xpath>//gamma[@abort="123456789"][@xml:lang="nb"][@xml:id="id1"]/kappa[starts-with(@name,"so")][@xml:id="id2"]/mu[@name][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:lang="en-US"][following-sibling::psi[contains(concat(@number,"$"),"ue$")][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::lambda[@string="_blank"][@xml:lang="nb"][preceding-sibling::*[position() = 3]][following-sibling::alpha[preceding-sibling::*[position() = 4]][not(following-sibling::*)]//delta[contains(concat(@abort,"$"),"t$")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[@false][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=7]][not(child::node())][following-sibling::upsilon[contains(@content,"nt")][@xml:lang="no-nb"][not(child::node())][following-sibling::pi[contains(@src,"e")][@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=5]][following-sibling::sigma[contains(concat(@number,"$"),"value$")][@xml:lang="en-GB"][following-sibling::kappa[@token][following-sibling::kappa[contains(concat(@true,"$"),"content$")][@xml:lang="en-US"][following-sibling::kappa[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][preceding-sibling::*[position() = 7]][following-sibling::*[position()=1]][following-sibling::kappa[starts-with(@src,"attribute value")][@xml:id="id6"][preceding-sibling::*[position() = 8]][not(following-sibling::*)]/pi[@token][@xml:id="id7"][not(preceding-sibling::*)]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <gamma abort="123456789" xml:lang="nb" xml:id="id1"> + <kappa name="solid 1px green" xml:id="id2"> + <mu name="_blank" xml:lang="no-nb"/> + <kappa xml:lang="en-US"/> + <psi number="this.nodeValue" xml:id="id3"/> + <lambda string="_blank" xml:lang="nb"/> + <alpha> + <delta abort="content" xml:lang="no" xml:id="id4"/> + <any false="_blank" xml:lang="no-nb"/> + <upsilon content="content" xml:lang="no-nb"/> + <pi src="another attribute value" xml:lang="no" xml:id="id5"/> + <sigma number="attribute value" xml:lang="en-GB"/> + <kappa token="123456789"/> + <kappa true="content" xml:lang="en-US"/> + <tau xml:lang="no-nb"/> + <kappa src="attribute value" xml:id="id6"> + <pi token="_blank" xml:id="id7"> + <green>This text must be green</green> + </pi> + </kappa> + </alpha> + </kappa> + </gamma> + </tree> + </test> + <test> + <xpath>//tau[@xml:id="id1"]//gamma[not(preceding-sibling::*)]/alpha[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[contains(@title,"nk")][@xml:lang="no"]//psi[@xml:lang="no-nb"][@xml:id="id2"]//zeta[contains(@att,"ank")][@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@attr="123456789"][@xml:id="id4"][following-sibling::xi[contains(concat(@false,"$"),"_blank$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <tau xml:id="id1"> + <gamma> + <alpha/> + <phi title="_blank" xml:lang="no"> + <psi xml:lang="no-nb" xml:id="id2"> + <zeta att="_blank" xml:lang="nb" xml:id="id3"> + <kappa attr="123456789" xml:id="id4"/> + <xi false="_blank"> + <green>This text must be green</green> + </xi> + </zeta> + </psi> + </phi> + </gamma> + </tau> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="en-US"]/gamma[@attribute][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@attribute="content"][@xml:id="id2"]/upsilon[starts-with(concat(@desciption,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id3"][following-sibling::theta[@desciption="true"][@xml:lang="en-GB"][@xml:id="id4"][following-sibling::*[position()=3]][following-sibling::omicron[@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::xi[@attribute][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::psi[preceding-sibling::*[position() = 4]]/pi//psi[@name][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@xml:id="id7"]//mu[@attr][@xml:lang="en-US"][@xml:id="id8"][following-sibling::mu[@xml:lang="nb"][@xml:id="id9"][not(child::node())][following-sibling::kappa[@xml:lang="no"][@xml:id="id10"]]]]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <chi xml:lang="en-US"> + <gamma attribute="100%"/> + <omicron xml:lang="en-GB" xml:id="id1"/> + <theta attribute="content" xml:id="id2"> + <upsilon desciption="attribute" xml:lang="en-US" xml:id="id3"/> + <theta desciption="true" xml:lang="en-GB" xml:id="id4"/> + <omicron xml:lang="no" xml:id="id5"/> + <xi attribute="attribute" xml:id="id6"/> + <psi> + <pi> + <psi name="true"/> + <zeta xml:lang="en-US"> + <beta xml:id="id7"> + <mu attr="attribute" xml:lang="en-US" xml:id="id8"/> + <mu xml:lang="nb" xml:id="id9"/> + <kappa xml:lang="no" xml:id="id10"> + <green>This text must be green</green> + </kappa> + </beta> + </zeta> + </pi> + </psi> + </theta> + </chi> + </tree> + </test> + <test> + <xpath>//zeta[@token][@xml:id="id1"]/omega[@xml:lang="no-nb"][@xml:id="id2"]/nu[contains(@insert,"gre")][@xml:lang="no"][@xml:id="id3"]/upsilon[not(preceding-sibling::*)]/iota[@desciption][@xml:id="id4"]/alpha[@content][@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[@attrib][@xml:id="id6"][not(child::node())][following-sibling::xi[starts-with(@attr,"content")][@xml:lang="en"][@xml:id="id7"][following-sibling::iota[preceding-sibling::*[position() = 3]][not(following-sibling::*)]//pi[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::zeta[@true][@xml:lang="en-GB"][@xml:id="id9"][following-sibling::*[position()=2]][following-sibling::psi[@content][@xml:lang="no-nb"][not(child::node())][following-sibling::*[@xml:id="id10"][not(following-sibling::*)][not(following-sibling::any)]/alpha[@xml:lang="en-US"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[starts-with(concat(@content,"-"),"this.nodeValue-")][@xml:id="id12"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta token="attribute-value" xml:id="id1"> + <omega xml:lang="no-nb" xml:id="id2"> + <nu insert="solid 1px green" xml:lang="no" xml:id="id3"> + <upsilon> + <iota desciption="solid 1px green" xml:id="id4"> + <alpha content="false" xml:lang="en-US" xml:id="id5"/> + <any attrib="another attribute value" xml:id="id6"/> + <xi attr="content" xml:lang="en" xml:id="id7"/> + <iota> + <pi xml:lang="en" xml:id="id8"/> + <zeta true="attribute" xml:lang="en-GB" xml:id="id9"/> + <psi content="false" xml:lang="no-nb"/> + <any xml:id="id10"> + <alpha xml:lang="en-US" xml:id="id11"> + <epsilon content="this.nodeValue" xml:id="id12"> + <green>This text must be green</green> + </epsilon> + </alpha> + </any> + </iota> + </iota> + </upsilon> + </nu> + </omega> + </zeta> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]/pi[@xml:lang="no"][@xml:id="id2"]//nu[@xml:lang="en"][not(child::node())][following-sibling::tau[contains(@name,"e value")][@xml:lang="en"][@xml:id="id3"][following-sibling::zeta[@desciption="this-is-att-value"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::tau[@xml:id="id5"][not(following-sibling::*)]//*[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@and][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[contains(concat(@true,"$"),"ibute$")][@xml:lang="en"][@xml:id="id8"][not(following-sibling::*)]/chi[@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::upsilon[starts-with(concat(@attrib,"-"),"_blank-")][@xml:lang="no-nb"][@xml:id="id10"][not(child::node())][following-sibling::tau[@object][preceding-sibling::*[position() = 2]]//mu[@token="this-is-att-value"][@xml:id="id11"][not(child::node())][following-sibling::*[@name="false"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@xml:lang="en"][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][following-sibling::phi[starts-with(@token,"this-is-att-valu")][@xml:lang="no"][@xml:id="id12"][not(following-sibling::*)]//tau[@data="attribute value"][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::delta[starts-with(concat(@delete,"-"),"another attribute value-")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::epsilon[@xml:lang="nb"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <xi xml:id="id1"> + <pi xml:lang="no" xml:id="id2"> + <nu xml:lang="en"/> + <tau name="attribute value" xml:lang="en" xml:id="id3"/> + <zeta desciption="this-is-att-value" xml:id="id4"/> + <tau xml:id="id5"> + <any xml:id="id6"> + <eta xml:lang="en-GB"> + <chi and="this-is-att-value" xml:id="id7"/> + <any true="attribute" xml:lang="en" xml:id="id8"> + <chi xml:id="id9"/> + <upsilon attrib="_blank" xml:lang="no-nb" xml:id="id10"/> + <tau object="solid 1px green"> + <mu token="this-is-att-value" xml:id="id11"/> + <any name="false"/> + <alpha xml:lang="en"/> + <iota/> + <sigma xml:lang="no-nb"/> + <phi token="this-is-att-value" xml:lang="no" xml:id="id12"> + <tau data="attribute value" xml:lang="no-nb"/> + <delta delete="another attribute value"/> + <epsilon xml:lang="nb"> + <green>This text must be green</green> + </epsilon> + </phi> + </tau> + </any> + </eta> + </any> + </tau> + </pi> + </xi> + </tree> + </test> + <test> + <xpath>//mu[starts-with(concat(@content,"-"),"123456789-")][@xml:id="id1"]/tau[@desciption="attribute"][@xml:lang="en"][@xml:id="id2"]/zeta[contains(@abort,"89")][@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::xi[starts-with(@src,"12345")][@xml:lang="no-nb"][following-sibling::rho[starts-with(@class,"true")][@xml:id="id4"][preceding-sibling::*[position() = 2]]//epsilon[@abort][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::sigma[contains(@object,"0%")][@xml:id="id5"]/tau[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/zeta[not(preceding-sibling::*)][not(following-sibling::*)]//iota[not(following-sibling::*)]/iota[@xml:lang="nb"][not(child::node())][following-sibling::pi[not(child::node())][following-sibling::alpha[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::pi[@string="true"][@xml:lang="nb"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]/pi[contains(concat(@abort,"$"),"9$")][following-sibling::*[position()=2]][following-sibling::zeta[@xml:lang="nb"][following-sibling::iota//upsilon[@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]//nu[contains(concat(@src,"$"),"solid 1px green$")][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(@string,"00%")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <mu content="123456789" xml:id="id1"> + <tau desciption="attribute" xml:lang="en" xml:id="id2"> + <zeta abort="123456789" xml:lang="en-GB" xml:id="id3"/> + <xi src="123456789" xml:lang="no-nb"/> + <rho class="true" xml:id="id4"> + <epsilon abort="attribute" xml:lang="en"/> + <sigma object="100%" xml:id="id5"> + <tau/> + <lambda xml:lang="en-GB" xml:id="id6"> + <zeta> + <iota> + <iota xml:lang="nb"/> + <pi/> + <alpha xml:lang="en"/> + <pi string="true" xml:lang="nb" xml:id="id7"/> + <tau xml:lang="en-GB" xml:id="id8"> + <pi abort="123456789"/> + <zeta xml:lang="nb"/> + <iota> + <upsilon xml:id="id9"/> + <any xml:lang="no-nb"> + <nu src="solid 1px green"/> + <mu string="100%" xml:lang="en"> + <green>This text must be green</green> + </mu> + </any> + </iota> + </tau> + </iota> + </zeta> + </lambda> + </sigma> + </rho> + </tau> + </mu> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en"][@xml:id="id1"]/rho[contains(concat(@true,"$"),"_blank$")][@xml:lang="nb"][not(preceding-sibling::*)]/omicron[contains(concat(@false,"$"),"tribute value$")][@xml:id="id2"][not(child::node())][following-sibling::chi[@number="solid 1px green"][not(following-sibling::*)]/omicron[not(preceding-sibling::*)][not(following-sibling::*)]//beta[@att="_blank"][@xml:lang="nb"][@xml:id="id3"]//omega[@xml:lang="no-nb"][following-sibling::chi[not(following-sibling::*)]//epsilon[@xml:lang="en-GB"][not(child::node())][following-sibling::nu[@desciption="this.nodeValue"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:lang="en-US"][preceding-sibling::*[position() = 2]]/mu[starts-with(concat(@object,"-"),"solid 1px green-")][@xml:lang="en-US"][not(following-sibling::*)][not(preceding-sibling::mu)]/chi[@abort="true"][@xml:lang="en"][@xml:id="id5"][not(child::node())][following-sibling::iota[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/gamma[@attribute="100%"]/omicron[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[@number="100%"][@xml:lang="en-US"][@xml:id="id8"][following-sibling::beta[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::tau[preceding-sibling::*[position() = 2]]//delta[@xml:id="id10"][not(child::node())][following-sibling::omicron[contains(concat(@object,"$"),"ttribute$")][@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//iota[contains(@title,"s")][@xml:id="id12"][not(following-sibling::*)]//xi[starts-with(concat(@desciption,"-"),"this-")][not(following-sibling::*)]//nu[@xml:lang="en"]][position() = 1]][position() = 1]]]]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="en" xml:id="id1"> + <rho true="_blank" xml:lang="nb"> + <omicron false="attribute value" xml:id="id2"/> + <chi number="solid 1px green"> + <omicron> + <beta att="_blank" xml:lang="nb" xml:id="id3"> + <omega xml:lang="no-nb"/> + <chi> + <epsilon xml:lang="en-GB"/> + <nu desciption="this.nodeValue" xml:id="id4"/> + <tau xml:lang="en-US"> + <mu object="solid 1px green" xml:lang="en-US"> + <chi abort="true" xml:lang="en" xml:id="id5"/> + <iota xml:id="id6"> + <gamma attribute="100%"> + <omicron xml:lang="en-US" xml:id="id7"> + <omicron number="100%" xml:lang="en-US" xml:id="id8"/> + <beta xml:id="id9"/> + <tau> + <delta xml:id="id10"/> + <omicron object="attribute" xml:lang="no" xml:id="id11"> + <iota title="false" xml:id="id12"> + <xi desciption="this-is-att-value"> + <nu xml:lang="en"> + <green>This text must be green</green> + </nu> + </xi> + </iota> + </omicron> + </tau> + </omicron> + </gamma> + </iota> + </mu> + </tau> + </chi> + </beta> + </omicron> + </chi> + </rho> + </phi> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]//psi[@attrib][not(following-sibling::*)]//mu[@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(concat(@name,"$"),"ntent$")][@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]//pi[@or]//iota[@true][@xml:lang="en"][not(child::node())][following-sibling::xi[@abort][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[contains(@false,"ibute-va")][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:id="id4"]//alpha[not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="no-nb"]//pi[@false="this.nodeValue"][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)]/sigma[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::eta[@attr="attribute value"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[not(child::node())][following-sibling::rho[@xml:id="id6"][not(following-sibling::*)]/omega[starts-with(concat(@false,"-"),"attribute value-")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[starts-with(@true,"this.no")]/rho[starts-with(@att,"_")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[contains(@object,"blan")][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[contains(@false,"reen")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[contains(concat(@title,"$"),"1px green$")][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi xml:id="id1"> + <psi attrib="true"> + <mu xml:id="id2"/> + <mu name="content" xml:lang="nb" xml:id="id3"> + <pi or="content"> + <iota true="another attribute value" xml:lang="en"/> + <xi abort="100%" xml:lang="en"> + <xi false="attribute-value"> + <iota xml:id="id4"> + <alpha/> + <upsilon xml:lang="no-nb"> + <pi false="this.nodeValue" xml:lang="en-GB" xml:id="id5"> + <sigma xml:lang="nb"/> + <eta attr="attribute value"/> + <rho/> + <rho xml:id="id6"> + <omega false="attribute value" xml:lang="en-US"/> + <pi true="this.nodeValue"> + <rho att="_blank" xml:lang="no"/> + <nu xml:id="id7"> + <nu object="_blank"/> + <rho false="solid 1px green"> + <xi title="solid 1px green"> + <green>This text must be green</green> + </xi> + </rho> + </nu> + </pi> + </rho> + </pi> + </upsilon> + </iota> + </xi> + </xi> + </pi> + </mu> + </psi> + </chi> + </tree> + </test> + <test> + <xpath>//lambda[contains(concat(@desciption,"$"),"00%$")][@xml:id="id1"]/epsilon[@xml:lang="en-US"]//alpha[@xml:id="id2"][not(preceding-sibling::alpha)]//omicron[@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::omicron[contains(@object,"56")][not(child::node())][following-sibling::tau[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::gamma[@attribute][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//gamma[not(preceding-sibling::*)]//xi[@insert="_blank"][@xml:id="id5"][not(preceding-sibling::xi)][following-sibling::gamma[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::*[@xml:lang="en-GB"][following-sibling::rho[contains(@and,"t")][not(following-sibling::*)]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <lambda desciption="100%" xml:id="id1"> + <epsilon xml:lang="en-US"> + <alpha xml:id="id2"> + <omicron xml:lang="en" xml:id="id3"/> + <omicron object="123456789"/> + <tau/> + <gamma attribute="attribute" xml:id="id4"> + <gamma> + <xi insert="_blank" xml:id="id5"/> + <gamma xml:id="id6"/> + <any xml:lang="en-GB"/> + <rho and="content"> + <green>This text must be green</green> + </rho> + </gamma> + </gamma> + </alpha> + </epsilon> + </lambda> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="en-US"]//beta[@xml:lang="nb"]/lambda[@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]/nu[following-sibling::omega[@xml:lang="no-nb"][not(following-sibling::*)]/rho[@string][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <lambda xml:lang="en-US"> + <beta xml:lang="nb"> + <lambda xml:lang="en-GB" xml:id="id1"> + <nu/> + <omega xml:lang="no-nb"> + <rho string="_blank" xml:id="id2"> + <green>This text must be green</green> + </rho> + </omega> + </lambda> + </beta> + </lambda> + </tree> + </test> + <test> + <xpath>//omega[starts-with(@token,"this-is-att-valu")][@xml:lang="no"]//mu[starts-with(@attrib,"solid 1px gr")][@xml:lang="en"][@xml:id="id1"][not(following-sibling::*)]//gamma[not(preceding-sibling::*)]/sigma[not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:lang="en"][@xml:id="id2"]//omega[starts-with(concat(@and,"-"),"attribute-")][not(preceding-sibling::*)]/epsilon[@xml:id="id3"][not(preceding-sibling::*)]//omicron[contains(@insert,"lue")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(preceding-sibling::delta)][following-sibling::lambda[preceding-sibling::*[position() = 1]]/theta[starts-with(@att,"attribu")][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[contains(@or,"789")][following-sibling::*[position()=1]][following-sibling::tau[@insert][@xml:lang="en"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//*[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <omega token="this-is-att-value" xml:lang="no"> + <mu attrib="solid 1px green" xml:lang="en" xml:id="id1"> + <gamma> + <sigma/> + <phi xml:lang="en" xml:id="id2"> + <omega and="attribute"> + <epsilon xml:id="id3"> + <omicron insert="this.nodeValue" xml:lang="en-GB" xml:id="id4"> + <delta xml:lang="en" xml:id="id5"/> + <lambda> + <theta att="attribute" xml:id="id6"/> + <psi xml:lang="no"/> + <lambda or="123456789"/> + <tau insert="false" xml:lang="en"> + <any xml:lang="en-GB"> + <green>This text must be green</green> + </any> + </tau> + </lambda> + </omicron> + </epsilon> + </omega> + </phi> + </gamma> + </mu> + </omega> + </tree> + </test> + <test> + <xpath>//omega[contains(@title,"ru")][@xml:id="id1"]//psi[@title][@xml:lang="en-GB"][not(following-sibling::*)]//alpha[not(child::node())][following-sibling::tau[@string][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[@title="content"][@xml:lang="nb"][@xml:id="id3"]/omicron[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/phi[@attr][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::zeta[@false][@xml:lang="nb"]//eta[@xml:id="id5"][not(preceding-sibling::*)]//mu[@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:id="id7"][preceding-sibling::*[position() = 1]]/delta[@xml:lang="no"][not(following-sibling::*)]//nu[contains(concat(@title,"$"),"this.nodeValue$")][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda//nu[@att][@xml:id="id9"][not(preceding-sibling::*)][position() = 1]][position() = 1]]]</xpath> + <tree> + <omega title="true" xml:id="id1"> + <psi title="100%" xml:lang="en-GB"> + <alpha/> + <tau string="this-is-att-value" xml:lang="en" xml:id="id2"> + <iota title="content" xml:lang="nb" xml:id="id3"> + <omicron xml:lang="nb"> + <phi attr="attribute-value" xml:id="id4"/> + <zeta false="another attribute value" xml:lang="nb"> + <eta xml:id="id5"> + <mu xml:lang="no-nb" xml:id="id6"/> + <alpha xml:id="id7"> + <delta xml:lang="no"> + <nu title="this.nodeValue" xml:id="id8"> + <lambda> + <nu att="solid 1px green" xml:id="id9"> + <green>This text must be green</green> + </nu> + </lambda> + </nu> + </delta> + </alpha> + </eta> + </zeta> + </omicron> + </iota> + </tau> + </psi> + </omega> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:id="id1"]//sigma[not(preceding-sibling::*)]//*[contains(concat(@attribute,"$"),"e$")][@xml:lang="nb"][@xml:id="id2"][not(following-sibling::*)]/zeta[not(preceding-sibling::*)]//iota[@xml:lang="en-GB"][following-sibling::xi[@xml:lang="nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][not(following-sibling::rho)]//rho[starts-with(@src,"attribu")][not(preceding-sibling::*)][following-sibling::*[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//upsilon[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::iota[@xml:id="id5"]/psi[@xml:id="id6"][following-sibling::mu[not(following-sibling::*)]//kappa[@src="attribute value"][@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::omicron[starts-with(concat(@false,"-"),"true-")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[not(child::node())][following-sibling::gamma[starts-with(@insert,"a")][@xml:id="id8"][not(following-sibling::*)]//zeta[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[starts-with(@attribute,"fal")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omicron[@xml:lang="no"][not(following-sibling::*)]/sigma[starts-with(@src,"another")][following-sibling::*[position()=1]][following-sibling::delta//phi[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <epsilon xml:id="id1"> + <sigma> + <any attribute="this-is-att-value" xml:lang="nb" xml:id="id2"> + <zeta> + <iota xml:lang="en-GB"/> + <xi xml:lang="nb" xml:id="id3"/> + <rho xml:lang="en-GB"> + <rho src="attribute value"/> + <any xml:lang="en"> + <upsilon xml:lang="no-nb" xml:id="id4"/> + <iota xml:id="id5"> + <psi xml:id="id6"/> + <mu> + <kappa src="attribute value" xml:lang="nb"/> + <omicron false="true" xml:id="id7"> + <tau/> + <gamma insert="another attribute value" xml:id="id8"> + <zeta xml:lang="nb"> + <zeta xml:lang="nb"/> + <any attribute="false"/> + <omicron xml:lang="no"> + <sigma src="another attribute value"/> + <delta> + <phi xml:lang="no"> + <green>This text must be green</green> + </phi> + </delta> + </omicron> + </zeta> + </gamma> + </omicron> + </mu> + </iota> + </any> + </rho> + </zeta> + </any> + </sigma> + </epsilon> + </tree> + </test> + <test> + <xpath>//delta[starts-with(@content,"_bl")]//eta[@xml:lang="nb"][following-sibling::*[position()=3]][following-sibling::lambda[@xml:id="id1"][following-sibling::*[position()=2]][following-sibling::kappa[starts-with(concat(@string,"-"),"false-")][@xml:id="id2"][following-sibling::xi[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/zeta[following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[contains(concat(@attr,"$"),"se$")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[starts-with(concat(@object,"-"),"content-")][@xml:lang="nb"][not(following-sibling::*)]/theta[not(preceding-sibling::*)][following-sibling::chi[@src][@xml:id="id5"]/kappa[@data][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@number][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::xi[@true][preceding-sibling::*[position() = 2]][not(preceding-sibling::xi)][following-sibling::upsilon[@xml:id="id7"][following-sibling::omicron[@xml:lang="nb"]/lambda[@xml:lang="en-GB"][@xml:id="id8"]/zeta[@xml:id="id9"]/epsilon[@xml:lang="no-nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[contains(concat(@title,"$"),"k$")][@xml:lang="en-US"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]]]]]</xpath> + <tree> + <delta content="_blank"> + <eta xml:lang="nb"/> + <lambda xml:id="id1"/> + <kappa string="false" xml:id="id2"/> + <xi xml:lang="no-nb" xml:id="id3"> + <zeta/> + <epsilon attr="false" xml:lang="no" xml:id="id4"> + <chi object="content" xml:lang="nb"> + <theta/> + <chi src="true" xml:id="id5"> + <kappa data="123456789" xml:lang="en" xml:id="id6"/> + <beta number="solid 1px green"/> + <xi true="123456789"/> + <upsilon xml:id="id7"/> + <omicron xml:lang="nb"> + <lambda xml:lang="en-GB" xml:id="id8"> + <zeta xml:id="id9"> + <epsilon xml:lang="no-nb" xml:id="id10"> + <xi title="_blank" xml:lang="en-US"> + <green>This text must be green</green> + </xi> + </epsilon> + </zeta> + </lambda> + </omicron> + </chi> + </chi> + </epsilon> + </xi> + </delta> + </tree> + </test> + <test> + <xpath>//chi[@string][@xml:lang="en"]/mu[starts-with(@and,"th")][@xml:lang="en-US"]/alpha[starts-with(@src,"1234567")][@xml:id="id1"][not(preceding-sibling::*)]/nu[@xml:lang="en"][@xml:id="id2"][following-sibling::upsilon[@content][@xml:id="id3"][following-sibling::tau[following-sibling::*[position()=1]][following-sibling::delta[@string][@xml:lang="en-US"][position() = 1]][position() = 1]]]</xpath> + <tree> + <chi string="this-is-att-value" xml:lang="en"> + <mu and="this.nodeValue" xml:lang="en-US"> + <alpha src="123456789" xml:id="id1"> + <nu xml:lang="en" xml:id="id2"/> + <upsilon content="attribute" xml:id="id3"/> + <tau/> + <delta string="solid 1px green" xml:lang="en-US"> + <green>This text must be green</green> + </delta> + </alpha> + </mu> + </chi> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-US"][@xml:id="id1"]/kappa[@attribute="this.nodeValue"][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::epsilon[starts-with(concat(@att,"-"),"solid 1px green-")][@xml:id="id2"]/alpha[@xml:lang="no"][@xml:id="id3"][following-sibling::omicron[not(following-sibling::*)]//psi[@xml:id="id4"][not(preceding-sibling::*)]//theta[contains(@false,"nod")][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(@desciption,"00%")][@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/omega[starts-with(@att,"another")][@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[starts-with(@number,"1")][@xml:id="id7"][not(following-sibling::*)]//upsilon[contains(@token,"co")][@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::lambda[@false="content"][preceding-sibling::*[position() = 1]]/beta[@att][@xml:lang="en-US"][not(child::node())][following-sibling::beta[@xml:lang="no"][not(following-sibling::*)]//rho[contains(concat(@attribute,"$"),"ntent$")][@xml:lang="nb"]/*[@xml:lang="nb"][following-sibling::iota[@token="this.nodeValue"][preceding-sibling::*[position() = 1]]//omicron[@false="123456789"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[following-sibling::mu[contains(@true,"nt")][@xml:id="id9"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(preceding-sibling::mu)]/upsilon[@object][not(preceding-sibling::*)]/beta[contains(@and,"true")][@xml:lang="nb"][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="en-US" xml:id="id1"> + <kappa attribute="this.nodeValue" xml:lang="en-US"/> + <epsilon att="solid 1px green" xml:id="id2"> + <alpha xml:lang="no" xml:id="id3"/> + <omicron> + <psi xml:id="id4"> + <theta false="this.nodeValue" xml:id="id5"/> + <theta/> + <delta desciption="100%" xml:lang="nb"> + <omega att="another attribute value" xml:lang="en" xml:id="id6"> + <pi number="100%" xml:id="id7"> + <upsilon token="content" xml:id="id8"/> + <lambda false="content"> + <beta att="content" xml:lang="en-US"/> + <beta xml:lang="no"> + <rho attribute="content" xml:lang="nb"> + <any xml:lang="nb"/> + <iota token="this.nodeValue"> + <omicron false="123456789"/> + <epsilon/> + <mu true="content" xml:id="id9"> + <upsilon object="123456789"> + <beta and="true" xml:lang="nb"> + <green>This text must be green</green> + </beta> + </upsilon> + </mu> + </iota> + </rho> + </beta> + </lambda> + </pi> + </omega> + </delta> + </psi> + </omicron> + </epsilon> + </phi> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]/lambda[@xml:id="id2"]//omega[contains(concat(@attribute,"$"),"23456789$")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::gamma[contains(concat(@attribute,"$"),"lank$")][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]]/chi[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[@attr][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]</xpath> + <tree> + <mu xml:id="id1"> + <lambda xml:id="id2"> + <omega attribute="123456789" xml:lang="no-nb"/> + <gamma attribute="_blank" xml:lang="en-US" xml:id="id3"> + <chi xml:lang="en-US" xml:id="id4"/> + <epsilon attr="100%" xml:lang="en-GB" xml:id="id5"> + <green>This text must be green</green> + </epsilon> + </gamma> + </lambda> + </mu> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="no"][@xml:id="id1"]//upsilon[@xml:lang="no"][not(preceding-sibling::*)]/beta[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id3"][following-sibling::delta[@content][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]]//mu[@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::mu[@token="true"][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@attrib][@xml:lang="no-nb"][@xml:id="id5"][not(following-sibling::*)]/omega[contains(concat(@title,"$"),"se$")][@xml:lang="en-US"][@xml:id="id6"]/xi[@xml:id="id7"]/theta[contains(concat(@attr,"$"),"lue$")][@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)]//sigma[@xml:lang="no-nb"][not(child::node())][following-sibling::lambda[@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::xi[@and][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/*[starts-with(@src,"true")][@xml:lang="en"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="en-GB"][@xml:id="id11"][not(preceding-sibling::phi or following-sibling::phi)]/zeta[not(preceding-sibling::*)]//xi[@xml:lang="en-US"][not(child::node())][following-sibling::gamma[@true="content"][@xml:lang="no-nb"][@xml:id="id12"][preceding-sibling::*[position() = 1]]//beta[@xml:lang="en-GB"][@xml:id="id13"]//chi[@xml:lang="en-US"][not(following-sibling::*)]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <omega xml:lang="no" xml:id="id1"> + <upsilon xml:lang="no"> + <beta xml:id="id2"> + <upsilon xml:id="id3"/> + <delta content="_blank" xml:lang="nb" xml:id="id4"> + <mu xml:lang="en"/> + <mu token="true" xml:lang="en-US"/> + <nu attrib="100%" xml:lang="no-nb" xml:id="id5"> + <omega title="false" xml:lang="en-US" xml:id="id6"> + <xi xml:id="id7"> + <theta attr="this-is-att-value" xml:lang="no" xml:id="id8"> + <sigma xml:lang="no-nb"/> + <lambda xml:id="id9"/> + <xi and="100%" xml:lang="no-nb"> + <any src="true" xml:lang="en" xml:id="id10"/> + <phi xml:lang="en-GB" xml:id="id11"> + <zeta> + <xi xml:lang="en-US"/> + <gamma true="content" xml:lang="no-nb" xml:id="id12"> + <beta xml:lang="en-GB" xml:id="id13"> + <chi xml:lang="en-US"> + <green>This text must be green</green> + </chi> + </beta> + </gamma> + </zeta> + </phi> + </xi> + </theta> + </xi> + </omega> + </nu> + </delta> + </beta> + </upsilon> + </omega> + </tree> + </test> + <test> + <xpath>//theta[contains(concat(@insert,"$"),"attribute$")][@xml:lang="nb"][@xml:id="id1"]//kappa[not(following-sibling::*)]//theta[@xml:lang="en-US"]//chi[@xml:id="id2"]/*[@name][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::theta[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]//mu[not(child::node())][following-sibling::iota[@insert][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::kappa[contains(@insert,"al")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/pi[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@true][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::alpha[@xml:id="id7"]/chi[@xml:lang="no-nb"]//xi[@true][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta insert="attribute" xml:lang="nb" xml:id="id1"> + <kappa> + <theta xml:lang="en-US"> + <chi xml:id="id2"> + <any name="this-is-att-value" xml:lang="en-US"> + <pi xml:lang="en-GB" xml:id="id3"/> + <theta xml:lang="en-US" xml:id="id4"> + <mu/> + <iota insert="true" xml:id="id5"/> + <kappa insert="false"> + <pi xml:lang="en-US"/> + <iota true="attribute value" xml:id="id6"/> + <alpha xml:id="id7"> + <chi xml:lang="no-nb"> + <xi true="attribute-value" xml:lang="no-nb"> + <green>This text must be green</green> + </xi> + </chi> + </alpha> + </kappa> + </theta> + </any> + </chi> + </theta> + </kappa> + </theta> + </tree> + </test> + <test> + <xpath>//psi[@xml:lang="no-nb"]//mu[starts-with(concat(@content,"-"),"attribute value-")][not(preceding-sibling::*)][following-sibling::chi[@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[@class="attribute-value"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@xml:lang="en"][following-sibling::*[position()=3]][following-sibling::upsilon[following-sibling::*[position()=2]][not(child::node())][following-sibling::*[@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta//xi[@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="no-nb"][not(following-sibling::*)]/zeta[not(preceding-sibling::*)]/kappa[not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <psi xml:lang="no-nb"> + <mu content="attribute value"/> + <chi xml:lang="en-GB" xml:id="id1"> + <rho class="attribute-value" xml:id="id2"> + <alpha xml:lang="en"/> + <upsilon/> + <any xml:id="id3"/> + <theta> + <xi xml:lang="en-GB" xml:id="id4"> + <zeta xml:lang="no-nb"/> + <delta xml:lang="no-nb"> + <zeta> + <kappa> + <green>This text must be green</green> + </kappa> + </zeta> + </delta> + </xi> + </theta> + </rho> + </chi> + </psi> + </tree> + </test> + <test> + <xpath>//lambda[@insert="content"]//omicron[@desciption][@xml:lang="en-GB"][@xml:id="id1"]/zeta[starts-with(concat(@delete,"-"),"true-")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(preceding-sibling::zeta)]//iota[@content][@xml:lang="nb"]/xi[contains(@token,"e")][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@number="_blank"][not(preceding-sibling::*)][not(parent::*/*[position()=2])]/gamma[starts-with(concat(@name,"-"),"true-")][@xml:lang="en"][not(preceding-sibling::*)]/zeta[@att="content"][@xml:lang="no-nb"][@xml:id="id3"]//omega[not(following-sibling::*)]/upsilon[contains(concat(@object,"$")," green$")][@xml:lang="en"][@xml:id="id4"]//*[starts-with(@src,"tr")][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(@and,"anot")][not(following-sibling::*)]//*[contains(@content,"tru")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[contains(concat(@token,"$"),"100%$")][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@data="attribute value"][@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[contains(concat(@insert,"$"),"lank$")][@xml:lang="no"][@xml:id="id9"]//delta[@xml:id="id10"][not(preceding-sibling::*)]/mu[contains(concat(@abort,"$"),"r attribute value$")][not(following-sibling::*)]/omicron[@delete="attribute-value"][@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::pi[contains(@true,"nodeValue")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]][position() = 1]]</xpath> + <tree> + <lambda insert="content"> + <omicron desciption="false" xml:lang="en-GB" xml:id="id1"> + <zeta delete="true" xml:lang="en-GB" xml:id="id2"> + <iota content="false" xml:lang="nb"> + <xi token="true"> + <iota number="_blank"> + <gamma name="true" xml:lang="en"> + <zeta att="content" xml:lang="no-nb" xml:id="id3"> + <omega> + <upsilon object="solid 1px green" xml:lang="en" xml:id="id4"> + <any src="true"> + <beta and="another attribute value"> + <any content="true" xml:id="id5"/> + <any xml:lang="no" xml:id="id6"> + <delta token="100%"> + <lambda data="attribute value" xml:lang="no" xml:id="id7"/> + <gamma xml:lang="en" xml:id="id8"> + <xi insert="_blank" xml:lang="no" xml:id="id9"> + <delta xml:id="id10"> + <mu abort="another attribute value"> + <omicron delete="attribute-value" xml:lang="en"/> + <pi true="this.nodeValue" xml:lang="nb"> + <green>This text must be green</green> + </pi> + </mu> + </delta> + </xi> + </gamma> + </delta> + </any> + </beta> + </any> + </upsilon> + </omega> + </zeta> + </gamma> + </iota> + </xi> + </iota> + </zeta> + </omicron> + </lambda> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no"]/delta[not(preceding-sibling::*)][following-sibling::eta[contains(@abort," 1px gr")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[starts-with(@object,"1")][@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[contains(concat(@title,"$"),"te value$")][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@and][@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]/rho[contains(@attribute,"onten")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta/omicron[@delete="this-is-att-value"][following-sibling::*[position()=3]][following-sibling::omicron[@object="123456789"][@xml:lang="en"][@xml:id="id3"][following-sibling::epsilon[following-sibling::nu[starts-with(concat(@attrib,"-"),"false-")][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][not(preceding-sibling::nu)]//omicron[@xml:lang="en-GB"][@xml:id="id5"][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <tau xml:lang="no"> + <delta/> + <eta abort="solid 1px green" xml:lang="en"/> + <any> + <alpha object="123456789" xml:lang="nb" xml:id="id1"/> + <eta xml:lang="no"> + <eta title="another attribute value" xml:lang="no"> + <xi and="100%" xml:lang="en-GB" xml:id="id2"> + <rho attribute="content" xml:lang="en"/> + <delta> + <omicron delete="this-is-att-value"/> + <omicron object="123456789" xml:lang="en" xml:id="id3"/> + <epsilon/> + <nu attrib="false" xml:id="id4"> + <omicron xml:lang="en-GB" xml:id="id5"> + <green>This text must be green</green> + </omicron> + </nu> + </delta> + </xi> + </eta> + </eta> + </any> + </tau> + </tree> + </test> + <test> + <xpath>//omicron[@xml:id="id1"]/beta[not(preceding-sibling::*)][following-sibling::kappa[starts-with(@content,"this-is-att-v")][@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/alpha//alpha[not(following-sibling::*)]/eta[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@content][following-sibling::epsilon[@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[@xml:id="id5"][preceding-sibling::*[position() = 2]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omicron xml:id="id1"> + <beta/> + <kappa content="this-is-att-value" xml:lang="nb" xml:id="id2"> + <alpha> + <alpha> + <eta xml:lang="no-nb" xml:id="id3"> + <kappa content="solid 1px green"/> + <epsilon xml:lang="nb" xml:id="id4"/> + <omega xml:id="id5"> + <green>This text must be green</green> + </omega> + </eta> + </alpha> + </alpha> + </kappa> + </omicron> + </tree> + </test> + <test> + <xpath>//phi//theta[starts-with(concat(@true,"-"),"content-")][not(child::node())][following-sibling::epsilon[@xml:id="id1"][not(child::node())][following-sibling::psi[not(child::node())][following-sibling::chi[starts-with(concat(@data,"-"),"another attribute value-")][@xml:lang="en-US"][@xml:id="id2"]//rho[@token][@xml:lang="en"]//omicron[@attribute="attribute"][not(following-sibling::*)]//chi[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::theta[contains(concat(@and,"$"),"ttribute value$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[@and][@xml:lang="no-nb"]/eta[@number="content"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::omega[contains(@abort,"nt")][preceding-sibling::*[position() = 1]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <phi> + <theta true="content"/> + <epsilon xml:id="id1"/> + <psi/> + <chi data="another attribute value" xml:lang="en-US" xml:id="id2"> + <rho token="this-is-att-value" xml:lang="en"> + <omicron attribute="attribute"> + <chi xml:lang="no-nb" xml:id="id3"/> + <theta and="attribute value"> + <nu and="true" xml:lang="no-nb"> + <eta number="content" xml:id="id4"/> + <omega abort="content"> + <green>This text must be green</green> + </omega> + </nu> + </theta> + </omicron> + </rho> + </chi> + </phi> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-GB"][@xml:id="id1"]//xi[starts-with(@content,"tru")][following-sibling::chi[@src][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[starts-with(@attribute,"solid 1")][@xml:lang="nb"][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::eta[starts-with(@or,"1234")][preceding-sibling::*[position() = 4]]//rho[@xml:lang="no-nb"][not(following-sibling::*)]//omega[starts-with(@or,"1234")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:id="id5"]]]][position() = 1]]]</xpath> + <tree> + <any xml:lang="en-GB" xml:id="id1"> + <xi content="true"/> + <chi src="true" xml:lang="en"/> + <rho attribute="solid 1px green" xml:lang="nb" xml:id="id2"/> + <iota xml:lang="en-US" xml:id="id3"/> + <eta or="123456789"> + <rho xml:lang="no-nb"> + <omega or="123456789" xml:lang="en-GB" xml:id="id4"/> + <upsilon xml:id="id5"> + <green>This text must be green</green> + </upsilon> + </rho> + </eta> + </any> + </tree> + </test> + <test> + <xpath>//gamma[@or="this-is-att-value"]//chi[@xml:lang="no"][following-sibling::lambda[@xml:lang="no-nb"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::gamma[@and="attribute"][@xml:lang="en"][@xml:id="id2"]/epsilon[following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[starts-with(@false,"f")][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[starts-with(concat(@abort,"-"),"false-")][not(child::node())][following-sibling::theta[contains(@name,"k")][@xml:id="id4"][not(following-sibling::*)]/chi[@xml:lang="no"][@xml:id="id5"][not(following-sibling::*)]//phi[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[@xml:id="id6"][not(child::node())][following-sibling::delta[@xml:id="id7"]/alpha[contains(@object,"r attribute ")][@xml:lang="no"][not(preceding-sibling::*)]/upsilon[@xml:lang="nb"][not(child::node())][following-sibling::alpha[@xml:id="id8"][preceding-sibling::*[position() = 1]]/pi[starts-with(@object,"thi")][not(following-sibling::*)]/delta[@xml:id="id9"][not(following-sibling::*)]/omega[@xml:id="id10"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <gamma or="this-is-att-value"> + <chi xml:lang="no"/> + <lambda xml:lang="no-nb" xml:id="id1"/> + <gamma and="attribute" xml:lang="en" xml:id="id2"> + <epsilon/> + <gamma false="false" xml:lang="en" xml:id="id3"> + <rho abort="false"/> + <theta name="_blank" xml:id="id4"> + <chi xml:lang="no" xml:id="id5"> + <phi xml:lang="no"/> + <any xml:id="id6"/> + <delta xml:id="id7"> + <alpha object="another attribute value" xml:lang="no"> + <upsilon xml:lang="nb"/> + <alpha xml:id="id8"> + <pi object="this-is-att-value"> + <delta xml:id="id9"> + <omega xml:id="id10"> + <green>This text must be green</green> + </omega> + </delta> + </pi> + </alpha> + </alpha> + </delta> + </chi> + </theta> + </gamma> + </gamma> + </gamma> + </tree> + </test> + <test> + <xpath>//zeta[@xml:id="id1"]//phi[contains(concat(@attribute,"$"),"reen$")][@xml:lang="en-US"][not(child::node())][following-sibling::iota[@object][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::lambda[preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[starts-with(@token,"attribute-value")][@xml:id="id3"][not(following-sibling::*)]/rho[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)]//xi[not(child::node())][following-sibling::eta[@name][@xml:id="id6"][not(following-sibling::*)]/omicron[@class="attribute-value"][@xml:id="id7"][following-sibling::sigma[starts-with(@attrib,"attribute v")][@xml:lang="en-GB"][not(following-sibling::*)]//omicron[@xml:lang="en"]//upsilon[@abort][not(preceding-sibling::*)][following-sibling::omega[@number][@xml:lang="no"][@xml:id="id8"][following-sibling::nu[contains(concat(@src,"$"),"ibute value$")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//omega[@xml:lang="en-US"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(preceding-sibling::omega)][following-sibling::phi[@xml:lang="no-nb"][@xml:id="id10"][not(following-sibling::*)]//theta[starts-with(concat(@abort,"-"),"attribute-")][@xml:id="id11"]/delta[contains(@desciption,"lue")][not(following-sibling::*)]//omicron[@token][@xml:id="id12"][not(preceding-sibling::*)]/lambda[contains(@number,"reen")][@xml:lang="en-GB"][@xml:id="id13"][following-sibling::lambda[@att][@xml:id="id14"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::epsilon[@delete="solid 1px green"][@xml:lang="en-US"][@xml:id="id15"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/phi[contains(concat(@name,"$")," attribute value$")][@xml:lang="en-GB"][@xml:id="id16"][not(preceding-sibling::*)]]]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <zeta xml:id="id1"> + <phi attribute="solid 1px green" xml:lang="en-US"/> + <iota object="123456789" xml:id="id2"/> + <lambda/> + <epsilon token="attribute-value" xml:id="id3"> + <rho xml:id="id4"> + <phi xml:lang="en-US" xml:id="id5"> + <xi/> + <eta name="this-is-att-value" xml:id="id6"> + <omicron class="attribute-value" xml:id="id7"/> + <sigma attrib="attribute value" xml:lang="en-GB"> + <omicron xml:lang="en"> + <upsilon abort="this-is-att-value"/> + <omega number="attribute" xml:lang="no" xml:id="id8"/> + <nu src="attribute value" xml:lang="en-US"> + <omega xml:lang="en-US" xml:id="id9"/> + <phi xml:lang="no-nb" xml:id="id10"> + <theta abort="attribute-value" xml:id="id11"> + <delta desciption="attribute-value"> + <omicron token="attribute-value" xml:id="id12"> + <lambda number="solid 1px green" xml:lang="en-GB" xml:id="id13"/> + <lambda att="false" xml:id="id14"/> + <epsilon delete="solid 1px green" xml:lang="en-US" xml:id="id15"> + <phi name="another attribute value" xml:lang="en-GB" xml:id="id16"> + <green>This text must be green</green> + </phi> + </epsilon> + </omicron> + </delta> + </theta> + </phi> + </nu> + </omicron> + </sigma> + </eta> + </phi> + </rho> + </epsilon> + </zeta> + </tree> + </test> + <test> + <xpath>//lambda[@src]/nu[not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@attr,"$"),"00%$")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/phi[contains(concat(@string,"$"),"s.nodeValue$")][@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@false="_blank"][@xml:id="id2"][not(following-sibling::*)]//iota[@delete][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::xi[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:lang="nb"][not(following-sibling::*)]/delta[starts-with(concat(@object,"-"),"attribute-")][@xml:lang="nb"]/alpha[@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::gamma[preceding-sibling::*[position() = 1]]//xi[not(child::node())][following-sibling::iota[starts-with(@number,"this.n")][@xml:lang="no"][@xml:id="id7"][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <lambda src="100%"> + <nu/> + <alpha attr="100%" xml:lang="en-US"> + <phi string="this.nodeValue" xml:lang="no" xml:id="id1"/> + <epsilon false="_blank" xml:id="id2"> + <iota delete="attribute value" xml:lang="no-nb" xml:id="id3"/> + <xi xml:id="id4"> + <nu xml:lang="en" xml:id="id5"/> + <theta xml:lang="nb"> + <delta object="attribute" xml:lang="nb"> + <alpha xml:lang="nb" xml:id="id6"/> + <gamma> + <xi/> + <iota number="this.nodeValue" xml:lang="no" xml:id="id7"> + <green>This text must be green</green> + </iota> + </gamma> + </delta> + </theta> + </xi> + </epsilon> + </alpha> + </lambda> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="en"][@xml:id="id1"]//psi[@false][@xml:id="id2"][not(preceding-sibling::*)]//sigma[@xml:id="id3"][not(child::node())][following-sibling::sigma[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omicron[contains(concat(@true,"$"),"r attribute value$")][not(child::node())][following-sibling::psi[starts-with(concat(@att,"-"),"attribute-")][@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omicron[@and][@xml:lang="en-US"][@xml:id="id6"][not(following-sibling::*)]//chi[@xml:lang="en-US"][not(following-sibling::*)]//epsilon[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@attribute][@xml:id="id8"][not(following-sibling::*)]//iota[contains(@title,"34")][@xml:lang="nb"][@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::phi[starts-with(concat(@attr,"-"),"123456789-")][@xml:lang="en"][@xml:id="id10"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <iota xml:lang="en" xml:id="id1"> + <psi false="100%" xml:id="id2"> + <sigma xml:id="id3"/> + <sigma xml:lang="no" xml:id="id4"/> + <omicron true="another attribute value"/> + <psi att="attribute-value" xml:lang="no-nb" xml:id="id5"/> + <omicron and="attribute" xml:lang="en-US" xml:id="id6"> + <chi xml:lang="en-US"> + <epsilon xml:lang="en-US" xml:id="id7"> + <any attribute="attribute-value" xml:id="id8"> + <iota title="123456789" xml:lang="nb" xml:id="id9"/> + <phi attr="123456789" xml:lang="en" xml:id="id10"> + <green>This text must be green</green> + </phi> + </any> + </epsilon> + </chi> + </omicron> + </psi> + </iota> + </tree> + </test> + <test> + <xpath>//omega/upsilon[@xml:lang="en"]//zeta[@false][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::nu[starts-with(concat(@content,"-"),"_blank-")][@xml:lang="en-GB"][@xml:id="id2"][following-sibling::mu[following-sibling::*[position()=5]][following-sibling::tau[contains(concat(@false,"$"),"lse$")][@xml:id="id3"][not(child::node())][following-sibling::epsilon[@number][following-sibling::*[position()=3]][not(child::node())][following-sibling::eta[starts-with(@abort,"this.node")][@xml:lang="nb"][@xml:id="id4"][following-sibling::*[position()=2]][following-sibling::iota[@xml:lang="no-nb"][preceding-sibling::*[position() = 6]][following-sibling::beta[@false="attribute value"][@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 7]][not(following-sibling::*)]]]]][position() = 1]]]]</xpath> + <tree> + <omega> + <upsilon xml:lang="en"> + <zeta false="solid 1px green" xml:id="id1"/> + <nu content="_blank" xml:lang="en-GB" xml:id="id2"/> + <mu/> + <tau false="false" xml:id="id3"/> + <epsilon number="another attribute value"/> + <eta abort="this.nodeValue" xml:lang="nb" xml:id="id4"/> + <iota xml:lang="no-nb"/> + <beta false="attribute value" xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </beta> + </upsilon> + </omega> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="no-nb"][@xml:id="id1"]/chi[contains(@title,"b")][@xml:lang="en-US"][@xml:id="id2"][following-sibling::alpha[starts-with(concat(@token,"-"),"123456789-")][@xml:id="id3"]//eta[starts-with(concat(@abort,"-"),"solid 1px green-")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:lang="nb"][@xml:id="id5"]//*[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@object][@xml:lang="no-nb"][@xml:id="id6"]//nu[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[contains(concat(@false,"$"),"e value$")][preceding-sibling::*[position() = 1]][following-sibling::mu[@xml:lang="nb"][@xml:id="id7"][not(following-sibling::*)]//psi[starts-with(@desciption,"1")][following-sibling::pi[@data][@xml:lang="en-US"][@xml:id="id8"][following-sibling::beta[@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 2]]//lambda[@content][@xml:lang="en-GB"][not(preceding-sibling::*)]/lambda[@xml:lang="no-nb"][not(preceding-sibling::*)]]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <omega xml:lang="no-nb" xml:id="id1"> + <chi title="attribute" xml:lang="en-US" xml:id="id2"/> + <alpha token="123456789" xml:id="id3"> + <eta abort="solid 1px green" xml:lang="en-GB" xml:id="id4"/> + <any xml:lang="nb" xml:id="id5"> + <any xml:lang="nb"> + <iota object="content" xml:lang="no-nb" xml:id="id6"> + <nu xml:lang="en"/> + <kappa false="another attribute value"/> + <mu xml:lang="nb" xml:id="id7"> + <psi desciption="100%"/> + <pi data="100%" xml:lang="en-US" xml:id="id8"/> + <beta xml:lang="en" xml:id="id9"> + <lambda content="_blank" xml:lang="en-GB"> + <lambda xml:lang="no-nb"> + <green>This text must be green</green> + </lambda> + </lambda> + </beta> + </mu> + </iota> + </any> + </any> + </alpha> + </omega> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-US"]//kappa[@xml:id="id1"][following-sibling::*[position()=2]][following-sibling::gamma[contains(concat(@src,"$"),"rue$")][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::phi//epsilon[@insert][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[contains(@src,"other")][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::beta[@desciption="this-is-att-value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau[not(preceding-sibling::*)][not(following-sibling::*)][not(parent::*/*[position()=2])]//pi[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::nu[starts-with(@number,"10")][preceding-sibling::*[position() = 1]]/lambda[contains(@content," value")][@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <phi xml:lang="en-US"> + <kappa xml:id="id1"/> + <gamma src="true" xml:id="id2"/> + <phi> + <epsilon insert="123456789" xml:lang="en" xml:id="id3"/> + <xi src="another attribute value" xml:id="id4"/> + <beta desciption="this-is-att-value"> + <tau> + <pi xml:lang="en-US" xml:id="id5"/> + <nu number="100%"> + <lambda content="another attribute value" xml:lang="nb" xml:id="id6"> + <green>This text must be green</green> + </lambda> + </nu> + </tau> + </beta> + </phi> + </phi> + </tree> + </test> + <test> + <xpath>//beta[@attrib][@xml:lang="en-US"]//chi[@desciption][@xml:lang="no"][following-sibling::rho[starts-with(@attrib,"this")][@xml:id="id1"][preceding-sibling::*[position() = 1]]//sigma[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@true][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[@delete="attribute value"][@xml:lang="en-GB"][not(preceding-sibling::*)]//omicron[@object="another attribute value"][@xml:lang="en-GB"]/lambda[contains(concat(@token,"$"),"value$")][@xml:lang="en-US"][not(preceding-sibling::*)]//iota[starts-with(concat(@true,"-"),"attribute-")][@xml:id="id3"][following-sibling::lambda[@xml:lang="en-GB"][following-sibling::delta[@data][@xml:id="id4"][preceding-sibling::*[position() = 2]]//chi[@delete="attribute value"][@xml:lang="en-GB"][@xml:id="id5"]/pi[starts-with(concat(@abort,"-"),"true-")][not(following-sibling::*)]//kappa[@xml:lang="nb"][not(following-sibling::*)]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta attrib="100%" xml:lang="en-US"> + <chi desciption="true" xml:lang="no"/> + <rho attrib="this-is-att-value" xml:id="id1"> + <sigma xml:id="id2"> + <rho true="_blank" xml:lang="nb"> + <chi delete="attribute value" xml:lang="en-GB"> + <omicron object="another attribute value" xml:lang="en-GB"> + <lambda token="attribute-value" xml:lang="en-US"> + <iota true="attribute" xml:id="id3"/> + <lambda xml:lang="en-GB"/> + <delta data="content" xml:id="id4"> + <chi delete="attribute value" xml:lang="en-GB" xml:id="id5"> + <pi abort="true"> + <kappa xml:lang="nb"> + <green>This text must be green</green> + </kappa> + </pi> + </chi> + </delta> + </lambda> + </omicron> + </chi> + </rho> + </sigma> + </rho> + </beta> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]//iota[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::lambda[contains(concat(@number,"$"),"e$")][@xml:lang="en-GB"][@xml:id="id2"]//sigma[contains(concat(@class,"$"),"ue$")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][following-sibling::pi[preceding-sibling::*[position() = 2]][following-sibling::*[position()=4]][not(child::node())][following-sibling::zeta[starts-with(@data,"th")][@xml:id="id4"][not(child::node())][following-sibling::lambda[starts-with(@title,"this.nodeValu")][@xml:id="id5"][not(child::node())][following-sibling::beta[@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 5]][following-sibling::xi[@xml:id="id7"][not(following-sibling::*)]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <alpha xml:id="id1"> + <iota xml:lang="en-GB"/> + <lambda number="this.nodeValue" xml:lang="en-GB" xml:id="id2"> + <sigma class="this.nodeValue" xml:lang="en"/> + <sigma xml:lang="no-nb" xml:id="id3"/> + <pi/> + <zeta data="this.nodeValue" xml:id="id4"/> + <lambda title="this.nodeValue" xml:id="id5"/> + <beta xml:lang="no" xml:id="id6"/> + <xi xml:id="id7"> + <green>This text must be green</green> + </xi> + </lambda> + </alpha> + </tree> + </test> + <test> + <xpath>//delta[@false][@xml:id="id1"]/chi[@true][@xml:lang="en-GB"]//rho[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[not(preceding-sibling::*)][not(following-sibling::tau)]/sigma[contains(@token,"ribut")][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[contains(concat(@name,"$"),"ue$")][@xml:id="id3"]//phi[@xml:id="id4"][not(child::node())][following-sibling::omicron[@xml:id="id5"][not(following-sibling::*)]/delta[@token][@xml:lang="no"]/sigma[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@xml:id="id7"][not(child::node())][following-sibling::sigma[starts-with(concat(@delete,"-"),"true-")][@xml:id="id8"][not(following-sibling::*)]//lambda[@name][@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::iota[contains(@and,"t")][preceding-sibling::*[position() = 1]]/chi[@xml:lang="en-US"][@xml:id="id10"][following-sibling::epsilon[@xml:lang="en"][@xml:id="id11"][not(following-sibling::*)]//omega[@object][not(preceding-sibling::*)][following-sibling::omicron[@xml:id="id12"][preceding-sibling::*[position() = 1]]/phi[@attrib][@xml:lang="en-US"][@xml:id="id13"]//*[contains(@and,"ue")][not(preceding-sibling::*)][not(following-sibling::*)]/*[not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta false="content" xml:id="id1"> + <chi true="true" xml:lang="en-GB"> + <rho xml:id="id2"> + <tau> + <sigma token="attribute"> + <epsilon name="true" xml:id="id3"> + <phi xml:id="id4"/> + <omicron xml:id="id5"> + <delta token="this.nodeValue" xml:lang="no"> + <sigma xml:id="id6"> + <sigma xml:id="id7"/> + <sigma delete="true" xml:id="id8"> + <lambda name="this.nodeValue" xml:id="id9"/> + <iota and="content"> + <chi xml:lang="en-US" xml:id="id10"/> + <epsilon xml:lang="en" xml:id="id11"> + <omega object="true"/> + <omicron xml:id="id12"> + <phi attrib="attribute-value" xml:lang="en-US" xml:id="id13"> + <any and="another attribute value"> + <any> + <green>This text must be green</green> + </any> + </any> + </phi> + </omicron> + </epsilon> + </iota> + </sigma> + </sigma> + </delta> + </omicron> + </epsilon> + </sigma> + </tau> + </rho> + </chi> + </delta> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en"]/zeta[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::omicron[starts-with(@false,"this")][following-sibling::gamma[not(following-sibling::*)]//epsilon[@xml:lang="no"]/nu[@xml:lang="nb"][@xml:id="id2"][not(child::node())][following-sibling::*[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)]/lambda[contains(concat(@object,"$"),"e value$")][not(preceding-sibling::*)]//*[starts-with(concat(@attr,"-"),"_blank-")][@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::chi[starts-with(@or,"solid 1px")][@xml:lang="no"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="en"> + <zeta xml:lang="en-US" xml:id="id1"/> + <omicron false="this.nodeValue"/> + <gamma> + <epsilon xml:lang="no"> + <nu xml:lang="nb" xml:id="id2"/> + <any xml:id="id3"> + <beta xml:lang="no" xml:id="id4"> + <lambda object="attribute value"> + <any attr="_blank" xml:lang="no" xml:id="id5"/> + <chi or="solid 1px green" xml:lang="no"> + <green>This text must be green</green> + </chi> + </lambda> + </beta> + </any> + </epsilon> + </gamma> + </kappa> + </tree> + </test> + <test> + <xpath>//omega[contains(concat(@src,"$"),"9$")][@xml:id="id1"]/zeta[@xml:id="id2"][not(child::node())][following-sibling::rho[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:lang="no-nb"][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id4"]//tau[@xml:lang="nb"][@xml:id="id5"]//iota[starts-with(@content,"this")][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[contains(@delete,"00%")][@xml:id="id7"][not(child::node())][following-sibling::zeta[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/nu[@xml:lang="en"][@xml:id="id8"][not(following-sibling::*)]/kappa[@attribute][@xml:id="id9"][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][not(following-sibling::*)]/nu[@xml:lang="en-GB"][@xml:id="id10"]//psi[starts-with(@abort,"so")][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::psi[contains(concat(@true,"$"),"00%$")][@xml:id="id12"][following-sibling::*[position()=2]][not(child::node())][following-sibling::eta[@xml:id="id13"][not(child::node())][following-sibling::nu[@or="attribute value"][@xml:lang="en"]][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <omega src="123456789" xml:id="id1"> + <zeta xml:id="id2"/> + <rho xml:id="id3"/> + <phi xml:lang="no-nb"/> + <chi xml:lang="no" xml:id="id4"> + <tau xml:lang="nb" xml:id="id5"> + <iota content="this.nodeValue" xml:id="id6"/> + <beta delete="100%" xml:id="id7"/> + <zeta xml:lang="en"> + <nu xml:lang="en" xml:id="id8"> + <kappa attribute="attribute" xml:id="id9"/> + <zeta xml:lang="en-US"> + <nu xml:lang="en-GB" xml:id="id10"> + <psi abort="solid 1px green" xml:id="id11"/> + <psi true="100%" xml:id="id12"/> + <eta xml:id="id13"/> + <nu or="attribute value" xml:lang="en"> + <green>This text must be green</green> + </nu> + </nu> + </zeta> + </nu> + </zeta> + </tau> + </chi> + </omega> + </tree> + </test> + <test> + <xpath>//beta[contains(concat(@attr,"$"),"00%$")][@xml:lang="no-nb"]/tau[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::tau)]//tau[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@xml:lang="no"][not(child::node())][following-sibling::tau[@title][@xml:lang="nb"]//delta[starts-with(concat(@name,"-"),"this.nodeValue-")][@xml:lang="no"][not(child::node())][following-sibling::theta[not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <beta attr="100%" xml:lang="no-nb"> + <tau xml:lang="no" xml:id="id1"> + <tau xml:lang="en-GB" xml:id="id2"> + <iota xml:lang="en-GB"> + <theta xml:lang="no"/> + <tau title="true" xml:lang="nb"> + <delta name="this.nodeValue" xml:lang="no"/> + <theta> + <green>This text must be green</green> + </theta> + </tau> + </iota> + </tau> + </tau> + </beta> + </tree> + </test> + <test> + <xpath>//xi[@token="content"][@xml:id="id1"]//chi[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:lang="en"][@xml:id="id3"]/delta[contains(@attr,"9")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::upsilon[contains(@number,"s")][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::gamma[starts-with(concat(@attr,"-"),"attribute value-")][not(child::node())][following-sibling::tau[starts-with(concat(@title,"-"),"100%-")][preceding-sibling::*[position() = 3]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <xi token="content" xml:id="id1"> + <chi xml:id="id2"> + <beta xml:lang="en" xml:id="id3"> + <delta attr="123456789" xml:lang="en-US" xml:id="id4"/> + <upsilon number="false" xml:id="id5"/> + <gamma attr="attribute value"/> + <tau title="100%"> + <green>This text must be green</green> + </tau> + </beta> + </chi> + </xi> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no-nb"][@xml:id="id1"]/theta[starts-with(@false,"attribute")][@xml:lang="no-nb"][not(following-sibling::*)]/beta[not(child::node())][following-sibling::pi[not(child::node())][following-sibling::alpha[starts-with(@att,"at")][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/tau[@xml:lang="no-nb"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[starts-with(@content,"_blan")][@xml:lang="en"][not(following-sibling::*)]//iota[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]/rho[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[contains(@data,"ttribute value")][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@xml:lang="en"][@xml:id="id5"][following-sibling::*[position()=3]][not(child::node())][following-sibling::alpha[starts-with(concat(@data,"-"),"123456789-")][@xml:lang="nb"][@xml:id="id6"][following-sibling::omicron[@attribute][@xml:lang="no"][@xml:id="id7"][not(child::node())][following-sibling::zeta[starts-with(@true,"co")][@xml:lang="no-nb"][@xml:id="id8"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="no-nb" xml:id="id1"> + <theta false="attribute" xml:lang="no-nb"> + <beta/> + <pi/> + <alpha att="attribute" xml:id="id2"> + <tau xml:lang="no-nb" xml:id="id3"/> + <theta content="_blank" xml:lang="en"> + <iota xml:lang="en" xml:id="id4"> + <rho xml:lang="no-nb"> + <nu data="another attribute value"/> + <mu xml:lang="en" xml:id="id5"/> + <alpha data="123456789" xml:lang="nb" xml:id="id6"/> + <omicron attribute="false" xml:lang="no" xml:id="id7"/> + <zeta true="content" xml:lang="no-nb" xml:id="id8"> + <green>This text must be green</green> + </zeta> + </rho> + </iota> + </theta> + </alpha> + </theta> + </kappa> + </tree> + </test> + <test> + <xpath>//sigma[@content][@xml:lang="no-nb"]/iota[starts-with(@true,"this-is-att-va")][@xml:id="id1"][following-sibling::phi[contains(concat(@true,"$"),"alue$")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::pi[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::omicron[@src][@xml:id="id3"][following-sibling::mu[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 5]]/delta[@data="another attribute value"][following-sibling::*[position()=1]][following-sibling::mu[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <sigma content="attribute" xml:lang="no-nb"> + <iota true="this-is-att-value" xml:id="id1"/> + <phi true="this-is-att-value" xml:lang="en"> + <lambda xml:lang="en-GB"/> + <pi xml:lang="no" xml:id="id2"/> + <omicron src="attribute value" xml:id="id3"/> + <mu xml:lang="en-US" xml:id="id4"/> + <psi xml:lang="no-nb" xml:id="id5"/> + <omicron> + <delta data="another attribute value"/> + <mu xml:lang="no-nb"> + <green>This text must be green</green> + </mu> + </omicron> + </phi> + </sigma> + </tree> + </test> + <test> + <xpath>//mu//beta//zeta[starts-with(@number,"12345678")][not(preceding-sibling::*)]//omega[@xml:lang="no"][not(following-sibling::*)]/pi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::upsilon[contains(concat(@attrib,"$"),"lue$")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[contains(concat(@attrib,"$"),"blank$")][preceding-sibling::*[position() = 2]]]]</xpath> + <tree> + <mu> + <beta> + <zeta number="123456789"> + <omega xml:lang="no"> + <pi xml:lang="no-nb"/> + <upsilon attrib="attribute-value" xml:lang="en"/> + <gamma attrib="_blank"> + <green>This text must be green</green> + </gamma> + </omega> + </zeta> + </beta> + </mu> + </tree> + </test> + <test> + <xpath>//theta[@false="solid 1px green"][@xml:lang="nb"]/lambda[starts-with(concat(@desciption,"-"),"123456789-")][@xml:id="id1"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::theta)]//kappa[starts-with(concat(@attrib,"-"),"content-")]//tau[contains(@class,"alse")][@xml:lang="no-nb"][@xml:id="id3"][following-sibling::omega[@xml:id="id4"][not(child::node())][following-sibling::*[@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omicron[@class][not(child::node())][following-sibling::omicron[contains(@attrib,"te")][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 4]]/phi[@string][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[@xml:id="id9"][not(preceding-sibling::*)][following-sibling::mu[contains(concat(@string,"$"),"this-is-att-value$")][preceding-sibling::*[position() = 1]]][position() = 1]][position() = 1]]]]]]</xpath> + <tree> + <theta false="solid 1px green" xml:lang="nb"> + <lambda desciption="123456789" xml:id="id1"/> + <theta xml:lang="en-GB" xml:id="id2"> + <kappa attrib="content"> + <tau class="false" xml:lang="no-nb" xml:id="id3"/> + <omega xml:id="id4"/> + <any xml:lang="en" xml:id="id5"/> + <omicron class="another attribute value"/> + <omicron attrib="another attribute value" xml:lang="no" xml:id="id6"> + <phi string="this.nodeValue" xml:lang="en" xml:id="id7"/> + <epsilon xml:lang="no-nb" xml:id="id8"> + <nu xml:id="id9"/> + <mu string="this-is-att-value"> + <green>This text must be green</green> + </mu> + </epsilon> + </omicron> + </kappa> + </theta> + </theta> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="nb"]//upsilon[@xml:lang="en-GB"][following-sibling::*[position()=2]][not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][not(child::node())][following-sibling::rho[starts-with(concat(@content,"-"),"solid 1px green-")][@xml:lang="en-GB"][not(following-sibling::*)]/delta[starts-with(concat(@attrib,"-"),"_blank-")][@xml:lang="no-nb"]/chi[contains(@insert,"s-att-val")][@xml:lang="en"][@xml:id="id1"][not(child::node())][following-sibling::delta[@attrib="123456789"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::omega[contains(concat(@false,"$"),"nt$")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]]//psi[@xml:id="id4"][following-sibling::kappa[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]]/iota[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::zeta[contains(@attribute,"7")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::upsilon[@xml:lang="nb"][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[following-sibling::*[not(following-sibling::*)]/epsilon[@xml:lang="en-US"][following-sibling::eta[not(child::node())][following-sibling::phi[@attrib][following-sibling::delta[@attribute][@xml:lang="nb"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega xml:lang="nb"> + <upsilon xml:lang="en-GB"/> + <sigma xml:lang="no-nb"/> + <rho content="solid 1px green" xml:lang="en-GB"> + <delta attrib="_blank" xml:lang="no-nb"> + <chi insert="this-is-att-value" xml:lang="en" xml:id="id1"/> + <delta attrib="123456789" xml:id="id2"/> + <omega false="content" xml:lang="no" xml:id="id3"> + <psi xml:id="id4"/> + <kappa xml:lang="no-nb"> + <iota xml:id="id5"/> + <zeta attribute="123456789"/> + <upsilon xml:lang="nb"/> + <rho/> + <any> + <epsilon xml:lang="en-US"/> + <eta/> + <phi attrib="this.nodeValue"/> + <delta attribute="content" xml:lang="nb" xml:id="id6"> + <green>This text must be green</green> + </delta> + </any> + </kappa> + </omega> + </delta> + </rho> + </omega> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="en-GB"]//psi[@attr][@xml:id="id1"][not(preceding-sibling::*)]//omicron[@number][not(following-sibling::*)][not(following-sibling::omicron)]/kappa[@token][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/delta[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)]/phi[@class="this.nodeValue"][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::upsilon)]//eta[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::epsilon[starts-with(concat(@token,"-"),"attribute-")][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/iota][position() = 1]][position() = 1]]</xpath> + <tree> + <theta xml:lang="en-GB"> + <psi attr="another attribute value" xml:id="id1"> + <omicron number="false"> + <kappa token="attribute value" xml:lang="no"> + <delta xml:lang="en-US" xml:id="id2"> + <phi class="this.nodeValue" xml:lang="nb"/> + <upsilon xml:lang="no-nb" xml:id="id3"> + <eta xml:id="id4"/> + <epsilon token="attribute" xml:id="id5"/> + <omicron xml:lang="en-US" xml:id="id6"> + <iota> + <green>This text must be green</green> + </iota> + </omicron> + </upsilon> + </delta> + </kappa> + </omicron> + </psi> + </theta> + </tree> + </test> + <test> + <xpath>//mu[contains(@content,"ibute")]//upsilon[@xml:id="id1"]//omega[starts-with(@string,"c")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::kappa[@xml:id="id3"][not(preceding-sibling::kappa)]//iota[@xml:id="id4"][not(preceding-sibling::*)]/xi[not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <mu content="attribute"> + <upsilon xml:id="id1"> + <omega string="content" xml:id="id2"/> + <kappa xml:id="id3"> + <iota xml:id="id4"> + <xi> + <green>This text must be green</green> + </xi> + </iota> + </kappa> + </upsilon> + </mu> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="no-nb"]//alpha[starts-with(concat(@name,"-"),"attribute value-")][@xml:id="id1"][not(child::node())][following-sibling::pi[@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::zeta[@attr][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//lambda[contains(concat(@src,"$"),"ttribute value$")][@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::*[@xml:lang="en"]//phi[@delete][@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::phi[@xml:id="id4"]/beta[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::beta[starts-with(concat(@and,"-"),"this.nodeValue-")][following-sibling::*[position()=2]][following-sibling::chi[contains(concat(@data,"$"),"ttribute value$")][not(child::node())][following-sibling::epsilon[@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//*[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[@xml:lang="en-US"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <sigma xml:lang="no-nb"> + <alpha name="attribute value" xml:id="id1"/> + <pi xml:id="id2"/> + <zeta attr="true" xml:lang="no-nb"> + <lambda src="another attribute value" xml:lang="en-GB"/> + <any xml:lang="en"> + <phi delete="100%" xml:lang="no" xml:id="id3"/> + <phi xml:id="id4"> + <beta xml:id="id5"/> + <beta and="this.nodeValue"/> + <chi data="attribute value"/> + <epsilon xml:id="id6"> + <any xml:id="id7"/> + <any xml:lang="en-US" xml:id="id8"> + <green>This text must be green</green> + </any> + </epsilon> + </phi> + </any> + </zeta> + </sigma> + </tree> + </test> + <test> + <xpath>//mu//mu[@insert][@xml:lang="nb"][@xml:id="id1"]//phi[@xml:id="id2"][not(child::node())][following-sibling::mu[@content][@xml:id="id3"][following-sibling::tau[preceding-sibling::*[position() = 2]]//epsilon[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::*[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::rho[@name][@xml:id="id4"][not(following-sibling::*)][not(preceding-sibling::rho)]/tau[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::gamma[@content][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <mu> + <mu insert="false" xml:lang="nb" xml:id="id1"> + <phi xml:id="id2"/> + <mu content="attribute" xml:id="id3"/> + <tau> + <epsilon xml:lang="en"/> + <any xml:lang="en"/> + <rho name="content" xml:id="id4"> + <tau xml:lang="no-nb"/> + <gamma content="another attribute value" xml:lang="nb"> + <green>This text must be green</green> + </gamma> + </rho> + </tau> + </mu> + </mu> + </tree> + </test> + <test> + <xpath>//beta/alpha[starts-with(concat(@false,"-"),"123456789-")][@xml:lang="no-nb"][not(child::node())][following-sibling::phi[@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:lang="nb"][not(following-sibling::*)][not(preceding-sibling::theta)]/omega[contains(@token,"ue")][not(preceding-sibling::*)]/zeta[starts-with(@title,"t")][not(following-sibling::*)]/kappa[@data="attribute"][following-sibling::rho[@xml:lang="no"][not(child::node())][following-sibling::delta[@xml:id="id2"][preceding-sibling::*[position() = 2]]//delta[@number][@xml:lang="en-GB"][not(preceding-sibling::*)]//theta[@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:id="id5"][not(following-sibling::*)]//eta[@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:lang="nb"][not(following-sibling::*)]/eta[@xml:lang="nb"]//xi[@xml:id="id6"][following-sibling::eta[@xml:lang="no-nb"][not(child::node())][following-sibling::delta[@delete="this-is-att-value"][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::delta)][following-sibling::mu[starts-with(concat(@true,"-"),"solid 1px green-")][preceding-sibling::*[position() = 3]]][position() = 1]]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta> + <alpha false="123456789" xml:lang="no-nb"/> + <phi xml:id="id1"/> + <theta xml:lang="nb"> + <omega token="this-is-att-value"> + <zeta title="true"> + <kappa data="attribute"/> + <rho xml:lang="no"/> + <delta xml:id="id2"> + <delta number="attribute value" xml:lang="en-GB"> + <theta xml:lang="en" xml:id="id3"> + <sigma xml:lang="no" xml:id="id4"/> + <beta xml:id="id5"> + <eta xml:lang="en"/> + <psi xml:lang="nb"> + <eta xml:lang="nb"> + <xi xml:id="id6"/> + <eta xml:lang="no-nb"/> + <delta delete="this-is-att-value" xml:lang="no"/> + <mu true="solid 1px green"> + <green>This text must be green</green> + </mu> + </eta> + </psi> + </beta> + </theta> + </delta> + </delta> + </zeta> + </omega> + </theta> + </beta> + </tree> + </test> + <test> + <xpath>//*/theta[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/rho[starts-with(concat(@src,"-"),"100%-")]/iota[@delete][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]//chi/sigma[@or][@xml:lang="en-US"][following-sibling::omicron[contains(@attrib,"lue")][preceding-sibling::*[position() = 1]]/chi[not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="no"][following-sibling::*[position()=3]][following-sibling::upsilon[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::pi[@attribute][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[contains(@delete,"00%")][not(following-sibling::*)]//omicron[@xml:lang="en-US"][@xml:id="id3"][following-sibling::beta[@insert][@xml:id="id4"][not(child::node())][following-sibling::epsilon[contains(concat(@token,"$"),"e$")][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 2]]//epsilon[@xml:lang="no-nb"][not(preceding-sibling::*)]/chi[contains(concat(@and,"$"),"ank$")][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[contains(@name,"nt")][@xml:lang="en-GB"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::omicron)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any> + <theta xml:lang="en" xml:id="id1"> + <rho src="100%"> + <iota delete="123456789" xml:lang="en" xml:id="id2"> + <chi> + <sigma or="100%" xml:lang="en-US"/> + <omicron attrib="attribute-value"> + <chi> + <rho xml:lang="no"/> + <upsilon xml:lang="en-GB"/> + <pi attribute="attribute-value"/> + <tau delete="100%"> + <omicron xml:lang="en-US" xml:id="id3"/> + <beta insert="false" xml:id="id4"/> + <epsilon token="attribute-value" xml:lang="en-US" xml:id="id5"> + <epsilon xml:lang="no-nb"> + <chi and="_blank"/> + <omicron name="content" xml:lang="en-GB" xml:id="id6"> + <green>This text must be green</green> + </omicron> + </epsilon> + </epsilon> + </tau> + </chi> + </omicron> + </chi> + </iota> + </rho> + </theta> + </any> + </tree> + </test> + <test> + <xpath>//omega[@xml:lang="en"]/upsilon[@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)]//mu[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[starts-with(@attribute,"att")][@xml:id="id3"][not(following-sibling::*)]/lambda[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::zeta[contains(concat(@true,"$"),"lue$")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/beta[starts-with(concat(@src,"-"),"another attribute value-")][not(preceding-sibling::*)][following-sibling::mu//tau[not(following-sibling::*)]//sigma[@xml:lang="en-GB"][not(preceding-sibling::*)]/pi[starts-with(concat(@attrib,"-"),"_blank-")][@xml:lang="nb"][not(following-sibling::*)]/iota[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-GB"][not(following-sibling::*)]/phi[@xml:lang="en-US"]//omega[@data][@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)]//omega[contains(@desciption,"lue")][@xml:id="id10"][not(preceding-sibling::*)]/nu[contains(concat(@desciption,"$"),"deValue$")][@xml:lang="no"][following-sibling::delta[@xml:id="id11"][following-sibling::upsilon[@xml:lang="en-GB"][@xml:id="id12"][following-sibling::iota[starts-with(concat(@string,"-"),"attribute-")][preceding-sibling::*[position() = 3]][following-sibling::upsilon[@xml:id="id13"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]]]]</xpath> + <tree> + <omega xml:lang="en"> + <upsilon xml:lang="no-nb" xml:id="id1"> + <mu xml:id="id2"/> + <chi/> + <chi attribute="attribute value" xml:id="id3"> + <lambda xml:lang="en-US" xml:id="id4"/> + <zeta true="attribute value" xml:id="id5"> + <zeta xml:id="id6"/> + <epsilon xml:id="id7"> + <beta src="another attribute value"/> + <mu> + <tau> + <sigma xml:lang="en-GB"> + <pi attrib="_blank" xml:lang="nb"> + <iota xml:lang="en-GB" xml:id="id8"/> + <theta xml:lang="en-GB"> + <phi xml:lang="en-US"> + <omega data="_blank" xml:lang="en" xml:id="id9"> + <omega desciption="attribute-value" xml:id="id10"> + <nu desciption="this.nodeValue" xml:lang="no"/> + <delta xml:id="id11"/> + <upsilon xml:lang="en-GB" xml:id="id12"/> + <iota string="attribute-value"/> + <upsilon xml:id="id13"> + <green>This text must be green</green> + </upsilon> + </omega> + </omega> + </phi> + </theta> + </pi> + </sigma> + </tau> + </mu> + </epsilon> + </zeta> + </chi> + </upsilon> + </omega> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="nb"]/epsilon[not(following-sibling::*)]/omega[starts-with(concat(@title,"-"),"false-")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[contains(concat(@delete,"$"),"e-value$")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]//lambda[contains(concat(@attribute,"$"),"is-att-value$")][@xml:id="id3"][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"]/chi[@or][not(following-sibling::*)]/delta[contains(concat(@desciption,"$"),"bute value$")][@xml:lang="en-GB"][@xml:id="id4"]//gamma[not(preceding-sibling::*)]/chi[@content][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(concat(@number,"$"),"blank$")][@xml:id="id5"][preceding-sibling::*[position() = 1]]/pi[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[starts-with(@false,"attribute val")][not(following-sibling::*)]//alpha[contains(concat(@object,"$"),"ank$")][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@attrib="this.nodeValue"][@xml:lang="nb"][not(preceding-sibling::*)]//rho[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][position() = 1]]]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="nb"> + <epsilon> + <omega title="false" xml:id="id1"> + <mu delete="attribute-value" xml:lang="en"/> + <alpha xml:lang="no" xml:id="id2"> + <lambda attribute="this-is-att-value" xml:id="id3"/> + <kappa xml:lang="no-nb"> + <chi or="true"> + <delta desciption="attribute value" xml:lang="en-GB" xml:id="id4"> + <gamma> + <chi content="attribute" xml:lang="no"/> + <sigma number="_blank" xml:id="id5"> + <pi xml:lang="en-GB" xml:id="id6"/> + <upsilon false="attribute value"> + <alpha object="_blank"> + <rho attrib="this.nodeValue" xml:lang="nb"> + <rho xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </rho> + </rho> + </alpha> + </upsilon> + </sigma> + </gamma> + </delta> + </chi> + </kappa> + </alpha> + </omega> + </epsilon> + </upsilon> + </tree> + </test> + <test> + <xpath>//eta[@insert][@xml:lang="no-nb"]/omega[@xml:lang="en-US"][not(preceding-sibling::*)]/chi[@false="this.nodeValue"][@xml:id="id1"]//xi[@xml:id="id2"][following-sibling::omicron[starts-with(@att,"attribute-value")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omicron[@content="true"][preceding-sibling::*[position() = 2]][position() = 1]]]</xpath> + <tree> + <eta insert="false" xml:lang="no-nb"> + <omega xml:lang="en-US"> + <chi false="this.nodeValue" xml:id="id1"> + <xi xml:id="id2"/> + <omicron att="attribute-value"/> + <omicron content="true"> + <green>This text must be green</green> + </omicron> + </chi> + </omega> + </eta> + </tree> + </test> + <test> + <xpath>//pi/chi[@data][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::omega[@xml:id="id2"][not(child::node())][following-sibling::beta[@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id4"][not(following-sibling::*)]//omega[contains(@string,"alue")]//eta[starts-with(concat(@data,"-"),"solid 1px green-")][@xml:lang="en-GB"][@xml:id="id5"][following-sibling::*[position()=3]][not(child::node())][following-sibling::eta[contains(@attrib,"ue")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::beta[contains(@abort,"00%")][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 3]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <pi> + <chi data="solid 1px green" xml:id="id1"/> + <omega xml:id="id2"/> + <beta xml:id="id3"/> + <xi xml:lang="en-GB" xml:id="id4"> + <omega string="attribute-value"> + <eta data="solid 1px green" xml:lang="en-GB" xml:id="id5"/> + <eta attrib="true" xml:lang="en-US"/> + <delta xml:lang="no-nb"/> + <beta abort="100%" xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </beta> + </omega> + </xi> + </pi> + </tree> + </test> + <test> + <xpath>//sigma[@false][@xml:lang="no"][@xml:id="id1"]/sigma[contains(@name,"V")][@xml:id="id2"]/omega[contains(concat(@delete,"$"),"%$")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[@insert="123456789"]/mu[@xml:id="id4"][not(following-sibling::*)]/pi[@data="false"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]</xpath> + <tree> + <sigma false="_blank" xml:lang="no" xml:id="id1"> + <sigma name="this.nodeValue" xml:id="id2"> + <omega delete="100%" xml:id="id3"> + <pi insert="123456789"> + <mu xml:id="id4"> + <pi data="false" xml:id="id5"> + <green>This text must be green</green> + </pi> + </mu> + </pi> + </omega> + </sigma> + </sigma> + </tree> + </test> + <test> + <xpath>//*[@xml:lang="en-GB"][@xml:id="id1"]/tau[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[contains(@name,"is.")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/zeta[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::chi[@xml:id="id3"][following-sibling::alpha[@delete][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[starts-with(concat(@src,"-"),"attribute value-")][following-sibling::phi[@src="attribute"][following-sibling::psi[starts-with(concat(@src,"-"),"true-")][@xml:id="id5"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(preceding-sibling::psi or following-sibling::psi)][not(child::node())][following-sibling::omicron[@attribute][preceding-sibling::*[position() = 3]][following-sibling::rho[@abort="this.nodeValue"][@xml:lang="nb"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::pi[@att]/nu[not(following-sibling::*)]//theta[@token][@xml:id="id7"][not(child::node())][following-sibling::chi[not(following-sibling::*)][position() = 1]]][position() = 1]]]]]]]]</xpath> + <tree> + <any xml:lang="en-GB" xml:id="id1"> + <tau xml:lang="en"/> + <phi name="this.nodeValue" xml:lang="nb"> + <zeta xml:id="id2"/> + <chi xml:id="id3"/> + <alpha delete="123456789" xml:lang="en-GB" xml:id="id4"> + <nu src="attribute value"/> + <phi src="attribute"/> + <psi src="true" xml:id="id5"/> + <omicron attribute="this.nodeValue"/> + <rho abort="this.nodeValue" xml:lang="nb" xml:id="id6"/> + <pi att="attribute value"> + <nu> + <theta token="false" xml:id="id7"/> + <chi> + <green>This text must be green</green> + </chi> + </nu> + </pi> + </alpha> + </phi> + </any> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:id="id1"]/mu[@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::kappa[@true][@xml:id="id3"]/kappa[@xml:lang="en"][following-sibling::upsilon[starts-with(concat(@insert,"-"),"true-")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[@insert="another attribute value"][not(preceding-sibling::*)][not(child::node())][following-sibling::*//zeta[contains(@true,"1234567")][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::zeta)]/rho[starts-with(@att,"soli")][@xml:lang="en-GB"]/omicron[contains(concat(@class,"$"),"n$")][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@attr="false"][not(following-sibling::*)]/tau[@desciption="solid 1px green"][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:id="id6"][not(following-sibling::*)]//upsilon[@xml:lang="en-US"][not(following-sibling::*)]//pi[@title="solid 1px green"][@xml:id="id7"][not(preceding-sibling::*)]//kappa[@xml:lang="nb"][not(child::node())][following-sibling::nu[@or][@xml:id="id8"][not(following-sibling::*)]/sigma[following-sibling::phi[contains(@attribute,"eV")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::mu[not(following-sibling::*)]//omicron[@attr][@xml:id="id9"][not(following-sibling::*)]]]]]]]][position() = 1]]</xpath> + <tree> + <upsilon xml:id="id1"> + <mu xml:lang="en-US" xml:id="id2"/> + <kappa true="true" xml:id="id3"> + <kappa xml:lang="en"/> + <upsilon insert="true" xml:lang="no"> + <phi insert="another attribute value"/> + <any> + <zeta true="123456789" xml:lang="no-nb" xml:id="id4"> + <rho att="solid 1px green" xml:lang="en-GB"> + <omicron class="solid 1px green" xml:id="id5"/> + <upsilon attr="false"> + <tau desciption="solid 1px green" xml:lang="en-US"/> + <epsilon xml:id="id6"> + <upsilon xml:lang="en-US"> + <pi title="solid 1px green" xml:id="id7"> + <kappa xml:lang="nb"/> + <nu or="this.nodeValue" xml:id="id8"> + <sigma/> + <phi attribute="this.nodeValue" xml:lang="nb"/> + <mu> + <omicron attr="100%" xml:id="id9"> + <green>This text must be green</green> + </omicron> + </mu> + </nu> + </pi> + </upsilon> + </epsilon> + </upsilon> + </rho> + </zeta> + </any> + </upsilon> + </kappa> + </upsilon> + </tree> + </test> + <test> + <xpath>//lambda[@att]//nu[contains(concat(@desciption,"$"),"te value$")][@xml:lang="no"][@xml:id="id1"][not(child::node())][following-sibling::chi[@att][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[contains(@true,"lan")][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]/beta[contains(@content,"e v")][@xml:lang="en-US"][following-sibling::omega[@string][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(preceding-sibling::omega)][not(child::node())][following-sibling::iota[contains(@true,"e")][@xml:lang="en-GB"][@xml:id="id4"][not(following-sibling::*)]/epsilon[contains(concat(@insert,"$"),"e$")][@xml:lang="no-nb"][@xml:id="id5"]//iota[@and][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][not(child::node())][following-sibling::iota[contains(concat(@attr,"$"),"-value$")][@xml:lang="en"][@xml:id="id6"]//lambda[@xml:lang="no"][@xml:id="id7"][following-sibling::tau[contains(@or,"100")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[contains(concat(@true,"$"),"attribute$")][not(following-sibling::*)]/delta[@attribute][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::zeta[@xml:lang="en"][@xml:id="id8"]//delta[@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[starts-with(concat(@object,"-"),"true-")][@xml:lang="no-nb"]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <lambda att="false"> + <nu desciption="attribute value" xml:lang="no" xml:id="id1"/> + <chi att="attribute value" xml:id="id2"/> + <xi true="_blank" xml:lang="no-nb" xml:id="id3"> + <beta content="another attribute value" xml:lang="en-US"/> + <omega string="attribute value"/> + <iota true="false" xml:lang="en-GB" xml:id="id4"> + <epsilon insert="this-is-att-value" xml:lang="no-nb" xml:id="id5"> + <iota and="false"/> + <kappa xml:lang="no-nb"/> + <iota attr="attribute-value" xml:lang="en" xml:id="id6"> + <lambda xml:lang="no" xml:id="id7"/> + <tau or="100%"> + <xi true="attribute"> + <delta attribute="attribute value" xml:lang="en"/> + <zeta xml:lang="en" xml:id="id8"> + <delta xml:lang="en-GB" xml:id="id9"/> + <zeta object="true" xml:lang="no-nb"> + <green>This text must be green</green> + </zeta> + </zeta> + </xi> + </tau> + </iota> + </epsilon> + </iota> + </xi> + </lambda> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en-GB"][@xml:id="id1"]//psi[starts-with(@true,"a")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(@delete,"lue")][@xml:lang="en-US"][following-sibling::*[position()=1]][following-sibling::eta[contains(@insert,"ribute")][@xml:lang="en-US"]/kappa[contains(concat(@title,"$"),"te-value$")][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::sigma[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 2]][following-sibling::tau[contains(@attribute,"ute v")][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(preceding-sibling::tau)][not(child::node())][following-sibling::alpha[starts-with(@or,"attrib")][@xml:lang="en"][preceding-sibling::*[position() = 4]][following-sibling::sigma[@and][not(following-sibling::*)]][position() = 1]]]]]]]</xpath> + <tree> + <kappa xml:lang="en-GB" xml:id="id1"> + <psi true="attribute-value" xml:lang="nb" xml:id="id2"> + <iota xml:lang="en-GB" xml:id="id3"/> + <sigma delete="another attribute value" xml:lang="en-US"/> + <eta insert="attribute value" xml:lang="en-US"> + <kappa title="attribute-value" xml:lang="no-nb" xml:id="id4"/> + <sigma xml:lang="en"/> + <epsilon xml:lang="no-nb" xml:id="id5"/> + <tau attribute="attribute value" xml:lang="en-US" xml:id="id6"/> + <alpha or="attribute value" xml:lang="en"/> + <sigma and="this.nodeValue"> + <green>This text must be green</green> + </sigma> + </eta> + </psi> + </kappa> + </tree> + </test> + <test> + <xpath>//lambda//nu[@xml:lang="nb"][not(child::node())][following-sibling::lambda[contains(concat(@desciption,"$"),"id 1px green$")]//omega[@or="attribute-value"][not(child::node())][following-sibling::rho[@xml:lang="en"][@xml:id="id1"][following-sibling::*[position()=2]][not(child::node())][following-sibling::zeta[@string][@xml:lang="en"][not(child::node())][following-sibling::lambda[starts-with(@class,"this-is-a")][@xml:lang="en"][@xml:id="id2"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/eta[contains(@attr," green")]/epsilon[starts-with(concat(@content,"-"),"123456789-")][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::zeta[@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/eta[@token][not(preceding-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <lambda> + <nu xml:lang="nb"/> + <lambda desciption="solid 1px green"> + <omega or="attribute-value"/> + <rho xml:lang="en" xml:id="id1"/> + <zeta string="attribute" xml:lang="en"/> + <lambda class="this-is-att-value" xml:lang="en" xml:id="id2"> + <eta attr="solid 1px green"> + <epsilon content="123456789"/> + <zeta xml:id="id3"> + <eta token="true"> + <green>This text must be green</green> + </eta> + </zeta> + </eta> + </lambda> + </lambda> + </lambda> + </tree> + </test> + <test> + <xpath>//kappa[@xml:id="id1"]/xi[@xml:lang="no-nb"]/sigma[@string="true"][@xml:lang="en"][@xml:id="id2"][following-sibling::gamma[@name][@xml:id="id3"][not(preceding-sibling::gamma)][following-sibling::chi[@false][@xml:id="id4"][following-sibling::epsilon[starts-with(@string,"false")][@xml:id="id5"][preceding-sibling::*[position() = 3]][following-sibling::xi[@data="solid 1px green"][@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 4]]/mu[@attrib="_blank"][@xml:lang="en-GB"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::gamma[@desciption="content"][not(following-sibling::*)]//gamma[@and][@xml:lang="no"][following-sibling::psi[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::psi[contains(@attribute,"n")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]/lambda[@xml:id="id8"][not(preceding-sibling::*)][following-sibling::nu[starts-with(@name,"s")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[starts-with(concat(@true,"-"),"this.nodeValue-")][@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa xml:id="id1"> + <xi xml:lang="no-nb"> + <sigma string="true" xml:lang="en" xml:id="id2"/> + <gamma name="123456789" xml:id="id3"/> + <chi false="true" xml:id="id4"/> + <epsilon string="false" xml:id="id5"/> + <xi data="solid 1px green" xml:lang="en-US" xml:id="id6"> + <mu attrib="_blank" xml:lang="en-GB" xml:id="id7"/> + <gamma desciption="content"> + <gamma and="this-is-att-value" xml:lang="no"/> + <psi xml:lang="en"/> + <psi attribute="solid 1px green" xml:lang="nb"> + <lambda xml:id="id8"/> + <nu name="solid 1px green" xml:lang="en"> + <zeta true="this.nodeValue" xml:lang="no-nb"/> + <omicron xml:lang="en-US" xml:id="id9"> + <green>This text must be green</green> + </omicron> + </nu> + </psi> + </gamma> + </xi> + </xi> + </kappa> + </tree> + </test> + <test> + <xpath>//pi//beta[starts-with(concat(@data,"-"),"false-")][not(preceding-sibling::*)][following-sibling::upsilon[contains(concat(@name,"$"),"se$")][@xml:id="id1"]/alpha[@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]/mu[@xml:id="id3"]//lambda[@xml:lang="no-nb"][following-sibling::*[position()=5]][following-sibling::psi[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::rho[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::tau[@xml:lang="no-nb"][following-sibling::alpha[@name="this-is-att-value"][@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::gamma[@xml:id="id5"][not(following-sibling::*)]//theta[not(preceding-sibling::*)]/xi[@object][@xml:lang="en-GB"][not(child::node())][following-sibling::chi[@or][@xml:lang="no-nb"]]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <pi> + <beta data="false"/> + <upsilon name="false" xml:id="id1"> + <alpha xml:lang="en-US" xml:id="id2"> + <mu xml:id="id3"> + <lambda xml:lang="no-nb"/> + <psi xml:lang="en-US"/> + <rho xml:id="id4"/> + <tau xml:lang="no-nb"/> + <alpha name="this-is-att-value" xml:lang="nb"/> + <gamma xml:id="id5"> + <theta> + <xi object="123456789" xml:lang="en-GB"/> + <chi or="attribute" xml:lang="no-nb"> + <green>This text must be green</green> + </chi> + </theta> + </gamma> + </mu> + </alpha> + </upsilon> + </pi> + </tree> + </test> + <test> + <xpath>//mu[@token="100%"]//psi[@xml:lang="en-US"][not(preceding-sibling::*)]//nu[starts-with(@token,"another attri")][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="nb"][preceding-sibling::*[position() = 1]]/mu[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@xml:lang="en"][not(following-sibling::*)]/*[@xml:id="id3"][not(following-sibling::*)]/zeta[@xml:id="id4"][not(following-sibling::*)]//sigma[contains(@true,"6789")][following-sibling::*[position()=3]][following-sibling::rho[@and][@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[not(child::node())][following-sibling::zeta[starts-with(concat(@name,"-"),"100%-")][@xml:id="id6"][not(following-sibling::*)][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <mu token="100%"> + <psi xml:lang="en-US"> + <nu token="another attribute value" xml:id="id1"/> + <tau xml:lang="nb"> + <mu xml:lang="en-US" xml:id="id2"> + <sigma/> + <upsilon xml:lang="en"> + <any xml:id="id3"> + <zeta xml:id="id4"> + <sigma true="123456789"/> + <rho and="100%" xml:lang="no" xml:id="id5"/> + <beta/> + <zeta name="100%" xml:id="id6"> + <green>This text must be green</green> + </zeta> + </zeta> + </any> + </upsilon> + </mu> + </tau> + </psi> + </mu> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]//mu[@attrib="123456789"][@xml:id="id2"][not(following-sibling::*)]/upsilon[starts-with(concat(@number,"-"),"attribute value-")][@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)]/upsilon[starts-with(@name,"attribute")][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@att="true"][@xml:lang="en-GB"][not(following-sibling::*)]/iota[starts-with(concat(@content,"-"),"100%-")][@xml:id="id5"][not(preceding-sibling::*)]//sigma[starts-with(@delete,"100%")][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::zeta[@attr][@xml:lang="en-US"][@xml:id="id7"][following-sibling::gamma[@xml:lang="nb"][@xml:id="id8"][not(child::node())][following-sibling::phi[starts-with(@and,"this-is-att")][@xml:lang="nb"][preceding-sibling::*[position() = 3]]//zeta[@xml:lang="en-GB"][@xml:id="id9"]//mu[@xml:lang="en-US"]/theta[@xml:id="id10"][following-sibling::gamma[contains(concat(@abort,"$"),"alse$")][@xml:id="id11"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:lang="en-GB"][not(following-sibling::*)]/delta[starts-with(concat(@attribute,"-"),"another attribute value-")][@xml:lang="no-nb"][@xml:id="id12"]//kappa[contains(concat(@desciption,"$"),"alue$")][@xml:lang="en"][@xml:id="id13"][following-sibling::delta[@delete][not(following-sibling::*)]//omicron[@src][@xml:id="id14"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::nu[@xml:lang="en-US"][@xml:id="id15"][preceding-sibling::*[position() = 1]][following-sibling::pi[@string="another attribute value"][preceding-sibling::*[position() = 2]]/gamma[@src][@xml:id="id16"][not(child::node())][following-sibling::*[@true][@xml:lang="no"][@xml:id="id17"][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi xml:id="id1"> + <mu attrib="123456789" xml:id="id2"> + <upsilon number="attribute value" xml:lang="no-nb" xml:id="id3"> + <upsilon name="attribute-value" xml:lang="en" xml:id="id4"/> + <sigma att="true" xml:lang="en-GB"> + <iota content="100%" xml:id="id5"> + <sigma delete="100%" xml:lang="en-GB" xml:id="id6"/> + <zeta attr="false" xml:lang="en-US" xml:id="id7"/> + <gamma xml:lang="nb" xml:id="id8"/> + <phi and="this-is-att-value" xml:lang="nb"> + <zeta xml:lang="en-GB" xml:id="id9"> + <mu xml:lang="en-US"> + <theta xml:id="id10"/> + <gamma abort="false" xml:id="id11"/> + <delta xml:lang="en-GB"> + <delta attribute="another attribute value" xml:lang="no-nb" xml:id="id12"> + <kappa desciption="attribute-value" xml:lang="en" xml:id="id13"/> + <delta delete="_blank"> + <omicron src="true" xml:id="id14"/> + <nu xml:lang="en-US" xml:id="id15"/> + <pi string="another attribute value"> + <gamma src="attribute" xml:id="id16"/> + <any true="_blank" xml:lang="no" xml:id="id17"> + <green>This text must be green</green> + </any> + </pi> + </delta> + </delta> + </delta> + </mu> + </zeta> + </phi> + </iota> + </sigma> + </upsilon> + </mu> + </xi> + </tree> + </test> + <test> + <xpath>//alpha[@xml:id="id1"]/theta[@xml:lang="no"][not(following-sibling::*)]//rho[@or][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::rho[contains(concat(@token,"$"),"true$")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/pi[starts-with(@content,"_")][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::*[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//*[@xml:lang="nb"][@xml:id="id4"][not(child::node())][following-sibling::phi[contains(concat(@name,"$"),"ntent$")][@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//omega[starts-with(concat(@data,"-"),"content-")][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <alpha xml:id="id1"> + <theta xml:lang="no"> + <rho or="solid 1px green" xml:id="id2"/> + <rho token="true" xml:lang="nb"> + <pi content="_blank"/> + <omicron xml:lang="en-US" xml:id="id3"/> + <any> + <any xml:lang="nb" xml:id="id4"/> + <phi name="content" xml:lang="en-US" xml:id="id5"> + <omega data="content"> + <green>This text must be green</green> + </omega> + </phi> + </any> + </rho> + </theta> + </alpha> + </tree> + </test> + <test> + <xpath>//upsilon[contains(@object,"-is-at")][@xml:lang="en-GB"]//mu[@or="false"][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@name][@xml:id="id2"][not(preceding-sibling::*)]/iota[@token][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::iota)]/xi[@title="content"][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::chi[starts-with(concat(@abort,"-"),"solid 1px green-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@src="another attribute value"][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]]</xpath> + <tree> + <upsilon object="this-is-att-value" xml:lang="en-GB"> + <mu or="false" xml:lang="en-US" xml:id="id1"> + <rho name="this.nodeValue" xml:id="id2"> + <iota token="solid 1px green" xml:lang="no"> + <xi title="content" xml:lang="en"/> + <chi abort="solid 1px green"> + <beta src="another attribute value" xml:lang="no" xml:id="id3"> + <green>This text must be green</green> + </beta> + </chi> + </iota> + </rho> + </mu> + </upsilon> + </tree> + </test> + <test> + <xpath>//phi[contains(concat(@data,"$"),"tribute$")][@xml:lang="no-nb"][@xml:id="id1"]//kappa[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::*[position()=3]][following-sibling::iota[@string][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[not(following-sibling::*)]//lambda[@false="content"][following-sibling::*[position()=2]][not(child::node())][following-sibling::phi[@xml:lang="en"][following-sibling::sigma[starts-with(@object,"this.nodeValu")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]]/sigma[@attribute][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[starts-with(concat(@string,"-"),"this-")][@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@object][@xml:id="id8"][following-sibling::*[position()=2]][following-sibling::delta[starts-with(@insert,"this-is-a")][@xml:id="id9"][following-sibling::eta[@xml:id="id10"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//tau[starts-with(@true,"con")][@xml:lang="en-GB"][@xml:id="id11"][following-sibling::kappa[starts-with(@title,"fal")][@xml:lang="en-GB"][@xml:id="id12"][preceding-sibling::*[position() = 1]]/delta[@string][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi data="attribute" xml:lang="no-nb" xml:id="id1"> + <kappa xml:lang="en-GB" xml:id="id2"/> + <iota string="content" xml:lang="no" xml:id="id3"/> + <upsilon xml:id="id4"/> + <lambda> + <lambda false="content"/> + <phi xml:lang="en"/> + <sigma object="this.nodeValue" xml:lang="no-nb"> + <sigma attribute="attribute-value" xml:lang="en"> + <upsilon xml:lang="no"/> + <iota xml:lang="en-US" xml:id="id5"> + <upsilon string="this-is-att-value" xml:lang="en-GB" xml:id="id6"/> + <omicron xml:lang="no" xml:id="id7"/> + <kappa object="_blank" xml:id="id8"/> + <delta insert="this-is-att-value" xml:id="id9"/> + <eta xml:id="id10"> + <tau true="content" xml:lang="en-GB" xml:id="id11"/> + <kappa title="false" xml:lang="en-GB" xml:id="id12"> + <delta string="attribute-value" xml:lang="no-nb"/> + <epsilon xml:lang="en-GB"> + <green>This text must be green</green> + </epsilon> + </kappa> + </eta> + </iota> + </sigma> + </sigma> + </lambda> + </phi> + </tree> + </test> + <test> + <xpath>//tau[@name="content"][@xml:id="id1"]//*[contains(@and,"blank")][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[starts-with(concat(@string,"-"),"attribute-")][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@token="this-is-att-value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/theta[@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[@title="100%"][not(preceding-sibling::*)]/epsilon[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::iota[contains(@title,"e")][@xml:id="id7"][following-sibling::lambda[@xml:id="id8"]//mu[@object="this.nodeValue"][@xml:lang="en-US"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)][not(following-sibling::chi)]/psi[starts-with(@insert,"false")][following-sibling::rho[contains(concat(@desciption,"$"),"456789$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau name="content" xml:id="id1"> + <any and="_blank" xml:id="id2"/> + <phi string="attribute-value" xml:lang="en-GB" xml:id="id3"/> + <nu token="this-is-att-value"> + <theta xml:id="id4"> + <omega title="100%"> + <epsilon xml:id="id5"> + <upsilon xml:id="id6"/> + <iota title="true" xml:id="id7"/> + <lambda xml:id="id8"> + <mu object="this.nodeValue" xml:lang="en-US" xml:id="id9"> + <chi xml:id="id10"> + <psi insert="false"/> + <rho desciption="123456789" xml:lang="en-GB"> + <green>This text must be green</green> + </rho> + </chi> + </mu> + </lambda> + </epsilon> + </omega> + </theta> + </nu> + </tau> + </tree> + </test> + <test> + <xpath>//phi[@true][@xml:lang="en-GB"][@xml:id="id1"]/iota[@insert][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::zeta[not(following-sibling::*)]//xi[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:lang="no-nb"][not(child::node())][following-sibling::gamma[contains(concat(@attribute,"$"),"ue$")][@xml:id="id3"]/zeta[@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[preceding-sibling::*[position() = 1]]/nu[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[starts-with(@attrib,"_blan")][preceding-sibling::*[position() = 1]][following-sibling::iota[contains(concat(@title,"$"),"e$")][@xml:lang="en-GB"][@xml:id="id6"][following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:lang="en-US"][following-sibling::nu[preceding-sibling::*[position() = 4]]/theta[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[@string="this.nodeValue"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:lang="no-nb"][@xml:id="id8"]/gamma[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[starts-with(concat(@title,"-"),"this-")][@xml:id="id9"][preceding-sibling::*[position() = 1]][following-sibling::epsilon[@xml:lang="en-US"][not(following-sibling::*)]//kappa[following-sibling::theta[contains(@object,"ttribute-val")][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]]]</xpath> + <tree> + <phi true="attribute value" xml:lang="en-GB" xml:id="id1"> + <iota insert="123456789" xml:lang="en" xml:id="id2"/> + <zeta> + <xi xml:lang="no"> + <iota xml:lang="no-nb"/> + <gamma attribute="this.nodeValue" xml:id="id3"> + <zeta xml:id="id4"/> + <theta> + <nu xml:lang="no" xml:id="id5"/> + <gamma attrib="_blank"/> + <iota title="true" xml:lang="en-GB" xml:id="id6"/> + <mu xml:lang="en-US"/> + <nu> + <theta xml:id="id7"/> + <beta string="this.nodeValue"/> + <delta xml:lang="no-nb" xml:id="id8"> + <gamma xml:lang="no-nb"/> + <nu title="this-is-att-value" xml:id="id9"/> + <epsilon xml:lang="en-US"> + <kappa/> + <theta object="attribute-value"> + <green>This text must be green</green> + </theta> + </epsilon> + </delta> + </nu> + </theta> + </gamma> + </xi> + </zeta> + </phi> + </tree> + </test> + <test> + <xpath>//theta[@delete][@xml:lang="no"][@xml:id="id1"]/theta[starts-with(concat(@content,"-"),"true-")][not(following-sibling::*)]/mu[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:id="id3"][not(following-sibling::*)]//*[contains(@true,"a")][not(preceding-sibling::*)][following-sibling::omicron[@xml:lang="nb"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[starts-with(@object,"conten")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/omega[not(preceding-sibling::omega)]//pi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[contains(@and,"nk")][@xml:id="id5"][not(child::node())][following-sibling::delta[@xml:id="id6"][not(following-sibling::*)]/mu[@or][following-sibling::omicron[starts-with(@or,"anot")][following-sibling::kappa[@src][preceding-sibling::*[position() = 2]][following-sibling::delta[starts-with(concat(@attrib,"-"),"true-")][@xml:lang="no"][@xml:id="id7"]]][position() = 1]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <theta delete="true" xml:lang="no" xml:id="id1"> + <theta content="true"> + <mu xml:id="id2"/> + <alpha xml:lang="nb"/> + <pi xml:id="id3"> + <any true="this-is-att-value"/> + <omicron xml:lang="nb" xml:id="id4"/> + <mu object="content" xml:lang="en-US"> + <omega> + <pi xml:lang="no-nb"/> + <alpha and="_blank" xml:id="id5"/> + <delta xml:id="id6"> + <mu or="false"/> + <omicron or="another attribute value"/> + <kappa src="attribute"/> + <delta attrib="true" xml:lang="no" xml:id="id7"> + <green>This text must be green</green> + </delta> + </delta> + </omega> + </mu> + </pi> + </theta> + </theta> + </tree> + </test> + <test> + <xpath>//sigma[starts-with(concat(@desciption,"-"),"100%-")][@xml:lang="nb"][@xml:id="id1"]/epsilon[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)]/pi[@xml:lang="no"]//epsilon[contains(concat(@number,"$"),"0%$")][@xml:lang="no"][not(following-sibling::*)]/mu[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::omicron[@content="attribute-value"][@xml:lang="no-nb"]]</xpath> + <tree> + <sigma desciption="100%" xml:lang="nb" xml:id="id1"> + <epsilon xml:lang="no-nb" xml:id="id2"> + <pi xml:lang="no"> + <epsilon number="100%" xml:lang="no"> + <mu xml:lang="no"/> + <omicron content="attribute-value" xml:lang="no-nb"> + <green>This text must be green</green> + </omicron> + </epsilon> + </pi> + </epsilon> + </sigma> + </tree> + </test> + <test> + <xpath>//psi[starts-with(@attribute,"soli")][@xml:id="id1"]/alpha[starts-with(@delete,"100")][@xml:id="id2"][not(following-sibling::*)]//eta//kappa[following-sibling::eta[not(following-sibling::*)]/lambda[not(child::node())][following-sibling::upsilon[contains(@attr,"u")][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::zeta[@content="content"][@xml:lang="no-nb"][@xml:id="id4"][not(child::node())][following-sibling::chi[@xml:lang="en"][following-sibling::phi[starts-with(@string,"cont")][@xml:lang="nb"][preceding-sibling::*[position() = 4]]/sigma[contains(@false,"ont")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@xml:id="id6"][not(following-sibling::*)]/omega[@xml:id="id7"]/tau[contains(@desciption,"lan")][@xml:lang="en-GB"][@xml:id="id8"][not(following-sibling::*)]/chi[@abort="false"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[@xml:id="id9"]][position() = 1]]]]]</xpath> + <tree> + <psi attribute="solid 1px green" xml:id="id1"> + <alpha delete="100%" xml:id="id2"> + <eta> + <kappa/> + <eta> + <lambda/> + <upsilon attr="attribute" xml:lang="en-US" xml:id="id3"/> + <zeta content="content" xml:lang="no-nb" xml:id="id4"/> + <chi xml:lang="en"/> + <phi string="content" xml:lang="nb"> + <sigma false="content" xml:id="id5"> + <delta xml:id="id6"> + <omega xml:id="id7"> + <tau desciption="_blank" xml:lang="en-GB" xml:id="id8"> + <chi abort="false"> + <tau xml:id="id9"> + <green>This text must be green</green> + </tau> + </chi> + </tau> + </omega> + </delta> + </sigma> + </phi> + </eta> + </eta> + </alpha> + </psi> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]/phi[@xml:id="id2"][not(child::node())][following-sibling::mu[starts-with(@title,"this.n")][preceding-sibling::*[position() = 1]][following-sibling::rho[not(child::node())][following-sibling::psi[@xml:lang="en"][@xml:id="id3"]//tau[@xml:id="id4"][not(preceding-sibling::*)]//zeta[starts-with(concat(@object,"-"),"another attribute value-")][@xml:lang="en"][not(preceding-sibling::*)]/sigma[contains(@abort,"ribute")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[contains(@insert,"e")][@xml:id="id5"][preceding-sibling::*[position() = 1]]//iota[contains(concat(@number,"$"),"se$")][@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::iota)]/pi[not(preceding-sibling::*)]/omega[@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[contains(@attribute,"ue")][@xml:lang="en"][@xml:id="id8"][not(following-sibling::*)]/psi[@data][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::pi[contains(concat(@or,"$"),"ribute-value$")][@xml:lang="en-US"][following-sibling::phi[@att="attribute value"][@xml:id="id10"][preceding-sibling::*[position() = 2]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu xml:id="id1"> + <phi xml:id="id2"/> + <mu title="this.nodeValue"/> + <rho/> + <psi xml:lang="en" xml:id="id3"> + <tau xml:id="id4"> + <zeta object="another attribute value" xml:lang="en"> + <sigma abort="attribute"/> + <sigma insert="true" xml:id="id5"> + <iota number="false" xml:lang="nb" xml:id="id6"> + <pi> + <omega xml:lang="en-US" xml:id="id7"> + <eta attribute="this-is-att-value" xml:lang="en" xml:id="id8"> + <psi data="another attribute value" xml:id="id9"/> + <pi or="attribute-value" xml:lang="en-US"/> + <phi att="attribute value" xml:id="id10"> + <green>This text must be green</green> + </phi> + </eta> + </omega> + </pi> + </iota> + </sigma> + </zeta> + </tau> + </psi> + </mu> + </tree> + </test> + <test> + <xpath>//pi[contains(concat(@and,"$"),"r attribute value$")]//nu[starts-with(@attrib,"100%")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::psi[contains(concat(@name,"$"),"0%$")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::tau[@xml:id="id1"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//sigma[not(child::node())][following-sibling::upsilon[@false][@xml:lang="nb"][@xml:id="id2"]/epsilon[starts-with(@and,"another at")]/pi[@string][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::eta[@string="attribute"][@xml:lang="en-GB"][following-sibling::pi[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[@xml:lang="nb"][not(preceding-sibling::*)]//sigma[not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@false][@xml:lang="en-US"][preceding-sibling::*[position() = 1]]/pi[contains(@true,"ther attribute value")][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]/theta[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[@xml:lang="no"][not(preceding-sibling::xi)][not(child::node())][following-sibling::phi[@xml:id="id5"][preceding-sibling::*[position() = 1]]/theta[starts-with(@attr,"fals")][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[contains(@insert,"nt")]][position() = 1]]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <pi and="another attribute value"> + <nu attrib="100%" xml:lang="en-US"/> + <psi name="100%" xml:lang="en-US"/> + <tau xml:id="id1"> + <sigma/> + <upsilon false="attribute" xml:lang="nb" xml:id="id2"> + <epsilon and="another attribute value"> + <pi string="100%" xml:lang="en-US"/> + <eta string="attribute" xml:lang="en-GB"/> + <pi xml:lang="en" xml:id="id3"> + <alpha xml:lang="nb"> + <sigma/> + <sigma false="100%" xml:lang="en-US"> + <pi true="another attribute value" xml:lang="no-nb" xml:id="id4"> + <theta xml:lang="nb"/> + <alpha> + <xi xml:lang="no"/> + <phi xml:id="id5"> + <theta attr="false" xml:id="id6"/> + <iota insert="content"> + <green>This text must be green</green> + </iota> + </phi> + </alpha> + </pi> + </sigma> + </alpha> + </pi> + </epsilon> + </upsilon> + </tau> + </pi> + </tree> + </test> + <test> + <xpath>//mu[@xml:id="id1"]/upsilon//psi[starts-with(concat(@attr,"-"),"_blank-")][@xml:id="id2"][not(preceding-sibling::*)]//epsilon[starts-with(@delete,"1234")][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:id="id3"][not(following-sibling::*)]//sigma[@object][@xml:lang="en"][not(preceding-sibling::*)]/beta[@class][@xml:lang="nb"]//*[not(child::node())][following-sibling::phi[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[@true][not(preceding-sibling::*)][not(following-sibling::*)]//psi[not(preceding-sibling::*)][not(following-sibling::*)]]]</xpath> + <tree> + <mu xml:id="id1"> + <upsilon> + <psi attr="_blank" xml:id="id2"> + <epsilon delete="123456789"/> + <lambda xml:id="id3"> + <sigma object="this-is-att-value" xml:lang="en"> + <beta class="attribute" xml:lang="nb"> + <any/> + <phi xml:id="id4"> + <upsilon true="attribute-value"> + <psi> + <green>This text must be green</green> + </psi> + </upsilon> + </phi> + </beta> + </sigma> + </lambda> + </psi> + </upsilon> + </mu> + </tree> + </test> + <test> + <xpath>//theta[contains(@name,"89")][@xml:lang="no"]/eta[contains(concat(@attribute,"$"),"e$")][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::alpha[@xml:lang="no-nb"][@xml:id="id1"][not(child::node())][following-sibling::tau[@xml:lang="nb"][not(following-sibling::*)]/iota[contains(concat(@data,"$"),"bute$")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::eta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]]]]</xpath> + <tree> + <theta name="123456789" xml:lang="no"> + <eta attribute="false"/> + <alpha xml:lang="no-nb" xml:id="id1"/> + <tau xml:lang="nb"> + <iota data="attribute" xml:lang="en-GB"/> + <eta> + <green>This text must be green</green> + </eta> + </tau> + </theta> + </tree> + </test> + <test> + <xpath>//xi[@xml:id="id1"]/omicron[@xml:id="id2"][not(following-sibling::*)]/pi[contains(@string,"t")]//eta[@xml:lang="en-GB"]/beta[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[not(following-sibling::*)]/psi[starts-with(concat(@attribute,"-"),"false-")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@att="attribute"][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::phi[@xml:lang="nb"][@xml:id="id4"]//kappa[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::mu[contains(@or,"co")][@xml:lang="en-GB"][not(child::node())][following-sibling::alpha[contains(@src,"12345")][@xml:lang="no-nb"][not(following-sibling::*)]//lambda[starts-with(@attrib,"123456")][@xml:lang="en"][@xml:id="id5"]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <xi xml:id="id1"> + <omicron xml:id="id2"> + <pi string="content"> + <eta xml:lang="en-GB"> + <beta xml:lang="nb"/> + <rho> + <psi attribute="false" xml:id="id3"> + <delta att="attribute" xml:lang="no-nb"/> + <phi xml:lang="nb" xml:id="id4"> + <kappa xml:lang="no"/> + <mu or="content" xml:lang="en-GB"/> + <alpha src="123456789" xml:lang="no-nb"> + <lambda attrib="123456789" xml:lang="en" xml:id="id5"> + <green>This text must be green</green> + </lambda> + </alpha> + </phi> + </psi> + </rho> + </eta> + </pi> + </omicron> + </xi> + </tree> + </test> + <test> + <xpath>//*/eta[starts-with(@attr,"conten")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::eta)][following-sibling::xi[@xml:lang="en-US"][@xml:id="id2"][following-sibling::xi[@xml:lang="no"][preceding-sibling::*[position() = 2]]//alpha[starts-with(concat(@data,"-"),"attribute-")][@xml:id="id3"][not(child::node())][following-sibling::chi[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::psi[@xml:id="id4"][following-sibling::kappa[@xml:id="id5"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any> + <eta attr="content" xml:lang="en-US" xml:id="id1"/> + <xi xml:lang="en-US" xml:id="id2"/> + <xi xml:lang="no"> + <alpha data="attribute-value" xml:id="id3"/> + <chi xml:lang="en"/> + <psi xml:id="id4"/> + <kappa xml:id="id5"> + <green>This text must be green</green> + </kappa> + </xi> + </any> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="en"]/upsilon[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[starts-with(@attr,"fals")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[@attr][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]//sigma[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@att][position() = 1]]]</xpath> + <tree> + <pi xml:lang="en"> + <upsilon xml:id="id1"/> + <psi attr="false"> + <delta attr="_blank" xml:lang="nb" xml:id="id2"> + <sigma xml:lang="en-US"/> + <epsilon att="this.nodeValue"> + <green>This text must be green</green> + </epsilon> + </delta> + </psi> + </pi> + </tree> + </test> + <test> + <xpath>//iota[@attrib][@xml:id="id1"]//phi[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::*[@delete][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/theta[starts-with(@title,"this-is-att-val")][not(preceding-sibling::*)][following-sibling::epsilon//xi[@attrib][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::gamma[starts-with(@title,"t")][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::epsilon[@xml:id="id5"][not(following-sibling::*)]/psi[position() = 1]][position() = 1]]]]</xpath> + <tree> + <iota attrib="true" xml:id="id1"> + <phi xml:lang="en-GB" xml:id="id2"/> + <any delete="true" xml:lang="no" xml:id="id3"> + <theta title="this-is-att-value"/> + <epsilon> + <xi attrib="solid 1px green" xml:lang="no" xml:id="id4"/> + <gamma title="this.nodeValue" xml:lang="no"/> + <epsilon xml:id="id5"> + <psi> + <green>This text must be green</green> + </psi> + </epsilon> + </epsilon> + </any> + </iota> + </tree> + </test> + <test> + <xpath>//tau/psi[@xml:lang="nb"][@xml:id="id1"][following-sibling::beta[not(following-sibling::*)]/kappa[@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]/pi[@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::chi[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]/nu[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//upsilon[starts-with(@attribute,"true")][@xml:lang="no"][@xml:id="id7"]]][position() = 1]]</xpath> + <tree> + <tau> + <psi xml:lang="nb" xml:id="id1"/> + <beta> + <kappa xml:lang="en-GB" xml:id="id2"> + <pi xml:lang="no" xml:id="id3"/> + <chi xml:lang="no-nb" xml:id="id4"> + <nu xml:id="id5"/> + <beta xml:id="id6"> + <upsilon attribute="true" xml:lang="no" xml:id="id7"> + <green>This text must be green</green> + </upsilon> + </beta> + </chi> + </kappa> + </beta> + </tau> + </tree> + </test> + <test> + <xpath>//lambda[@xml:id="id1"]/pi[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[contains(concat(@attr,"$"),"%$")][@xml:lang="en-US"][@xml:id="id3"][not(child::node())][following-sibling::xi[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::alpha[@attr][@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::alpha)]//upsilon[not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//chi[@data][@xml:lang="en"][@xml:id="id7"][following-sibling::lambda[@xml:lang="en-US"][not(preceding-sibling::lambda)][not(child::node())][following-sibling::delta[@att="100%"][@xml:id="id8"][preceding-sibling::*[position() = 2]][following-sibling::upsilon[contains(concat(@src,"$"),"bute value$")][@xml:lang="en-US"][preceding-sibling::*[position() = 3]]//gamma[@xml:id="id9"][following-sibling::mu[@xml:lang="en-US"][@xml:id="id10"]/delta[@xml:lang="en-GB"][following-sibling::beta[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[starts-with(concat(@attr,"-"),"content-")][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[contains(@string,"a")][preceding-sibling::*[position() = 3]]//upsilon[contains(@delete,"%")]//theta[@token="another attribute value"][@xml:lang="en-US"][following-sibling::phi[@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi[contains(concat(@attribute,"$"),"lue$")][@xml:lang="en-GB"][@xml:id="id12"][preceding-sibling::*[position() = 2]][position() = 1]]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <lambda xml:id="id1"> + <pi xml:lang="en-GB" xml:id="id2"> + <lambda attr="100%" xml:lang="en-US" xml:id="id3"/> + <xi xml:id="id4"/> + <alpha attr="attribute" xml:lang="nb" xml:id="id5"> + <upsilon> + <iota xml:id="id6"> + <chi data="content" xml:lang="en" xml:id="id7"/> + <lambda xml:lang="en-US"/> + <delta att="100%" xml:id="id8"/> + <upsilon src="another attribute value" xml:lang="en-US"> + <gamma xml:id="id9"/> + <mu xml:lang="en-US" xml:id="id10"> + <delta xml:lang="en-GB"/> + <beta/> + <omega attr="content"/> + <sigma string="this.nodeValue"> + <upsilon delete="100%"> + <theta token="another attribute value" xml:lang="en-US"/> + <phi xml:lang="nb" xml:id="id11"/> + <chi attribute="attribute value" xml:lang="en-GB" xml:id="id12"> + <green>This text must be green</green> + </chi> + </upsilon> + </sigma> + </mu> + </upsilon> + </iota> + </upsilon> + </alpha> + </pi> + </lambda> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en-US"]//xi[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@xml:lang="en"][following-sibling::pi[@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)]/delta[@xml:lang="en-US"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@xml:id="id3"]//phi[@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::nu[not(following-sibling::*)]//delta[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::gamma[@xml:lang="nb"]/alpha[@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/gamma[contains(@att,"e")][not(preceding-sibling::*)][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 1]]/mu[not(following-sibling::*)]][position() = 1]]]]]</xpath> + <tree> + <delta xml:lang="en-US"> + <xi xml:lang="en-US"> + <theta xml:lang="en"/> + <pi xml:lang="no" xml:id="id1"> + <delta xml:lang="en-US" xml:id="id2"/> + <mu xml:id="id3"> + <phi xml:lang="nb"/> + <nu> + <delta xml:lang="en-US" xml:id="id4"/> + <gamma xml:lang="nb"> + <alpha xml:id="id5"> + <gamma att="true"/> + <any> + <mu> + <green>This text must be green</green> + </mu> + </any> + </alpha> + </gamma> + </nu> + </mu> + </pi> + </xi> + </delta> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en-GB"]/upsilon[@xml:id="id1"][not(following-sibling::*)]//kappa[@xml:lang="en-US"][following-sibling::upsilon[@xml:lang="en-GB"][following-sibling::*[position()=2]][following-sibling::lambda[@abort][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@content][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//phi[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[preceding-sibling::*[position() = 1]]//tau[starts-with(concat(@title,"-"),"_blank-")][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[starts-with(@abort,"this.n")][@xml:lang="en-GB"]]]]]]</xpath> + <tree> + <delta xml:lang="en-GB"> + <upsilon xml:id="id1"> + <kappa xml:lang="en-US"/> + <upsilon xml:lang="en-GB"/> + <lambda abort="another attribute value" xml:id="id2"/> + <pi content="true" xml:lang="no-nb" xml:id="id3"> + <phi xml:lang="en-GB"/> + <tau> + <tau title="_blank"/> + <tau abort="this.nodeValue" xml:lang="en-GB"> + <green>This text must be green</green> + </tau> + </tau> + </pi> + </upsilon> + </delta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="no"][@xml:id="id1"]//mu[not(preceding-sibling::*)][following-sibling::xi[starts-with(@string,"sol")][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(preceding-sibling::xi)]//gamma[contains(concat(@token,"$"),"e$")][@xml:lang="en-GB"][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::pi[contains(concat(@insert,"$"),"green$")][following-sibling::*[position()=1]][following-sibling::gamma[@att][@xml:lang="en-US"][not(following-sibling::*)]//chi[@delete][@xml:id="id4"][not(following-sibling::*)]//zeta[@xml:lang="no-nb"][@xml:id="id5"][not(child::node())][following-sibling::*[starts-with(@src,"attr")][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[@delete="content"][@xml:lang="en"]//mu[@xml:id="id7"]]]][position() = 1]]]</xpath> + <tree> + <sigma xml:lang="no" xml:id="id1"> + <mu/> + <xi string="solid 1px green" xml:id="id2"> + <gamma token="false" xml:lang="en-GB" xml:id="id3"/> + <pi insert="solid 1px green"/> + <gamma att="attribute value" xml:lang="en-US"> + <chi delete="100%" xml:id="id4"> + <zeta xml:lang="no-nb" xml:id="id5"/> + <any src="attribute value" xml:id="id6"/> + <upsilon delete="content" xml:lang="en"> + <mu xml:id="id7"> + <green>This text must be green</green> + </mu> + </upsilon> + </chi> + </gamma> + </xi> + </sigma> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-GB"]/gamma[@xml:lang="en"][@xml:id="id1"]//mu[contains(concat(@att,"$"),"px green$")][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[starts-with(concat(@object,"-"),"attribute-")][@xml:lang="no-nb"]/psi[starts-with(concat(@src,"-"),"attribute-")][@xml:id="id2"][not(preceding-sibling::*)]//chi[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[@insert="attribute value"][@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@xml:lang="no"][following-sibling::rho[starts-with(concat(@desciption,"-"),"123456789-")][preceding-sibling::*[position() = 2]]/mu[@token][@xml:lang="en"][@xml:id="id5"]/kappa[starts-with(@number,"fals")][not(child::node())][following-sibling::alpha[@src][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@xml:lang="en"]/iota[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[starts-with(concat(@name,"-"),"attribute-")][@xml:lang="no"][@xml:id="id7"]/theta[@number="solid 1px green"][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <phi xml:lang="en-GB"> + <gamma xml:lang="en" xml:id="id1"> + <mu att="solid 1px green"/> + <iota object="attribute" xml:lang="no-nb"> + <psi src="attribute" xml:id="id2"> + <chi xml:id="id3"> + <lambda insert="attribute value" xml:lang="nb" xml:id="id4"/> + <zeta xml:lang="no"/> + <rho desciption="123456789"> + <mu token="attribute-value" xml:lang="en" xml:id="id5"> + <kappa number="false"/> + <alpha src="attribute-value" xml:lang="en-GB"/> + <sigma xml:lang="en"> + <iota xml:id="id6"/> + <sigma name="attribute-value" xml:lang="no" xml:id="id7"> + <theta number="solid 1px green" xml:lang="en"> + <green>This text must be green</green> + </theta> + </sigma> + </sigma> + </mu> + </rho> + </chi> + </psi> + </iota> + </gamma> + </phi> + </tree> + </test> + <test> + <xpath>//phi[contains(@delete,"r attribu")][@xml:lang="no-nb"]/epsilon[@xml:id="id1"][not(preceding-sibling::*)]/beta[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@delete][@xml:id="id3"][not(following-sibling::*)]//psi[starts-with(concat(@src,"-"),"this.nodeValue-")][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta[@true="100%"][@xml:lang="en-US"]//upsilon[@xml:id="id6"][following-sibling::omega[@xml:id="id7"]/upsilon[not(preceding-sibling::*)][not(following-sibling::*)]/rho[@insert][@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:id="id9"]//delta[@xml:lang="en"][@xml:id="id10"]//iota[@xml:lang="no-nb"][@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@xml:lang="nb"][@xml:id="id12"][following-sibling::tau[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::beta[@xml:id="id13"][not(following-sibling::*)]//pi[@class][@xml:id="id14"][following-sibling::*[position()=1]][following-sibling::delta[@and][@xml:id="id15"][preceding-sibling::*[position() = 1]]/alpha[contains(@abort,"bute-v")][@xml:lang="en-GB"][@xml:id="id16"]/epsilon[@xml:lang="en-US"][@xml:id="id17"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <phi delete="another attribute value" xml:lang="no-nb"> + <epsilon xml:id="id1"> + <beta xml:id="id2"> + <upsilon delete="_blank" xml:id="id3"> + <psi src="this.nodeValue"> + <lambda xml:id="id4"/> + <delta xml:lang="nb" xml:id="id5"> + <zeta true="100%" xml:lang="en-US"> + <upsilon xml:id="id6"/> + <omega xml:id="id7"> + <upsilon> + <rho insert="solid 1px green" xml:lang="no" xml:id="id8"/> + <upsilon xml:id="id9"> + <delta xml:lang="en" xml:id="id10"> + <iota xml:lang="no-nb" xml:id="id11"> + <xi xml:lang="nb" xml:id="id12"/> + <tau xml:lang="no-nb"/> + <beta xml:id="id13"> + <pi class="attribute-value" xml:id="id14"/> + <delta and="_blank" xml:id="id15"> + <alpha abort="attribute-value" xml:lang="en-GB" xml:id="id16"> + <epsilon xml:lang="en-US" xml:id="id17"> + <green>This text must be green</green> + </epsilon> + </alpha> + </delta> + </beta> + </iota> + </delta> + </upsilon> + </upsilon> + </omega> + </zeta> + </delta> + </psi> + </upsilon> + </beta> + </epsilon> + </phi> + </tree> + </test> + <test> + <xpath>//beta[starts-with(concat(@and,"-"),"this.nodeValue-")][@xml:id="id1"]/zeta[starts-with(@false,"con")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)][not(following-sibling::theta)]/delta[@xml:id="id4"]/eta[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)]//pi[@desciption][@xml:lang="no"]/pi[not(following-sibling::*)]//pi[following-sibling::*[position()=3]][not(child::node())][following-sibling::upsilon[@false][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]//eta[contains(@att," value")][@xml:lang="en"][not(preceding-sibling::*)][not(preceding-sibling::eta)]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta and="this.nodeValue" xml:id="id1"> + <zeta false="content" xml:lang="nb" xml:id="id2"/> + <theta xml:lang="en-US" xml:id="id3"> + <delta xml:id="id4"> + <eta xml:lang="en-GB" xml:id="id5"> + <pi desciption="this.nodeValue" xml:lang="no"> + <pi> + <pi/> + <upsilon false="attribute value"/> + <theta xml:lang="en-US" xml:id="id6"/> + <pi xml:lang="no-nb" xml:id="id7"> + <eta att="attribute value" xml:lang="en"> + <green>This text must be green</green> + </eta> + </pi> + </pi> + </pi> + </eta> + </delta> + </theta> + </beta> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]//sigma[@xml:lang="no-nb"][not(following-sibling::*)]/eta[@xml:id="id2"][not(following-sibling::*)]/sigma[starts-with(concat(@title,"-"),"content-")][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::*)]/tau[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omega[@xml:lang="en"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[@xml:id="id4"][preceding-sibling::*[position() = 2]]//omicron[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:lang="no-nb"][not(following-sibling::*)]//tau[contains(@string,"true")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha//phi[@attr][@xml:lang="no-nb"][@xml:id="id5"]/zeta[@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[starts-with(@or,"false")][@xml:id="id7"][not(following-sibling::*)]//upsilon[@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@xml:lang="nb"][not(following-sibling::*)]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <rho xml:id="id1"> + <sigma xml:lang="no-nb"> + <eta xml:id="id2"> + <sigma title="content" xml:lang="no" xml:id="id3"> + <tau xml:lang="no"/> + <omega xml:lang="en"/> + <lambda xml:id="id4"> + <omicron xml:lang="en-US"/> + <chi src="this.nodeValue" xml:lang="no-nb"> + <tau string="true" xml:lang="no"/> + <alpha> + <phi attr="another attribute value" xml:lang="no-nb" xml:id="id5"> + <zeta xml:id="id6"/> + <alpha or="false" xml:id="id7"> + <upsilon xml:lang="nb"/> + <theta xml:lang="nb"> + <green>This text must be green</green> + </theta> + </alpha> + </phi> + </alpha> + </chi> + </lambda> + </sigma> + </eta> + </sigma> + </rho> + </tree> + </test> + <test> + <xpath>//kappa[contains(concat(@object,"$"),"ribute value$")][@xml:id="id1"]/epsilon[starts-with(@attrib,"fa")][@xml:id="id2"][not(preceding-sibling::*)]//omega[starts-with(concat(@delete,"-"),"attribute value-")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//phi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::nu[@true][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::mu[starts-with(@and,"this-is-att-val")][not(following-sibling::*)]/pi[contains(@attr,"ibute")][@xml:id="id5"][not(preceding-sibling::*)]/phi[@xml:id="id6"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[not(following-sibling::*)]/epsilon[@or="attribute-value"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[starts-with(@data,"fal")][@xml:id="id8"][following-sibling::epsilon//chi[@attribute="false"][@xml:lang="en"][following-sibling::rho[@insert="this-is-att-value"][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa object="attribute value" xml:id="id1"> + <epsilon attrib="false" xml:id="id2"> + <omega delete="attribute value" xml:id="id3"> + <phi xml:lang="no-nb"/> + <omicron xml:id="id4"/> + <nu true="content" xml:lang="en-US"/> + <mu and="this-is-att-value"> + <pi attr="attribute" xml:id="id5"> + <phi xml:id="id6"/> + <chi> + <epsilon or="attribute-value" xml:id="id7"/> + <kappa data="false" xml:id="id8"/> + <epsilon> + <chi attribute="false" xml:lang="en"/> + <rho insert="this-is-att-value"> + <green>This text must be green</green> + </rho> + </epsilon> + </chi> + </pi> + </mu> + </omega> + </epsilon> + </kappa> + </tree> + </test> + <test> + <xpath>//lambda[@xml:lang="no"]//*[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::iota[@name="123456789"][@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::omicron[preceding-sibling::*[position() = 2]]/tau[starts-with(concat(@src,"-"),"this.nodeValue-")][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[contains(concat(@abort,"$"),"-att-value$")][following-sibling::nu[starts-with(concat(@attrib,"-"),"123456789-")][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@xml:id="id4"][preceding-sibling::*[position() = 1]]][position() = 1]]]]</xpath> + <tree> + <lambda xml:lang="no"> + <any xml:lang="en-US" xml:id="id1"/> + <iota name="123456789" xml:lang="no"/> + <omicron> + <tau src="this.nodeValue" xml:lang="no"> + <beta abort="this-is-att-value"/> + <nu attrib="123456789" xml:id="id2"> + <alpha xml:id="id3"/> + <nu xml:id="id4"> + <green>This text must be green</green> + </nu> + </nu> + </tau> + </omicron> + </lambda> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="en-US"][@xml:id="id1"]/psi[@and][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[not(child::node())][following-sibling::theta[@true="true"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(concat(@src,"$"),"Value$")][@xml:id="id3"][not(following-sibling::*)]//upsilon[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[contains(@attrib,"reen")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::xi[contains(concat(@name,"$"),"89$")][@xml:id="id5"][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::nu[@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//xi//eta[@or][@xml:lang="nb"][@xml:id="id6"]//iota//phi[@object][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::iota[following-sibling::*[position()=3]][following-sibling::mu[@xml:lang="en"][preceding-sibling::*[position() = 2]][following-sibling::delta[@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::gamma[starts-with(@and,"this.nod")][preceding-sibling::*[position() = 4]]/kappa[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][not(child::node())][following-sibling::nu[@xml:id="id7"]]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <beta xml:lang="en-US" xml:id="id1"> + <psi and="true" xml:id="id2"> + <pi/> + <theta true="true"/> + <delta src="this.nodeValue" xml:id="id3"> + <upsilon xml:lang="en-US" xml:id="id4"> + <epsilon attrib="solid 1px green" xml:lang="en-US"/> + <xi name="123456789" xml:id="id5"/> + <nu/> + <nu xml:lang="no"> + <xi> + <eta or="attribute value" xml:lang="nb" xml:id="id6"> + <iota> + <phi object="this.nodeValue" xml:lang="en-GB"/> + <iota/> + <mu xml:lang="en"/> + <delta xml:lang="nb"/> + <gamma and="this.nodeValue"> + <kappa xml:lang="nb"/> + <pi xml:lang="no-nb"/> + <nu xml:id="id7"> + <green>This text must be green</green> + </nu> + </gamma> + </iota> + </eta> + </xi> + </nu> + </upsilon> + </delta> + </psi> + </beta> + </tree> + </test> + <test> + <xpath>//gamma[contains(concat(@content,"$"),"this.nodeValue$")]//lambda[@xml:lang="no-nb"][not(preceding-sibling::*)]/upsilon[@xml:lang="en"]/beta[@xml:lang="en-GB"][not(following-sibling::*)]/omicron[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]]/kappa[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:lang="en-GB"][following-sibling::*[position()=1]][not(preceding-sibling::beta)][following-sibling::nu[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//xi[not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]//sigma[@attr="this.nodeValue"][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[contains(concat(@desciption,"$"),"rue$")][@xml:id="id5"][preceding-sibling::*[position() = 1]]/tau[@xml:id="id6"][not(preceding-sibling::*)][not(preceding-sibling::tau)][following-sibling::delta[contains(@token,"-va")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <gamma content="this.nodeValue"> + <lambda xml:lang="no-nb"> + <upsilon xml:lang="en"> + <beta xml:lang="en-GB"> + <omicron xml:id="id1"/> + <upsilon xml:lang="no" xml:id="id2"> + <kappa xml:lang="en"> + <beta xml:lang="en-GB"/> + <nu xml:lang="en-GB"> + <xi/> + <sigma xml:lang="en" xml:id="id3"> + <sigma attr="this.nodeValue" xml:lang="en-GB" xml:id="id4"/> + <mu desciption="true" xml:id="id5"> + <tau xml:id="id6"/> + <delta token="attribute-value" xml:lang="en-US" xml:id="id7"> + <omicron xml:lang="en" xml:id="id8"> + <green>This text must be green</green> + </omicron> + </delta> + </mu> + </sigma> + </nu> + </kappa> + </upsilon> + </beta> + </upsilon> + </lambda> + </gamma> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="en-US"]//phi[@class][@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::kappa[@delete]//gamma[starts-with(@att,"conten")][@xml:lang="nb"][not(preceding-sibling::*)]/chi[contains(concat(@desciption,"$"),"100%$")][@xml:lang="no"][not(following-sibling::*)]/omicron[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::chi[contains(@true,"alue")][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <beta xml:lang="en-US"> + <phi class="_blank" xml:lang="no-nb" xml:id="id1"/> + <kappa delete="attribute"> + <gamma att="content" xml:lang="nb"> + <chi desciption="100%" xml:lang="no"> + <omicron xml:id="id2"/> + <chi true="attribute value"> + <green>This text must be green</green> + </chi> + </chi> + </gamma> + </kappa> + </beta> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="no"]//epsilon[@xml:lang="en"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="en-US"]/phi[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::tau[@xml:id="id2"][not(child::node())][following-sibling::omicron[@abort="attribute"][@xml:lang="no"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::sigma/rho[@string][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[starts-with(concat(@name,"-"),"content-")][not(child::node())][following-sibling::upsilon[@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]/zeta[@data][@xml:lang="nb"][following-sibling::*[position()=2]][following-sibling::xi[@true="true"][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::beta[@class][@xml:lang="nb"][preceding-sibling::*[position() = 2]]/epsilon[@insert][@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::theta[@xml:lang="no"][not(following-sibling::*)]/eta[contains(@token,"ute")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@xml:lang="en-GB"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[starts-with(@attr,"_")][@xml:lang="en-US"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::sigma[contains(@class,"ribut")][@xml:id="id8"]//pi[@false][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[@xml:id="id9"]][position() = 1]][position() = 1]]]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <pi xml:lang="no"> + <epsilon xml:lang="en"/> + <iota xml:lang="en-US"> + <phi xml:id="id1"/> + <tau xml:lang="en-US"/> + <eta/> + <tau xml:id="id2"/> + <omicron abort="attribute" xml:lang="no"/> + <sigma> + <rho string="another attribute value" xml:id="id3"/> + <pi name="content"/> + <upsilon xml:lang="nb" xml:id="id4"> + <zeta data="false" xml:lang="nb"/> + <xi true="true" xml:lang="en-GB"/> + <beta class="this.nodeValue" xml:lang="nb"> + <epsilon insert="123456789" xml:lang="nb" xml:id="id5"/> + <theta xml:lang="no"> + <eta token="attribute" xml:lang="no-nb"> + <theta xml:lang="en-GB" xml:id="id6"> + <gamma attr="_blank" xml:lang="en-US" xml:id="id7"/> + <sigma class="attribute" xml:id="id8"> + <pi false="this.nodeValue"/> + <theta xml:id="id9"> + <green>This text must be green</green> + </theta> + </sigma> + </theta> + </eta> + </theta> + </beta> + </upsilon> + </sigma> + </iota> + </pi> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="en-US"]/theta[@xml:id="id1"][not(child::node())][following-sibling::iota[@data][@xml:lang="nb"][not(child::node())][following-sibling::omega[@xml:id="id2"][not(child::node())][following-sibling::zeta[preceding-sibling::*[position() = 3]][not(following-sibling::*)]/xi[@number="attribute-value"][@xml:id="id3"][not(preceding-sibling::*)]//mu[@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[@content][@xml:lang="en-GB"][not(preceding-sibling::*)]//upsilon[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@src][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[contains(@att,"is-att-value")][@xml:lang="en-US"][following-sibling::theta[@xml:id="id7"]/psi[@or][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::xi[preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <pi xml:lang="en-US"> + <theta xml:id="id1"/> + <iota data="_blank" xml:lang="nb"/> + <omega xml:id="id2"/> + <zeta> + <xi number="attribute-value" xml:id="id3"> + <mu xml:lang="en" xml:id="id4"> + <sigma content="100%" xml:lang="en-GB"> + <upsilon xml:id="id5"/> + <omicron src="123456789" xml:id="id6"> + <psi att="this-is-att-value" xml:lang="en-US"/> + <theta xml:id="id7"> + <psi or="solid 1px green" xml:id="id8"/> + <xi> + <green>This text must be green</green> + </xi> + </theta> + </omicron> + </sigma> + </mu> + </xi> + </zeta> + </pi> + </tree> + </test> + <test> + <xpath>//tau/theta[contains(@delete,"_blan")][@xml:lang="en-GB"][not(child::node())][following-sibling::epsilon[contains(concat(@title,"$"),"green$")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[not(following-sibling::*)]/chi[@or][not(preceding-sibling::*)]/zeta[@attrib][@xml:lang="no-nb"][@xml:id="id1"][not(following-sibling::*)]/theta[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[contains(@object,".nodeV")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//gamma[@xml:lang="no"][not(preceding-sibling::gamma or following-sibling::gamma)][not(child::node())][following-sibling::sigma[contains(concat(@and,"$"),"e$")][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::alpha[@xml:lang="no"][@xml:id="id4"][following-sibling::kappa[starts-with(concat(@false,"-"),"false-")][@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 3]]//rho[@xml:id="id6"][not(preceding-sibling::*)]/omicron[contains(@attribute,"nt")][@xml:lang="en"][@xml:id="id7"][not(following-sibling::*)]//lambda[@false][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[@xml:id="id8"][following-sibling::*[position()=2]][following-sibling::tau[@xml:lang="en-US"][not(child::node())][following-sibling::tau[@token]/iota[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <tau> + <theta delete="_blank" xml:lang="en-GB"/> + <epsilon title="solid 1px green" xml:lang="nb"/> + <rho> + <chi or="false"> + <zeta attrib="content" xml:lang="no-nb" xml:id="id1"> + <theta xml:lang="en-US" xml:id="id2"/> + <nu object="this.nodeValue"> + <gamma xml:lang="no"/> + <sigma and="true" xml:id="id3"/> + <alpha xml:lang="no" xml:id="id4"/> + <kappa false="false" xml:lang="nb" xml:id="id5"> + <rho xml:id="id6"> + <omicron attribute="content" xml:lang="en" xml:id="id7"> + <lambda false="100%" xml:lang="no-nb"/> + <any xml:id="id8"/> + <tau xml:lang="en-US"/> + <tau token="attribute"> + <iota xml:lang="nb"> + <green>This text must be green</green> + </iota> + </tau> + </omicron> + </rho> + </kappa> + </nu> + </zeta> + </chi> + </rho> + </tau> + </tree> + </test> + <test> + <xpath>//pi[starts-with(concat(@delete,"-"),"this.nodeValue-")][@xml:lang="no-nb"]/tau[starts-with(concat(@content,"-"),"true-")][not(following-sibling::*)]//omega[starts-with(@data,"attribu")][@xml:lang="no-nb"][not(following-sibling::*)]//gamma[@xml:id="id1"][not(following-sibling::*)]/eta[@xml:lang="no-nb"][not(preceding-sibling::*)]/zeta[@false="true"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[not(following-sibling::*)]//omega[@xml:lang="en-GB"][following-sibling::*[position()=6]][following-sibling::iota[@xml:lang="en"][following-sibling::*[position()=5]][following-sibling::tau[@content="100%"][@xml:lang="nb"][following-sibling::sigma[starts-with(concat(@insert,"-"),"100%-")][@xml:lang="nb"][@xml:id="id2"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=3]][not(child::node())][following-sibling::gamma[@false="this-is-att-value"][@xml:id="id3"][not(child::node())][following-sibling::upsilon[following-sibling::chi[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]//theta[@insert][@xml:lang="en"][@xml:id="id5"][not(child::node())][following-sibling::iota[contains(concat(@delete,"$"),"ue$")][@xml:lang="en-GB"][@xml:id="id6"][not(following-sibling::*)]//mu[@xml:lang="en"][not(preceding-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <pi delete="this.nodeValue" xml:lang="no-nb"> + <tau content="true"> + <omega data="attribute-value" xml:lang="no-nb"> + <gamma xml:id="id1"> + <eta xml:lang="no-nb"> + <zeta false="true"/> + <epsilon> + <omega xml:lang="en-GB"/> + <iota xml:lang="en"/> + <tau content="100%" xml:lang="nb"/> + <sigma insert="100%" xml:lang="nb" xml:id="id2"/> + <gamma false="this-is-att-value" xml:id="id3"/> + <upsilon/> + <chi xml:lang="no-nb" xml:id="id4"> + <theta insert="_blank" xml:lang="en" xml:id="id5"/> + <iota delete="true" xml:lang="en-GB" xml:id="id6"> + <mu xml:lang="en"> + <green>This text must be green</green> + </mu> + </iota> + </chi> + </epsilon> + </eta> + </gamma> + </omega> + </tau> + </pi> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="nb"]/alpha[contains(@string,"8")][@xml:lang="nb"][@xml:id="id1"][not(following-sibling::*)]/rho[contains(@data,"6789")][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[contains(concat(@and,"$"),"6789$")][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[starts-with(concat(@src,"-"),"this-")][@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::iota[@string][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::kappa[@xml:lang="en-US"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@true="attribute"][@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 4]]//kappa[following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]]//kappa[@xml:lang="no-nb"][@xml:id="id6"][following-sibling::beta[starts-with(@string,"100")][@xml:lang="no"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau xml:lang="nb"> + <alpha string="123456789" xml:lang="nb" xml:id="id1"> + <rho data="123456789"> + <sigma and="123456789" xml:id="id2"/> + <upsilon src="this-is-att-value" xml:lang="en-GB" xml:id="id3"/> + <iota string="123456789" xml:lang="no-nb"/> + <kappa xml:lang="en-US"/> + <iota true="attribute" xml:lang="no-nb" xml:id="id4"> + <kappa/> + <chi xml:lang="no" xml:id="id5"> + <kappa xml:lang="no-nb" xml:id="id6"/> + <beta string="100%" xml:lang="no"> + <green>This text must be green</green> + </beta> + </chi> + </iota> + </rho> + </alpha> + </tau> + </tree> + </test> + <test> + <xpath>//gamma[contains(@insert,"bla")][@xml:lang="en-GB"][@xml:id="id1"]//omega[@xml:lang="en-US"][@xml:id="id2"][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::upsilon[@xml:id="id4"][preceding-sibling::*[position() = 2]]/beta[@delete][not(preceding-sibling::*)][not(following-sibling::*)]/kappa[@xml:lang="no-nb"][@xml:id="id5"][position() = 1]]]</xpath> + <tree> + <gamma insert="_blank" xml:lang="en-GB" xml:id="id1"> + <omega xml:lang="en-US" xml:id="id2"/> + <psi xml:lang="no" xml:id="id3"/> + <upsilon xml:id="id4"> + <beta delete="attribute value"> + <kappa xml:lang="no-nb" xml:id="id5"> + <green>This text must be green</green> + </kappa> + </beta> + </upsilon> + </gamma> + </tree> + </test> + <test> + <xpath>//zeta[contains(@delete,"%")][@xml:id="id1"]/mu[@xml:lang="en"][following-sibling::*[position()=1]][following-sibling::gamma[@xml:lang="no-nb"]/phi[@xml:lang="en-US"][@xml:id="id2"][following-sibling::upsilon[@and][@xml:lang="no"][@xml:id="id3"][not(preceding-sibling::upsilon)][following-sibling::pi[preceding-sibling::*[position() = 2]]/omega[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]/phi[@xml:id="id5"][following-sibling::pi[@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::pi)]/theta[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::phi[starts-with(concat(@attribute,"-"),"this.nodeValue-")][@xml:lang="en"][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[starts-with(concat(@or,"-"),"attribute value-")][@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::psi[contains(concat(@att,"$"),"123456789$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 4]]/delta[not(preceding-sibling::*)][not(following-sibling::*)]/iota[@name="false"]//alpha[@xml:lang="en-GB"][@xml:id="id10"][not(preceding-sibling::*)]/nu[@xml:id="id11"][not(preceding-sibling::*)]//theta[@xml:lang="no-nb"][not(preceding-sibling::*)]/*/iota[contains(concat(@object,"$"),"true$")][@xml:id="id12"][not(child::node())][following-sibling::kappa[contains(@token,"k")][@xml:lang="nb"][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <zeta delete="100%" xml:id="id1"> + <mu xml:lang="en"/> + <gamma xml:lang="no-nb"> + <phi xml:lang="en-US" xml:id="id2"/> + <upsilon and="this.nodeValue" xml:lang="no" xml:id="id3"/> + <pi> + <omega xml:lang="no-nb" xml:id="id4"> + <phi xml:id="id5"/> + <pi xml:lang="en-US" xml:id="id6"> + <theta xml:id="id7"/> + <phi attribute="this.nodeValue" xml:lang="en" xml:id="id8"/> + <omega/> + <delta or="attribute value" xml:lang="en" xml:id="id9"/> + <psi att="123456789" xml:lang="en-GB"> + <delta> + <iota name="false"> + <alpha xml:lang="en-GB" xml:id="id10"> + <nu xml:id="id11"> + <theta xml:lang="no-nb"> + <any> + <iota object="true" xml:id="id12"/> + <kappa token="_blank" xml:lang="nb"> + <green>This text must be green</green> + </kappa> + </any> + </theta> + </nu> + </alpha> + </iota> + </delta> + </psi> + </pi> + </omega> + </pi> + </gamma> + </zeta> + </tree> + </test> + <test> + <xpath>//beta[@data][@xml:lang="en-US"]//iota[@attr="100%"][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::delta[contains(concat(@true,"$"),"ibute value$")][@xml:lang="en-US"]//rho[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)]//iota[not(preceding-sibling::*)][not(following-sibling::*)]//nu[contains(@name,"ute")][@xml:lang="no"][not(following-sibling::*)]/omega[@title][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]/theta[@delete][@xml:lang="no"][not(following-sibling::*)]/psi[not(child::node())][following-sibling::delta[@xml:id="id3"]/xi[contains(concat(@desciption,"$"),"te$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[preceding-sibling::*[position() = 1]]/upsilon[not(preceding-sibling::*)][not(following-sibling::*)]//iota/chi[contains(concat(@object,"$"),"e$")][@xml:id="id4"][following-sibling::omega[@class="attribute"][@xml:lang="no"][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta data="attribute-value" xml:lang="en-US"> + <iota attr="100%" xml:lang="en-US"/> + <delta true="another attribute value" xml:lang="en-US"> + <rho xml:lang="no" xml:id="id1"> + <iota> + <nu name="attribute" xml:lang="no"> + <omega title="123456789" xml:lang="en" xml:id="id2"> + <theta delete="content" xml:lang="no"> + <psi/> + <delta xml:id="id3"> + <xi desciption="attribute"/> + <pi> + <upsilon> + <iota> + <chi object="false" xml:id="id4"/> + <omega class="attribute" xml:lang="no"> + <green>This text must be green</green> + </omega> + </iota> + </upsilon> + </pi> + </delta> + </theta> + </omega> + </nu> + </iota> + </rho> + </delta> + </beta> + </tree> + </test> + <test> + <xpath>//chi[@att="this.nodeValue"][@xml:lang="en-GB"]/epsilon[@xml:lang="en-GB"][@xml:id="id1"][following-sibling::sigma[contains(concat(@data,"$"),"een$")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//gamma[@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[starts-with(@false,"c")][@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/alpha[contains(@number,"no")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]//mu[contains(concat(@and,"$"),"Value$")][following-sibling::rho[starts-with(concat(@data,"-"),"attribute-")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[contains(@title,"Value")][@xml:id="id6"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[@xml:lang="en-US"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi att="this.nodeValue" xml:lang="en-GB"> + <epsilon xml:lang="en-GB" xml:id="id1"/> + <sigma data="solid 1px green" xml:lang="en-US"> + <gamma xml:lang="no-nb" xml:id="id2"> + <tau false="content" xml:lang="en" xml:id="id3"> + <alpha number="another attribute value" xml:lang="en-US" xml:id="id4"> + <mu and="this.nodeValue"/> + <rho data="attribute" xml:id="id5"/> + <gamma title="this.nodeValue" xml:id="id6"/> + <omega xml:lang="en-US"> + <green>This text must be green</green> + </omega> + </alpha> + </tau> + </gamma> + </sigma> + </chi> + </tree> + </test> + <test> + <xpath>//xi[contains(@att,"ri")][@xml:id="id1"]//chi[@string="content"][@xml:id="id2"][not(preceding-sibling::*)]/pi[@abort][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id5"][not(following-sibling::*)]/chi[not(preceding-sibling::*)][following-sibling::iota[@name][@xml:lang="en-US"][following-sibling::rho[contains(concat(@att,"$"),"bute value$")][not(following-sibling::*)]/delta[@att][@xml:id="id6"][following-sibling::tau[contains(@attr,"t")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@xml:id="id8"][preceding-sibling::*[position() = 2]][not(preceding-sibling::kappa or following-sibling::kappa)]//psi[@xml:lang="en-GB"][@xml:id="id9"]/delta[@string][not(preceding-sibling::*)]//omicron/eta[starts-with(concat(@class,"-"),"content-")][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[starts-with(concat(@class,"-"),"123456789-")][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi att="attribute value" xml:id="id1"> + <chi string="content" xml:id="id2"> + <pi abort="attribute-value" xml:lang="en" xml:id="id3"/> + <chi> + <epsilon xml:id="id4"/> + <iota xml:id="id5"> + <chi/> + <iota name="_blank" xml:lang="en-US"/> + <rho att="another attribute value"> + <delta att="false" xml:id="id6"/> + <tau attr="attribute-value" xml:lang="en-US" xml:id="id7"/> + <kappa xml:id="id8"> + <psi xml:lang="en-GB" xml:id="id9"> + <delta string="attribute-value"> + <omicron> + <eta class="content" xml:lang="nb"> + <nu class="123456789"> + <green>This text must be green</green> + </nu> + </eta> + </omicron> + </delta> + </psi> + </kappa> + </rho> + </iota> + </chi> + </chi> + </xi> + </tree> + </test> + <test> + <xpath>//beta[@name]//rho[@desciption][@xml:id="id1"]/mu[@xml:lang="en"][not(child::node())][following-sibling::chi[@object][@xml:id="id2"][not(following-sibling::*)]/kappa[contains(concat(@or,"$"),"0%$")][@xml:id="id3"][following-sibling::omicron[starts-with(concat(@number,"-"),"another attribute value-")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=9]][not(preceding-sibling::omicron)][following-sibling::eta[@or="false"][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::sigma[@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=7]][following-sibling::epsilon[contains(concat(@delete,"$"),"rue$")][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::eta[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 5]][following-sibling::*[position()=5]][following-sibling::beta[@xml:id="id7"][preceding-sibling::*[position() = 6]][not(child::node())][following-sibling::gamma[@xml:lang="en-GB"][preceding-sibling::*[position() = 7]][following-sibling::*[position()=3]][not(child::node())][following-sibling::pi[starts-with(@title,"ano")][@xml:lang="nb"][not(child::node())][following-sibling::eta[@content][@xml:lang="en-US"][@xml:id="id8"][following-sibling::*[starts-with(@and,"_blank")][@xml:lang="en-GB"][@xml:id="id9"][not(following-sibling::*)]/omicron[@abort="false"][@xml:lang="no-nb"][@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@xml:lang="en-US"][@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[starts-with(concat(@or,"-"),"false-")][@xml:lang="no"][@xml:id="id12"][preceding-sibling::*[position() = 1]]//rho[@xml:lang="no-nb"][@xml:id="id13"][following-sibling::zeta[starts-with(@name,"another attrib")][@xml:lang="no-nb"][not(child::node())][following-sibling::upsilon[@xml:lang="en-GB"][@xml:id="id14"][not(following-sibling::*)]]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <beta name="this.nodeValue"> + <rho desciption="attribute" xml:id="id1"> + <mu xml:lang="en"/> + <chi object="attribute" xml:id="id2"> + <kappa or="100%" xml:id="id3"/> + <omicron number="another attribute value"/> + <eta or="false" xml:lang="en-US"/> + <sigma xml:lang="no-nb" xml:id="id4"/> + <epsilon delete="true" xml:lang="en-GB" xml:id="id5"/> + <eta xml:lang="en-US" xml:id="id6"/> + <beta xml:id="id7"/> + <gamma xml:lang="en-GB"/> + <pi title="another attribute value" xml:lang="nb"/> + <eta content="123456789" xml:lang="en-US" xml:id="id8"/> + <any and="_blank" xml:lang="en-GB" xml:id="id9"> + <omicron abort="false" xml:lang="no-nb" xml:id="id10"> + <lambda xml:lang="en-US" xml:id="id11"/> + <epsilon or="false" xml:lang="no" xml:id="id12"> + <rho xml:lang="no-nb" xml:id="id13"/> + <zeta name="another attribute value" xml:lang="no-nb"/> + <upsilon xml:lang="en-GB" xml:id="id14"> + <green>This text must be green</green> + </upsilon> + </epsilon> + </omicron> + </any> + </chi> + </rho> + </beta> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="en"][@xml:id="id1"]/kappa[@src][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[contains(@attr,"another ")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::delta[not(preceding-sibling::delta or following-sibling::delta)]/*[@xml:lang="nb"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[starts-with(@and,"12345678")][@xml:lang="en-GB"][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::omega[@delete="attribute-value"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//xi[@xml:lang="en"][following-sibling::iota[@xml:lang="en"][following-sibling::*[position()=1]][not(following-sibling::iota)][following-sibling::gamma[@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//eta[@xml:id="id7"]/zeta[@true][@xml:id="id8"]/xi[contains(@token,"fa")][not(following-sibling::*)]//omicron[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//delta[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[starts-with(@att,"attr")][not(following-sibling::*)]//zeta[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[starts-with(concat(@true,"-"),"_blank-")][@xml:lang="en-GB"][@xml:id="id10"][not(preceding-sibling::*)]/theta[@object][@xml:lang="en-US"][@xml:id="id11"][not(preceding-sibling::*)][not(child::node())][following-sibling::theta[contains(@token,"blank")]/omega[not(preceding-sibling::*)][not(following-sibling::*)][not(parent::*/*[position()=2])]/iota[starts-with(@or,"_")][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[contains(concat(@insert,"$"),"ttribute$")][not(following-sibling::*)]//alpha[@xml:lang="no-nb"][not(preceding-sibling::*)]]][position() = 1]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <sigma xml:lang="en" xml:id="id1"> + <kappa src="100%" xml:id="id2"/> + <upsilon attr="another attribute value" xml:lang="no" xml:id="id3"/> + <delta> + <any xml:lang="nb" xml:id="id4"/> + <psi and="123456789" xml:lang="en-GB" xml:id="id5"/> + <omega delete="attribute-value"> + <xi xml:lang="en"/> + <iota xml:lang="en"/> + <gamma xml:id="id6"> + <eta xml:id="id7"> + <zeta true="content" xml:id="id8"> + <xi token="false"> + <omicron xml:id="id9"> + <delta xml:lang="en-GB"/> + <xi att="attribute-value"> + <zeta xml:lang="nb"> + <alpha true="_blank" xml:lang="en-GB" xml:id="id10"> + <theta object="attribute-value" xml:lang="en-US" xml:id="id11"/> + <theta token="_blank"> + <omega> + <iota or="_blank"> + <sigma insert="attribute"> + <alpha xml:lang="no-nb"> + <green>This text must be green</green> + </alpha> + </sigma> + </iota> + </omega> + </theta> + </alpha> + </zeta> + </xi> + </omicron> + </xi> + </zeta> + </eta> + </gamma> + </omega> + </delta> + </sigma> + </tree> + </test> + <test> + <xpath>//eta[@true]/beta[starts-with(@attrib,"a")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="en-GB"][not(following-sibling::*)]/kappa[@title][@xml:lang="no"][following-sibling::omega[@xml:id="id1"][not(following-sibling::*)]/delta[@xml:lang="en-GB"][not(preceding-sibling::*)]//beta[@xml:lang="en-GB"]//eta[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@abort][following-sibling::*[position()=1]][following-sibling::rho[@xml:id="id3"]/gamma[@xml:id="id4"][not(following-sibling::*)]/gamma[@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]]/epsilon[@false][@xml:lang="nb"][not(preceding-sibling::*)]/nu[not(parent::*/*[position()=2])]/zeta[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]//delta[@name="this-is-att-value"][not(child::node())][following-sibling::pi[@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <eta true="100%"> + <beta attrib="another attribute value" xml:lang="nb"/> + <psi xml:lang="en-GB"> + <kappa title="100%" xml:lang="no"/> + <omega xml:id="id1"> + <delta xml:lang="en-GB"> + <beta xml:lang="en-GB"> + <eta xml:lang="no" xml:id="id2"/> + <chi abort="attribute value"/> + <rho xml:id="id3"> + <gamma xml:id="id4"> + <gamma xml:id="id5"/> + <zeta xml:lang="en-US" xml:id="id6"> + <epsilon false="100%" xml:lang="nb"> + <nu> + <zeta xml:lang="en-GB" xml:id="id7"> + <delta name="this-is-att-value"/> + <pi xml:lang="en-GB"> + <green>This text must be green</green> + </pi> + </zeta> + </nu> + </epsilon> + </zeta> + </gamma> + </rho> + </beta> + </delta> + </omega> + </psi> + </eta> + </tree> + </test> + <test> + <xpath>//omega[starts-with(concat(@true,"-"),"123456789-")]//xi[contains(concat(@src,"$"),"true$")][@xml:id="id1"][not(following-sibling::*)]/psi[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::zeta[@xml:id="id3"]/upsilon[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::alpha[contains(concat(@content,"$"),"alse$")][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="en-GB"][@xml:id="id5"][position() = 1]]]]</xpath> + <tree> + <omega true="123456789"> + <xi src="true" xml:id="id1"> + <psi xml:lang="en" xml:id="id2"/> + <zeta xml:id="id3"> + <upsilon xml:id="id4"/> + <alpha content="false" xml:lang="en"/> + <phi xml:lang="en-GB" xml:id="id5"> + <green>This text must be green</green> + </phi> + </zeta> + </xi> + </omega> + </tree> + </test> + <test> + <xpath>//lambda[@insert][@xml:lang="en-US"]//delta[@xml:lang="en-GB"][@xml:id="id1"][following-sibling::*[position()=2]][following-sibling::kappa[@attribute][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@data][@xml:id="id3"][not(following-sibling::kappa)]/zeta[contains(@att,"1")][@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]/kappa[@xml:lang="en-US"][not(following-sibling::*)]//*[contains(@src,"u")][@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[contains(concat(@att,"$"),"e$")][@xml:lang="en"][@xml:id="id6"][not(following-sibling::*)]]]</xpath> + <tree> + <lambda insert="100%" xml:lang="en-US"> + <delta xml:lang="en-GB" xml:id="id1"/> + <kappa attribute="123456789" xml:id="id2"/> + <kappa data="another attribute value" xml:id="id3"> + <zeta att="100%" xml:lang="en-US" xml:id="id4"> + <kappa xml:lang="en-US"> + <any src="true" xml:lang="no-nb" xml:id="id5"> + <psi att="false" xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </psi> + </any> + </kappa> + </zeta> + </kappa> + </lambda> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="en-GB"]//*[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[starts-with(concat(@and,"-"),"another attribute value-")][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//delta[@content="false"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::delta[starts-with(@delete,"12")][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau[@xml:id="id3"][not(following-sibling::*)]/kappa[contains(concat(@attrib,"$")," attribute value$")][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@xml:id="id4"][not(following-sibling::*)]/sigma[not(preceding-sibling::*)][not(following-sibling::*)]//delta[contains(@insert,"ank")][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//phi/delta[starts-with(@src,"attribut")][@xml:id="id6"][not(preceding-sibling::*)]/gamma[@xml:lang="en-GB"][@xml:id="id7"][position() = 1]][position() = 1]]]]</xpath> + <tree> + <delta xml:lang="en-GB"> + <any/> + <xi and="another attribute value" xml:id="id1"> + <delta content="false" xml:id="id2"/> + <delta delete="123456789"/> + <nu> + <tau xml:id="id3"> + <kappa attrib="another attribute value"/> + <gamma xml:id="id4"> + <sigma> + <delta insert="_blank" xml:lang="en" xml:id="id5"> + <phi> + <delta src="attribute" xml:id="id6"> + <gamma xml:lang="en-GB" xml:id="id7"> + <green>This text must be green</green> + </gamma> + </delta> + </phi> + </delta> + </sigma> + </gamma> + </tau> + </nu> + </xi> + </delta> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="no"]//omega[starts-with(@src,"tru")][@xml:lang="en"][not(following-sibling::*)]//omega[starts-with(@false,"another attribu")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:id="id1"][not(following-sibling::*)]/pi[@and][@xml:lang="en"][not(following-sibling::*)]/omicron[@xml:id="id2"][following-sibling::zeta[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::omega[contains(concat(@name,"$"),"lse$")][@xml:lang="en"][not(following-sibling::*)]//theta[@att][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::eta[@token][@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/gamma[@xml:id="id4"]//beta[@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 1]]//tau[@attr][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="en"][@xml:id="id6"][not(preceding-sibling::delta)]/tau[starts-with(@attrib,"c")][@xml:lang="no"][not(preceding-sibling::*)]/gamma[contains(@true,"alue")][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <kappa xml:lang="no"> + <omega src="true" xml:lang="en"> + <omega false="another attribute value" xml:lang="en-US"/> + <xi xml:id="id1"> + <pi and="123456789" xml:lang="en"> + <omicron xml:id="id2"/> + <zeta/> + <omega name="false" xml:lang="en"> + <theta att="100%" xml:id="id3"/> + <eta token="true" xml:lang="no"> + <gamma xml:id="id4"> + <beta xml:lang="nb" xml:id="id5"/> + <upsilon> + <tau attr="content"/> + <delta xml:lang="en" xml:id="id6"> + <tau attrib="content" xml:lang="no"> + <gamma true="this.nodeValue"> + <green>This text must be green</green> + </gamma> + </tau> + </delta> + </upsilon> + </gamma> + </eta> + </omega> + </pi> + </xi> + </omega> + </kappa> + </tree> + </test> + <test> + <xpath>//kappa[@delete][@xml:id="id1"]/gamma[starts-with(@name,"false")][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=4]][not(child::node())][following-sibling::mu[following-sibling::kappa[starts-with(concat(@delete,"-"),"attribute-")][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::iota[starts-with(concat(@class,"-"),"this.nodeValue-")][@xml:id="id4"][not(child::node())][following-sibling::*[@xml:id="id5"][preceding-sibling::*[position() = 4]]/delta[contains(@object,"t")][@xml:id="id6"]/iota[@content][@xml:lang="en-GB"][@xml:id="id7"][not(child::node())][following-sibling::pi[@xml:lang="no-nb"][@xml:id="id8"]//phi[@content][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:lang="no-nb"][not(following-sibling::*)]//iota[starts-with(@and,"soli")][not(preceding-sibling::*)][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <kappa delete="attribute value" xml:id="id1"> + <gamma name="false" xml:lang="nb" xml:id="id2"/> + <mu/> + <kappa delete="attribute" xml:lang="no-nb" xml:id="id3"/> + <iota class="this.nodeValue" xml:id="id4"/> + <any xml:id="id5"> + <delta object="another attribute value" xml:id="id6"> + <iota content="another attribute value" xml:lang="en-GB" xml:id="id7"/> + <pi xml:lang="no-nb" xml:id="id8"> + <phi content="this.nodeValue" xml:id="id9"/> + <lambda xml:lang="no-nb"> + <iota and="solid 1px green"> + <green>This text must be green</green> + </iota> + </lambda> + </pi> + </delta> + </any> + </kappa> + </tree> + </test> + <test> + <xpath>//*[contains(@class,"23")][@xml:id="id1"]//omicron[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)]//psi[starts-with(@attribute,"solid 1px gr")][@xml:lang="no-nb"][following-sibling::*[position()=7]][following-sibling::xi[contains(@number,"k")][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=6]][following-sibling::eta[@xml:id="id4"][following-sibling::sigma[@xml:lang="nb"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::pi[@delete="content"][preceding-sibling::*[position() = 4]][following-sibling::*[@xml:lang="no"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::gamma[contains(@class,"his-is-att-value")][@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 6]][following-sibling::lambda[@xml:id="id6"][preceding-sibling::*[position() = 7]]/rho[@xml:lang="nb"][not(preceding-sibling::*)]/eta[@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[starts-with(concat(@attrib,"-"),"this-")][@xml:lang="nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::theta[@and][@xml:id="id8"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/*[@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/*[@insert][not(preceding-sibling::*)]//gamma[@true][@xml:lang="no"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@abort="another attribute value"][@xml:lang="en-GB"]]][position() = 1]]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <any class="123456789" xml:id="id1"> + <omicron token="attribute-value" xml:lang="no" xml:id="id2"> + <psi attribute="solid 1px green" xml:lang="no-nb"/> + <xi number="_blank" xml:lang="no-nb" xml:id="id3"/> + <eta xml:id="id4"/> + <sigma xml:lang="nb"/> + <pi delete="content"/> + <any xml:lang="no"/> + <gamma class="this-is-att-value" xml:lang="nb" xml:id="id5"/> + <lambda xml:id="id6"> + <rho xml:lang="nb"> + <eta xml:lang="en" xml:id="id7"> + <lambda attrib="this-is-att-value" xml:lang="nb"/> + <theta and="true" xml:id="id8"> + <any xml:lang="no"> + <any insert="attribute value"> + <gamma true="100%" xml:lang="no" xml:id="id9"/> + <kappa abort="another attribute value" xml:lang="en-GB"> + <green>This text must be green</green> + </kappa> + </any> + </any> + </theta> + </eta> + </rho> + </lambda> + </omicron> + </any> + </tree> + </test> + <test> + <xpath>//rho[@token][@xml:lang="nb"]//omicron[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::epsilon[@xml:id="id2"][preceding-sibling::*[position() = 2]]//epsilon[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::omicron[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(concat(@abort,"$"),"0%$")][not(preceding-sibling::delta)][following-sibling::phi[@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <rho token="solid 1px green" xml:lang="nb"> + <omicron xml:id="id1"/> + <upsilon xml:lang="en-GB"/> + <epsilon xml:id="id2"> + <epsilon xml:lang="no" xml:id="id3"/> + <omicron/> + <delta abort="100%"/> + <phi xml:lang="en-GB"> + <green>This text must be green</green> + </phi> + </epsilon> + </rho> + </tree> + </test> + <test> + <xpath>//eta[contains(concat(@false,"$"),"true$")][@xml:lang="no-nb"]/iota[starts-with(@insert,"c")][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::omega[@xml:lang="nb"][not(following-sibling::*)]/nu[starts-with(@string,"f")][@xml:lang="en-GB"][@xml:id="id2"]/eta[@xml:lang="en"][not(following-sibling::*)]/xi[starts-with(concat(@token,"-"),"123456789-")][@xml:id="id3"][not(child::node())][following-sibling::pi[starts-with(@content,"100%")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[starts-with(@false,"12")][@xml:lang="no-nb"][following-sibling::*[position()=1]][following-sibling::*[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/zeta[contains(@string,"nk")][@xml:id="id7"][following-sibling::gamma[@number][@xml:lang="no"][@xml:id="id8"][following-sibling::phi[contains(concat(@title,"$"),"0%$")]//omega[@xml:lang="no-nb"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::zeta[contains(concat(@and,"$"),"tribute value$")][@xml:id="id10"][preceding-sibling::*[position() = 1]]//tau[@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::zeta[@xml:id="id12"][preceding-sibling::*[position() = 1]]/sigma[contains(@token,"456789")][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <eta false="true" xml:lang="no-nb"> + <iota insert="content" xml:id="id1"/> + <omega xml:lang="nb"> + <nu string="false" xml:lang="en-GB" xml:id="id2"> + <eta xml:lang="en"> + <xi token="123456789" xml:id="id3"/> + <pi content="100%" xml:lang="no" xml:id="id4"> + <epsilon xml:lang="en" xml:id="id5"> + <tau false="123456789" xml:lang="no-nb"/> + <any xml:lang="en-US" xml:id="id6"> + <zeta string="_blank" xml:id="id7"/> + <gamma number="123456789" xml:lang="no" xml:id="id8"/> + <phi title="100%"> + <omega xml:lang="no-nb" xml:id="id9"/> + <zeta and="another attribute value" xml:id="id10"> + <tau xml:id="id11"/> + <zeta xml:id="id12"> + <sigma token="123456789"> + <green>This text must be green</green> + </sigma> + </zeta> + </zeta> + </phi> + </any> + </epsilon> + </pi> + </eta> + </nu> + </omega> + </eta> + </tree> + </test> + <test> + <xpath>//kappa[contains(concat(@insert,"$"),"00%$")][@xml:lang="en-GB"][@xml:id="id1"]//pi[@xml:lang="no"][@xml:id="id2"][not(following-sibling::*)]/zeta[@xml:lang="en-US"][not(preceding-sibling::*)]/tau[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::delta[@token="this.nodeValue"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[not(preceding-sibling::*)][not(child::node())][following-sibling::alpha/pi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::eta[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(preceding-sibling::eta)][following-sibling::tau[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//mu[starts-with(concat(@desciption,"-"),"100%-")][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@string="attribute-value"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa insert="100%" xml:lang="en-GB" xml:id="id1"> + <pi xml:lang="no" xml:id="id2"> + <zeta xml:lang="en-US"> + <tau xml:id="id3"/> + <delta token="this.nodeValue"> + <phi/> + <alpha> + <pi xml:lang="no-nb"/> + <eta xml:lang="en" xml:id="id4"/> + <tau xml:lang="en-US" xml:id="id5"> + <mu desciption="100%"/> + <any xml:lang="en-GB"> + <chi string="attribute-value" xml:id="id6"> + <green>This text must be green</green> + </chi> + </any> + </tau> + </alpha> + </delta> + </zeta> + </pi> + </kappa> + </tree> + </test> + <test> + <xpath>//upsilon[starts-with(concat(@att,"-"),"_blank-")][@xml:lang="no-nb"]/chi[@object][@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)]/alpha[@xml:lang="no-nb"][@xml:id="id3"]//iota[starts-with(@object,"1")][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::omega[starts-with(@delete,"123456")][@xml:lang="nb"][preceding-sibling::*[position() = 1]]/xi[starts-with(@content,"attribute-v")][@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::phi[not(following-sibling::*)]//lambda[contains(@token,"als")][@xml:lang="no"][@xml:id="id6"][following-sibling::lambda[starts-with(concat(@data,"-"),"false-")][@xml:id="id7"][not(following-sibling::*)]/iota[contains(@desciption,"k")][@xml:lang="en"][@xml:id="id8"]//theta[@insert][@xml:id="id9"][not(preceding-sibling::*)]//alpha[@xml:id="id10"][following-sibling::*[position()=2]][following-sibling::mu[@xml:lang="nb"][@xml:id="id11"][following-sibling::pi[contains(@attr,"ttribute")][@xml:lang="en-US"][@xml:id="id12"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/alpha[starts-with(concat(@or,"-"),"_blank-")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[starts-with(concat(@name,"-"),"attribute-")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::alpha[@xml:lang="nb"][following-sibling::*[position()=1]][not(preceding-sibling::alpha)][not(child::node())][following-sibling::upsilon[@xml:lang="nb"]/kappa[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::sigma[@xml:id="id13"][not(following-sibling::*)]//gamma[@xml:lang="nb"][@xml:id="id14"][not(following-sibling::*)]/omicron[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <upsilon att="_blank" xml:lang="no-nb"> + <chi object="true" xml:lang="no-nb" xml:id="id1"> + <nu xml:lang="nb" xml:id="id2"> + <alpha xml:lang="no-nb" xml:id="id3"> + <iota object="123456789" xml:lang="en-GB" xml:id="id4"/> + <omega delete="123456789" xml:lang="nb"> + <xi content="attribute-value" xml:lang="no-nb" xml:id="id5"/> + <phi> + <lambda token="false" xml:lang="no" xml:id="id6"/> + <lambda data="false" xml:id="id7"> + <iota desciption="_blank" xml:lang="en" xml:id="id8"> + <theta insert="attribute" xml:id="id9"> + <alpha xml:id="id10"/> + <mu xml:lang="nb" xml:id="id11"/> + <pi attr="attribute" xml:lang="en-US" xml:id="id12"> + <alpha or="_blank" xml:lang="no-nb"> + <xi name="attribute-value" xml:lang="en-GB"/> + <alpha xml:lang="nb"/> + <upsilon xml:lang="nb"> + <kappa xml:lang="no-nb"/> + <sigma xml:id="id13"> + <gamma xml:lang="nb" xml:id="id14"> + <omicron xml:lang="nb"> + <green>This text must be green</green> + </omicron> + </gamma> + </sigma> + </upsilon> + </alpha> + </pi> + </theta> + </iota> + </lambda> + </phi> + </omega> + </alpha> + </nu> + </chi> + </upsilon> + </tree> + </test> + <test> + <xpath>//eta[starts-with(concat(@object,"-"),"content-")]/nu[@and="solid 1px green"][@xml:lang="en-US"][@xml:id="id1"][not(child::node())][following-sibling::tau[contains(concat(@attribute,"$"),"lank$")]//tau[@xml:id="id2"][not(child::node())][following-sibling::mu[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[contains(concat(@number,"$"),"ontent$")][@xml:id="id3"][not(following-sibling::*)]/iota[contains(concat(@class,"$"),"odeValue$")][@xml:id="id4"][not(following-sibling::*)]//lambda[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@string][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::omega[@xml:id="id5"][preceding-sibling::*[position() = 2]]/phi[@xml:lang="no"]/*[starts-with(concat(@attrib,"-"),"this.nodeValue-")][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@xml:lang="nb"]/beta[starts-with(concat(@token,"-"),"false-")][@xml:lang="nb"][following-sibling::mu[starts-with(concat(@content,"-"),"another attribute value-")][@xml:lang="no"][@xml:id="id8"][following-sibling::delta[preceding-sibling::*[position() = 2]][following-sibling::omega[contains(@desciption,"tr")]/phi[not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::sigma[@xml:lang="en-US"]/eta[@xml:lang="no-nb"][@xml:id="id9"][not(following-sibling::*)]/sigma[@xml:lang="nb"][@xml:id="id10"][not(following-sibling::*)]/lambda[not(following-sibling::*)]/upsilon[starts-with(concat(@content,"-"),"content-")][@xml:lang="en-US"][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta object="content"> + <nu and="solid 1px green" xml:lang="en-US" xml:id="id1"/> + <tau attribute="_blank"> + <tau xml:id="id2"/> + <mu xml:lang="en-US"> + <tau number="content" xml:id="id3"> + <iota class="this.nodeValue" xml:id="id4"> + <lambda xml:lang="en"/> + <rho string="attribute" xml:lang="en-GB"/> + <omega xml:id="id5"> + <phi xml:lang="no"> + <any attrib="this.nodeValue" xml:id="id6"> + <iota xml:id="id7"> + <alpha xml:lang="nb"> + <beta token="false" xml:lang="nb"/> + <mu content="another attribute value" xml:lang="no" xml:id="id8"/> + <delta/> + <omega desciption="true"> + <phi/> + <sigma xml:lang="en-US"> + <eta xml:lang="no-nb" xml:id="id9"> + <sigma xml:lang="nb" xml:id="id10"> + <lambda> + <upsilon content="content" xml:lang="en-US"> + <green>This text must be green</green> + </upsilon> + </lambda> + </sigma> + </eta> + </sigma> + </omega> + </alpha> + </iota> + </any> + </phi> + </omega> + </iota> + </tau> + </mu> + </tau> + </eta> + </tree> + </test> + <test> + <xpath>//psi[contains(@name,"e")][@xml:lang="no"][@xml:id="id1"]//chi[@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:id="id3"][not(following-sibling::*)]/alpha[not(preceding-sibling::*)]//nu[@xml:id="id4"]//kappa[contains(concat(@false,"$"),"nother attribute value$")][following-sibling::sigma[@xml:lang="en-US"][not(following-sibling::*)]/mu[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[starts-with(@delete,"solid 1p")]/psi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[not(following-sibling::*)]/chi[contains(@name,"%")][@xml:lang="no-nb"][@xml:id="id6"][following-sibling::phi[preceding-sibling::*[position() = 1]]//iota[@xml:lang="no-nb"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@xml:lang="en"][@xml:id="id8"][not(preceding-sibling::*)]/chi[starts-with(concat(@delete,"-"),"true-")][@xml:lang="en-US"][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <psi name="another attribute value" xml:lang="no" xml:id="id1"> + <chi xml:lang="en" xml:id="id2"/> + <phi xml:id="id3"> + <alpha> + <nu xml:id="id4"> + <kappa false="another attribute value"/> + <sigma xml:lang="en-US"> + <mu xml:id="id5"/> + <lambda xml:lang="no"/> + <nu delete="solid 1px green"> + <psi xml:lang="no-nb"/> + <omega> + <chi name="100%" xml:lang="no-nb" xml:id="id6"/> + <phi> + <iota xml:lang="no-nb" xml:id="id7"/> + <xi> + <chi xml:lang="en" xml:id="id8"> + <chi delete="true" xml:lang="en-US"> + <green>This text must be green</green> + </chi> + </chi> + </xi> + </phi> + </omega> + </nu> + </sigma> + </nu> + </alpha> + </phi> + </psi> + </tree> + </test> + <test> + <xpath>//zeta[@xml:lang="en-US"]/theta[@title][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::nu[@number="123456789"][@xml:lang="no"]/sigma[starts-with(@attribute,"attribu")][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en"][following-sibling::*[position()=2]][not(child::node())][following-sibling::sigma[@and][@xml:id="id1"][preceding-sibling::sigma[2]][not(child::node())][following-sibling::omega[@xml:id="id2"]/nu[@insert="123456789"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[contains(concat(@abort,"$"),"eValue$")][@xml:id="id4"][not(child::node())][following-sibling::kappa[preceding-sibling::*[position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta xml:lang="en-US"> + <theta title="solid 1px green" xml:lang="en-US"/> + <nu number="123456789" xml:lang="no"> + <sigma attribute="attribute-value" xml:lang="nb"/> + <sigma xml:lang="en"/> + <sigma and="123456789" xml:id="id1"/> + <omega xml:id="id2"> + <nu insert="123456789" xml:id="id3"> + <omega abort="this.nodeValue" xml:id="id4"/> + <kappa> + <green>This text must be green</green> + </kappa> + </nu> + </omega> + </nu> + </zeta> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no-nb"]/omega[@xml:lang="en-GB"][@xml:id="id1"][not(following-sibling::*)]//alpha[@xml:lang="no"][@xml:id="id2"]//tau[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[following-sibling::eta[@number][@xml:lang="no"][@xml:id="id3"]//epsilon[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]/sigma[@xml:id="id5"][not(child::node())][following-sibling::theta[starts-with(concat(@name,"-"),"true-")][@xml:lang="en-US"][not(child::node())][following-sibling::rho//xi[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="en"][@xml:id="id6"]//sigma[@title][@xml:lang="en"][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta xml:lang="no-nb"> + <omega xml:lang="en-GB" xml:id="id1"> + <alpha xml:lang="no" xml:id="id2"> + <tau xml:lang="en-GB"/> + <lambda/> + <eta number="solid 1px green" xml:lang="no" xml:id="id3"> + <epsilon xml:lang="en-US" xml:id="id4"> + <sigma xml:id="id5"/> + <theta name="true" xml:lang="en-US"/> + <rho> + <xi content="attribute-value" xml:lang="en" xml:id="id6"> + <sigma title="100%" xml:lang="en"> + <green>This text must be green</green> + </sigma> + </xi> + </rho> + </epsilon> + </eta> + </alpha> + </omega> + </beta> + </tree> + </test> + <test> + <xpath>//zeta[@content]/chi[not(child::node())][following-sibling::*[starts-with(@abort,"att")][@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 1]]//mu[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[contains(@false,"ribute")][@xml:lang="en-GB"]/alpha[@number][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@src][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::omicron[@abort="_blank"][@xml:id="id4"][not(child::node())][following-sibling::iota[@xml:lang="nb"][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::omega[@xml:lang="no-nb"][@xml:id="id5"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//xi[following-sibling::*[position()=2]][not(child::node())][following-sibling::mu[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::tau[@data][@xml:id="id6"][not(following-sibling::*)]//iota[@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en"][preceding-sibling::*[position() = 1]]//sigma[@true][@xml:lang="en"][@xml:id="id8"][following-sibling::beta[preceding-sibling::*[position() = 1]][following-sibling::omicron[@xml:lang="no-nb"][not(following-sibling::*)][position() = 1]]]]][position() = 1]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <zeta content="this-is-att-value"> + <chi/> + <any abort="attribute" xml:lang="en-US" xml:id="id1"> + <mu xml:lang="en-GB" xml:id="id2"> + <alpha false="attribute" xml:lang="en-GB"> + <alpha number="this-is-att-value" xml:lang="en-GB"> + <epsilon src="solid 1px green" xml:id="id3"/> + <omicron abort="_blank" xml:id="id4"/> + <iota xml:lang="nb"/> + <phi/> + <omega xml:lang="no-nb" xml:id="id5"> + <xi/> + <mu xml:lang="no"/> + <tau data="another attribute value" xml:id="id6"> + <iota xml:id="id7"/> + <omicron xml:lang="en"> + <sigma true="_blank" xml:lang="en" xml:id="id8"/> + <beta/> + <omicron xml:lang="no-nb"> + <green>This text must be green</green> + </omicron> + </omicron> + </tau> + </omega> + </alpha> + </alpha> + </mu> + </any> + </zeta> + </tree> + </test> + <test> + <xpath>//gamma[@xml:id="id1"]/*[following-sibling::*[position()=3]][not(child::node())][following-sibling::eta[preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="en-GB"][following-sibling::lambda[@xml:lang="no-nb"][@xml:id="id2"][preceding-sibling::*[position() = 3]]/omega[not(preceding-sibling::*)][not(following-sibling::*)]//omega//delta[starts-with(@attrib,"10")][following-sibling::*[position()=3]][not(child::node())][following-sibling::gamma[@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::chi[starts-with(@content,"100%")][@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[starts-with(@string,"att")][@xml:id="id4"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/sigma[@xml:lang="nb"][@xml:id="id5"][not(child::node())][following-sibling::nu[starts-with(concat(@att,"-"),"_blank-")][preceding-sibling::*[position() = 1]]/rho[@xml:lang="nb"][@xml:id="id6"]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <gamma xml:id="id1"> + <any/> + <eta/> + <xi xml:lang="en-GB"/> + <lambda xml:lang="no-nb" xml:id="id2"> + <omega> + <omega> + <delta attrib="100%"/> + <gamma xml:lang="no" xml:id="id3"/> + <chi content="100%" xml:lang="no"/> + <any string="attribute value" xml:id="id4"> + <sigma xml:lang="nb" xml:id="id5"/> + <nu att="_blank"> + <rho xml:lang="nb" xml:id="id6"> + <green>This text must be green</green> + </rho> + </nu> + </any> + </omega> + </omega> + </lambda> + </gamma> + </tree> + </test> + <test> + <xpath>//phi[@xml:lang="en-GB"]//chi[@xml:id="id1"][not(child::node())][following-sibling::delta[@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/lambda[starts-with(@number,"123456")][@xml:lang="en"][not(following-sibling::*)]//zeta[@xml:id="id2"][not(preceding-sibling::*)]//beta[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@xml:lang="no"][@xml:id="id4"][not(child::node())][following-sibling::alpha[contains(@false,"0%")][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[following-sibling::tau[@xml:id="id6"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//psi[starts-with(@string,"12345")][@xml:lang="nb"][@xml:id="id7"][not(preceding-sibling::*)]//delta[@delete][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//mu[@delete][not(preceding-sibling::*)]//xi[starts-with(concat(@abort,"-"),"123456789-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(preceding-sibling::xi)]][position() = 1]]]]]</xpath> + <tree> + <phi xml:lang="en-GB"> + <chi xml:id="id1"/> + <delta xml:lang="en"/> + <any xml:lang="en"> + <lambda number="123456789" xml:lang="en"> + <zeta xml:id="id2"> + <beta xml:id="id3"> + <psi xml:lang="no" xml:id="id4"/> + <alpha false="100%" xml:id="id5"/> + <zeta/> + <tau xml:id="id6"> + <psi string="123456789" xml:lang="nb" xml:id="id7"> + <delta delete="_blank" xml:lang="en-US"> + <mu delete="attribute value"> + <xi abort="123456789" xml:lang="en-GB"> + <green>This text must be green</green> + </xi> + </mu> + </delta> + </psi> + </tau> + </beta> + </zeta> + </lambda> + </any> + </phi> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no"]//omega[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::rho[@xml:lang="en"][@xml:id="id1"][following-sibling::*[position()=2]][not(child::node())][following-sibling::nu[starts-with(concat(@string,"-"),"attribute-")][@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::chi[starts-with(concat(@object,"-"),"123456789-")][@xml:id="id3"][not(following-sibling::*)]//psi[@true][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="no-nb"][@xml:id="id4"][not(following-sibling::*)]//rho[contains(@true,"%")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@xml:id="id6"][not(following-sibling::*)]//lambda[@title][@xml:lang="en"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@att][@xml:id="id8"][preceding-sibling::*[position() = 1]]/*[@desciption][@xml:id="id9"][not(preceding-sibling::any)][not(child::node())][following-sibling::zeta[@att][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::phi[@attribute="this.nodeValue"][@xml:lang="no"][preceding-sibling::*[position() = 2]]//beta[contains(@title,"ue")][@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@xml:id="id11"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[contains(@insert,"lan")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::epsilon[@name][@xml:id="id12"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <iota xml:lang="no"> + <omega xml:lang="en-US"/> + <rho xml:lang="en" xml:id="id1"/> + <nu string="attribute-value" xml:id="id2"/> + <chi object="123456789" xml:id="id3"> + <psi true="true"/> + <xi xml:lang="no-nb" xml:id="id4"> + <rho true="100%" xml:id="id5"> + <pi xml:id="id6"> + <lambda title="123456789" xml:lang="en" xml:id="id7"/> + <mu att="solid 1px green" xml:id="id8"> + <any desciption="123456789" xml:id="id9"/> + <zeta att="this-is-att-value" xml:lang="no-nb"/> + <phi attribute="this.nodeValue" xml:lang="no"> + <beta title="attribute-value" xml:id="id10"/> + <pi xml:id="id11"/> + <delta insert="_blank" xml:lang="en-US"/> + <epsilon name="this-is-att-value" xml:id="id12"> + <green>This text must be green</green> + </epsilon> + </phi> + </mu> + </pi> + </rho> + </xi> + </chi> + </iota> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="nb"][@xml:id="id1"]//xi[not(following-sibling::*)]//sigma/chi[starts-with(concat(@delete,"-"),"false-")][not(preceding-sibling::*)][not(following-sibling::*)]//phi[not(child::node())][following-sibling::iota[@attr][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[@attribute="solid 1px green"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@xml:lang="en"]]</xpath> + <tree> + <iota xml:lang="nb" xml:id="id1"> + <xi> + <sigma> + <chi delete="false"> + <phi/> + <iota attr="attribute-value"> + <phi attribute="solid 1px green"> + <sigma xml:lang="en"> + <green>This text must be green</green> + </sigma> + </phi> + </iota> + </chi> + </sigma> + </xi> + </iota> + </tree> + </test> + <test> + <xpath>//xi[contains(@object,"al")][@xml:lang="nb"][@xml:id="id1"]/omega[starts-with(@data,"12345678")][@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@token][@xml:lang="en-US"][following-sibling::lambda[@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]/omega[starts-with(concat(@data,"-"),"true-")][@xml:id="id5"][not(following-sibling::*)]]]]</xpath> + <tree> + <xi object="false" xml:lang="nb" xml:id="id1"> + <omega data="123456789" xml:lang="en-GB" xml:id="id2"/> + <any xml:lang="en" xml:id="id3"/> + <alpha token="false" xml:lang="en-US"/> + <lambda xml:lang="nb" xml:id="id4"> + <omega data="true" xml:id="id5"> + <green>This text must be green</green> + </omega> + </lambda> + </xi> + </tree> + </test> + <test> + <xpath>//lambda[@string="another attribute value"][@xml:id="id1"]/delta[@xml:lang="en-US"][not(following-sibling::*)]/kappa[@attrib="solid 1px green"][@xml:id="id2"][not(preceding-sibling::*)]//iota[@xml:id="id3"][not(preceding-sibling::*)]//chi[following-sibling::*[position()=4]][not(child::node())][following-sibling::rho[@xml:id="id4"][following-sibling::tau[@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 3]][following-sibling::zeta[@xml:id="id6"]//lambda[@xml:lang="no-nb"][following-sibling::theta[starts-with(concat(@data,"-"),"another attribute value-")][not(following-sibling::*)]/delta[starts-with(concat(@token,"-"),"false-")][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[@xml:id="id7"][preceding-sibling::*[position() = 1]]//iota[starts-with(concat(@attribute,"-"),"true-")][@xml:id="id8"][not(following-sibling::*)]/lambda[@xml:lang="en"][@xml:id="id9"][not(following-sibling::*)]//omicron[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[@token][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[@xml:lang="no"][@xml:id="id11"][not(preceding-sibling::*)]/psi[starts-with(@att,"this-is")][@xml:lang="en"][not(preceding-sibling::*)][following-sibling::*[@attrib][@xml:lang="en-US"][@xml:id="id12"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//iota[@or="solid 1px green"][@xml:id="id13"][not(preceding-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]]]</xpath> + <tree> + <lambda string="another attribute value" xml:id="id1"> + <delta xml:lang="en-US"> + <kappa attrib="solid 1px green" xml:id="id2"> + <iota xml:id="id3"> + <chi/> + <rho xml:id="id4"/> + <tau xml:lang="no" xml:id="id5"/> + <beta/> + <zeta xml:id="id6"> + <lambda xml:lang="no-nb"/> + <theta data="another attribute value"> + <delta token="false"/> + <lambda xml:id="id7"> + <iota attribute="true" xml:id="id8"> + <lambda xml:lang="en" xml:id="id9"> + <omicron xml:lang="en-GB"> + <beta xml:id="id10"> + <nu token="another attribute value"> + <sigma xml:lang="no" xml:id="id11"> + <psi att="this-is-att-value" xml:lang="en"/> + <any attrib="false" xml:lang="en-US" xml:id="id12"> + <iota or="solid 1px green" xml:id="id13"> + <green>This text must be green</green> + </iota> + </any> + </sigma> + </nu> + </beta> + </omicron> + </lambda> + </iota> + </lambda> + </theta> + </zeta> + </iota> + </kappa> + </delta> + </lambda> + </tree> + </test> + <test> + <xpath>//xi/nu[starts-with(@name,"_bla")][@xml:id="id1"]//upsilon[@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 1]]/chi[@string][@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[contains(@attrib,"tt-value")][not(following-sibling::*)]//chi[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[starts-with(@class,"c")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi//alpha[not(following-sibling::*)]]]][position() = 1]]</xpath> + <tree> + <xi> + <nu name="_blank" xml:id="id1"> + <upsilon xml:lang="en-GB"/> + <upsilon> + <chi string="true" xml:lang="nb" xml:id="id2"/> + <sigma attrib="this-is-att-value"> + <chi xml:lang="en-US" xml:id="id3"/> + <rho class="content"/> + <pi> + <alpha> + <green>This text must be green</green> + </alpha> + </pi> + </sigma> + </upsilon> + </nu> + </xi> + </tree> + </test> + <test> + <xpath>//alpha[starts-with(concat(@attribute,"-"),"_blank-")][@xml:lang="en-US"]/omicron[@and="attribute-value"][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::zeta[@attribute][@xml:id="id1"][not(following-sibling::*)]/delta[@content][not(following-sibling::*)]//delta[@xml:lang="no-nb"]//lambda[@xml:lang="no-nb"][not(preceding-sibling::*)]]</xpath> + <tree> + <alpha attribute="_blank" xml:lang="en-US"> + <omicron and="attribute-value" xml:lang="no"/> + <zeta attribute="123456789" xml:id="id1"> + <delta content="another attribute value"> + <delta xml:lang="no-nb"> + <lambda xml:lang="no-nb"> + <green>This text must be green</green> + </lambda> + </delta> + </delta> + </zeta> + </alpha> + </tree> + </test> + <test> + <xpath>//alpha[contains(concat(@string,"$"),"e value$")][@xml:id="id1"]//delta[contains(concat(@attrib,"$"),"tribute$")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//gamma[contains(@desciption,"u")][not(preceding-sibling::*)]/mu[@xml:lang="no-nb"][not(following-sibling::*)]//chi[@xml:lang="no"][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota[@xml:lang="en"][not(following-sibling::*)]/psi[starts-with(@name,"con")][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[contains(@src,"value")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//nu[@xml:id="id3"]//zeta[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]/iota[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <alpha string="attribute value" xml:id="id1"> + <delta attrib="attribute" xml:lang="no-nb" xml:id="id2"> + <gamma desciption="another attribute value"> + <mu xml:lang="no-nb"> + <chi xml:lang="no"/> + <iota xml:lang="en"> + <psi name="content" xml:lang="en-US"/> + <rho src="this-is-att-value"> + <nu xml:id="id3"> + <zeta xml:lang="no-nb" xml:id="id4"> + <iota xml:lang="en" xml:id="id5"> + <green>This text must be green</green> + </iota> + </zeta> + </nu> + </rho> + </iota> + </mu> + </gamma> + </delta> + </alpha> + </tree> + </test> + <test> + <xpath>//beta[@attrib]//sigma[@xml:lang="en-US"][@xml:id="id1"][following-sibling::*[position()=5]][not(child::node())][following-sibling::lambda[@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][not(child::node())][following-sibling::theta[@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::rho[starts-with(concat(@and,"-"),"123456789-")][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::*[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::pi[@name][not(following-sibling::*)]/kappa[starts-with(@or,"a")][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::theta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::phi[@xml:id="id6"][not(following-sibling::*)]/gamma[@att][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <beta attrib="123456789"> + <sigma xml:lang="en-US" xml:id="id1"/> + <lambda xml:lang="nb"/> + <theta xml:id="id2"/> + <rho and="123456789" xml:id="id3"/> + <any xml:lang="no" xml:id="id4"/> + <pi name="false"> + <kappa or="another attribute value" xml:id="id5"/> + <theta xml:lang="en-GB"/> + <phi xml:id="id6"> + <gamma att="content"> + <green>This text must be green</green> + </gamma> + </phi> + </pi> + </beta> + </tree> + </test> + <test> + <xpath>//omega[@delete][@xml:lang="no"][@xml:id="id1"]//psi[@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::delta[@object][@xml:lang="no"]/phi[@xml:id="id3"]//nu[@xml:id="id4"][not(child::node())][following-sibling::theta[@desciption][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/epsilon[@xml:lang="no-nb"][not(child::node())][following-sibling::psi[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/zeta/phi[contains(@or,"te")][@xml:lang="no-nb"][not(following-sibling::*)]//alpha[@src][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@xml:lang="no"][not(child::node())][following-sibling::sigma[following-sibling::*[position()=1]][not(child::node())][following-sibling::alpha[starts-with(@or,"attribute ")][@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)]/alpha[contains(concat(@attr,"$"),"%$")][@xml:lang="en"][@xml:id="id7"][not(child::node())][following-sibling::epsilon[starts-with(concat(@content,"-"),"another attribute value-")][not(following-sibling::epsilon)]//gamma[@number="solid 1px green"][@xml:id="id8"][not(following-sibling::*)]//eta[contains(@object,"tru")][@xml:lang="en-GB"][@xml:id="id9"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[contains(concat(@attr,"$"),"-is-att-value$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id10"][preceding-sibling::*[position() = 2]][following-sibling::theta[preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]]]]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <omega delete="content" xml:lang="no" xml:id="id1"> + <psi xml:lang="en-GB" xml:id="id2"/> + <delta object="attribute" xml:lang="no"> + <phi xml:id="id3"> + <nu xml:id="id4"/> + <theta desciption="this-is-att-value"> + <epsilon xml:lang="no-nb"/> + <psi xml:id="id5"> + <zeta> + <phi or="attribute" xml:lang="no-nb"> + <alpha src="false"/> + <omega xml:lang="no"/> + <sigma/> + <alpha or="attribute value" xml:lang="nb" xml:id="id6"> + <alpha attr="100%" xml:lang="en" xml:id="id7"/> + <epsilon content="another attribute value"> + <gamma number="solid 1px green" xml:id="id8"> + <eta object="true" xml:lang="en-GB" xml:id="id9"/> + <psi attr="this-is-att-value" xml:lang="en-GB"/> + <xi xml:lang="en-GB" xml:id="id10"/> + <theta> + <green>This text must be green</green> + </theta> + </gamma> + </epsilon> + </alpha> + </phi> + </zeta> + </psi> + </theta> + </phi> + </delta> + </omega> + </tree> + </test> + <test> + <xpath>//xi[@xml:lang="no-nb"]/alpha[@insert][@xml:lang="no-nb"][@xml:id="id1"][not(preceding-sibling::*)]//psi[@attrib][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::lambda[starts-with(@att,"another attribute")][@xml:lang="no"][@xml:id="id3"][not(child::node())][following-sibling::omega[contains(@src,"se")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//psi[not(following-sibling::*)][not(preceding-sibling::psi)]//epsilon[@xml:id="id4"][not(preceding-sibling::*)]//kappa[contains(@token,"ttribut")][@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)]//nu[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[@attrib="_blank"][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[not(following-sibling::*)]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi xml:lang="no-nb"> + <alpha insert="true" xml:lang="no-nb" xml:id="id1"> + <psi attrib="false" xml:lang="en-US" xml:id="id2"/> + <lambda att="another attribute value" xml:lang="no" xml:id="id3"/> + <omega src="false" xml:lang="no"> + <psi> + <epsilon xml:id="id4"> + <kappa token="attribute-value" xml:lang="en" xml:id="id5"> + <nu xml:id="id6"/> + <any attrib="_blank" xml:id="id7"/> + <nu> + <green>This text must be green</green> + </nu> + </kappa> + </epsilon> + </psi> + </omega> + </alpha> + </xi> + </tree> + </test> + <test> + <xpath>//theta[@xml:id="id1"]//iota[@attrib][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::kappa[contains(@and,"an")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::beta[@src="content"][@xml:lang="no-nb"][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::psi[contains(concat(@attrib,"$"),"6789$")][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 3]]/gamma[not(following-sibling::*)]//gamma[starts-with(@att,"this-is-att-va")][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <theta xml:id="id1"> + <iota attrib="this.nodeValue" xml:id="id2"/> + <kappa and="_blank" xml:lang="en"/> + <beta src="content" xml:lang="no-nb" xml:id="id3"/> + <psi attrib="123456789" xml:lang="nb" xml:id="id4"> + <gamma> + <gamma att="this-is-att-value" xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </gamma> + </gamma> + </psi> + </theta> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="en-US"][@xml:id="id1"]/rho[@xml:lang="en"][@xml:id="id2"][not(following-sibling::*)]/delta[@xml:id="id3"][following-sibling::*[@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/tau//zeta[@xml:lang="en-US"][not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <alpha xml:lang="en-US" xml:id="id1"> + <rho xml:lang="en" xml:id="id2"> + <delta xml:id="id3"/> + <any xml:lang="en-US" xml:id="id4"/> + <chi xml:lang="nb"> + <tau> + <zeta xml:lang="en-US"> + <green>This text must be green</green> + </zeta> + </tau> + </chi> + </rho> + </alpha> + </tree> + </test> + <test> + <xpath>//iota[@xml:lang="no-nb"][@xml:id="id1"]/omega[@xml:lang="en-US"][not(preceding-sibling::*)]//rho[@xml:lang="en"][not(following-sibling::*)]//theta[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:id="id3"][following-sibling::alpha[@xml:lang="nb"][not(following-sibling::*)]/nu[@false="123456789"][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::epsilon[@xml:lang="en-US"][@xml:id="id4"][following-sibling::omega[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 2]]]]]]</xpath> + <tree> + <iota xml:lang="no-nb" xml:id="id1"> + <omega xml:lang="en-US"> + <rho xml:lang="en"> + <theta xml:lang="en-GB" xml:id="id2"/> + <phi xml:id="id3"/> + <alpha xml:lang="nb"> + <nu false="123456789" xml:lang="no-nb"/> + <epsilon xml:lang="en-US" xml:id="id4"/> + <omega xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </omega> + </alpha> + </rho> + </omega> + </iota> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]/sigma[starts-with(concat(@delete,"-"),"this-")][@xml:lang="no"][@xml:id="id2"][not(child::node())][following-sibling::sigma[@xml:id="id3"][not(following-sibling::*)]/sigma[@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::chi[contains(@object,"i")][@xml:id="id5"][following-sibling::*[position()=3]][not(child::node())][following-sibling::theta[@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::psi[@and][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][following-sibling::theta[starts-with(concat(@insert,"-"),"content-")][@xml:id="id7"]]]]]]</xpath> + <tree> + <nu xml:id="id1"> + <sigma delete="this-is-att-value" xml:lang="no" xml:id="id2"/> + <sigma xml:id="id3"> + <sigma xml:lang="en-GB" xml:id="id4"/> + <chi object="attribute" xml:id="id5"/> + <theta xml:id="id6"/> + <psi and="100%" xml:lang="en-GB"/> + <theta insert="content" xml:id="id7"> + <green>This text must be green</green> + </theta> + </sigma> + </nu> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="en"][@xml:id="id1"]//psi[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[@xml:lang="no"][@xml:id="id2"][following-sibling::iota[starts-with(@insert,"this.nodeValue")][not(following-sibling::*)]/alpha[following-sibling::sigma[contains(@abort,"s.")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[not(following-sibling::*)]//phi[@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::delta[preceding-sibling::*[position() = 1]]/phi[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[contains(concat(@or,"$"),"value$")][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//zeta//theta[@xml:id="id5"][following-sibling::*[position()=8]][not(child::node())][following-sibling::tau[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[contains(concat(@class,"$"),"ue$")][not(child::node())][following-sibling::beta[starts-with(concat(@string,"-"),"solid 1px green-")][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 3]][following-sibling::lambda[@desciption][@xml:lang="no-nb"][@xml:id="id8"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::chi[@object][@xml:lang="en"][preceding-sibling::*[position() = 5]][not(following-sibling::chi)][following-sibling::delta[@att][@xml:lang="no"][@xml:id="id9"][preceding-sibling::*[position() = 6]][not(child::node())][following-sibling::rho[contains(@insert,"e")][preceding-sibling::*[position() = 7]][following-sibling::*[position()=1]][following-sibling::rho[@xml:lang="nb"][preceding-sibling::*[position() = 8]]//epsilon[contains(@attrib,"other attribute value")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@xml:lang="en-US"][not(following-sibling::*)]/omicron[@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <eta xml:lang="en" xml:id="id1"> + <psi xml:lang="no-nb"> + <tau xml:lang="no" xml:id="id2"/> + <iota insert="this.nodeValue"> + <alpha/> + <sigma abort="this.nodeValue"> + <alpha> + <phi xml:lang="no-nb"/> + <delta> + <phi xml:id="id3"/> + <kappa or="this-is-att-value" xml:id="id4"> + <zeta> + <theta xml:id="id5"/> + <tau xml:id="id6"/> + <delta class="this-is-att-value"/> + <beta string="solid 1px green" xml:lang="en" xml:id="id7"/> + <lambda desciption="true" xml:lang="no-nb" xml:id="id8"/> + <chi object="true" xml:lang="en"/> + <delta att="true" xml:lang="no" xml:id="id9"/> + <rho insert="solid 1px green"/> + <rho xml:lang="nb"> + <epsilon attrib="another attribute value" xml:lang="en"> + <kappa xml:lang="en-US"> + <omicron xml:lang="en-GB"> + <green>This text must be green</green> + </omicron> + </kappa> + </epsilon> + </rho> + </zeta> + </kappa> + </delta> + </alpha> + </sigma> + </iota> + </psi> + </eta> + </tree> + </test> + <test> + <xpath>//*[@xml:id="id1"]//psi[@data][@xml:id="id2"]/iota[@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::gamma[starts-with(@delete,"10")][@xml:id="id3"][not(following-sibling::*)]//omega[@xml:lang="no"][not(preceding-sibling::*)]/chi[contains(@insert,"at")]//omega[contains(concat(@attribute,"$"),"true$")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[contains(@object,"conte")][@xml:lang="no"][@xml:id="id4"]]</xpath> + <tree> + <any xml:id="id1"> + <psi data="_blank" xml:id="id2"> + <iota xml:lang="nb"/> + <gamma delete="100%" xml:id="id3"> + <omega xml:lang="no"> + <chi insert="attribute value"> + <omega attribute="true" xml:lang="en"> + <upsilon object="content" xml:lang="no" xml:id="id4"> + <green>This text must be green</green> + </upsilon> + </omega> + </chi> + </omega> + </gamma> + </psi> + </any> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="en"][@xml:id="id1"]/nu[not(preceding-sibling::*)]/mu[starts-with(@false,"th")][@xml:id="id2"][not(following-sibling::*)]//omicron[@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]/epsilon[@attribute][@xml:lang="en-US"][following-sibling::kappa[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[@desciption="false"][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)]//omega[contains(concat(@class,"$"),"false$")][following-sibling::*[position()=1]][following-sibling::phi[@data="100%"][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:lang="en" xml:id="id1"> + <nu> + <mu false="this-is-att-value" xml:id="id2"> + <omicron xml:lang="nb" xml:id="id3"> + <epsilon attribute="false" xml:lang="en-US"/> + <kappa> + <eta desciption="false" xml:lang="en-GB" xml:id="id4"> + <omega class="false"/> + <phi data="100%" xml:lang="no-nb"> + <green>This text must be green</green> + </phi> + </eta> + </kappa> + </omicron> + </mu> + </nu> + </nu> + </tree> + </test> + <test> + <xpath>//kappa[starts-with(concat(@object,"-"),"100%-")][@xml:lang="en-US"]//pi[@or][@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]]//alpha[@attr][@xml:lang="en-GB"]//kappa[contains(@or,"ntent")][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)]//omicron[not(preceding-sibling::*)]/omega[not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@insert][not(preceding-sibling::*)][following-sibling::gamma[contains(concat(@false,"$"),"%$")][@xml:id="id4"][not(following-sibling::*)]/theta[@xml:lang="en"]]]</xpath> + <tree> + <kappa object="100%" xml:lang="en-US"> + <pi or="solid 1px green" xml:id="id1"/> + <psi xml:lang="no" xml:id="id2"> + <alpha attr="another attribute value" xml:lang="en-GB"> + <kappa or="content" xml:lang="en" xml:id="id3"> + <omicron> + <omega> + <xi xml:lang="en-US"> + <mu insert="123456789"/> + <gamma false="100%" xml:id="id4"> + <theta xml:lang="en"> + <green>This text must be green</green> + </theta> + </gamma> + </xi> + </omega> + </omicron> + </kappa> + </alpha> + </psi> + </kappa> + </tree> + </test> + <test> + <xpath>//delta[@xml:id="id1"]/theta[@xml:lang="en-GB"][@xml:id="id2"][not(preceding-sibling::*)]//lambda[starts-with(@att,"another attribute")][@xml:lang="no"][not(preceding-sibling::*)]//pi[contains(@token,"ank")][@xml:lang="en"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id5"][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[starts-with(concat(@abort,"-"),"this.nodeValue-")][@xml:lang="no-nb"][@xml:id="id6"][not(following-sibling::kappa)][following-sibling::psi[contains(concat(@attrib,"$"),"ribute value$")][@xml:id="id7"][preceding-sibling::*[position() = 3]]//psi[@token][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=5]][not(child::node())][following-sibling::mu[preceding-sibling::*[position() = 1]][following-sibling::*[@insert][@xml:id="id9"][following-sibling::lambda[@attr][@xml:lang="no-nb"][@xml:id="id10"][following-sibling::rho[starts-with(concat(@desciption,"-"),"this-")][@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::alpha[@xml:lang="en-GB"][@xml:id="id11"]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta xml:id="id1"> + <theta xml:lang="en-GB" xml:id="id2"> + <lambda att="another attribute value" xml:lang="no"> + <pi token="_blank" xml:lang="en" xml:id="id3"> + <zeta xml:id="id4"/> + <tau xml:lang="en-GB" xml:id="id5"/> + <kappa abort="this.nodeValue" xml:lang="no-nb" xml:id="id6"/> + <psi attrib="attribute value" xml:id="id7"> + <psi token="this-is-att-value" xml:id="id8"/> + <mu/> + <any insert="this-is-att-value" xml:id="id9"/> + <lambda attr="another attribute value" xml:lang="no-nb" xml:id="id10"/> + <rho desciption="this-is-att-value" xml:lang="nb"/> + <alpha xml:lang="en-GB" xml:id="id11"> + <green>This text must be green</green> + </alpha> + </psi> + </pi> + </lambda> + </theta> + </delta> + </tree> + </test> + <test> + <xpath>//nu[starts-with(concat(@attrib,"-"),"this-")]//gamma/rho[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[@xml:id="id2"][not(child::node())][following-sibling::epsilon/upsilon[contains(concat(@object,"$"),"ntent$")][@xml:lang="nb"][not(following-sibling::*)]/pi[@xml:lang="en-GB"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[preceding-sibling::*[position() = 1]]/*[@delete][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=3]][following-sibling::lambda[@xml:id="id4"][not(child::node())][following-sibling::delta[@xml:lang="en-GB"][following-sibling::psi[not(following-sibling::*)]/zeta[starts-with(@or,"attribute")][not(preceding-sibling::*)]/rho[contains(@string,"bute-value")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"]//upsilon[@abort="attribute-value"][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]/upsilon[@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:id="id6"][not(following-sibling::*)]/beta[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[contains(@content,"t")][@xml:lang="en"][@xml:id="id8"][not(child::node())][following-sibling::*[starts-with(@token,"_bl")][@xml:id="id9"][following-sibling::rho[contains(concat(@content,"$"),"ribute-value$")][@xml:lang="no-nb"][@xml:id="id10"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <nu attrib="this-is-att-value"> + <gamma> + <rho xml:lang="nb" xml:id="id1"> + <alpha xml:id="id2"/> + <epsilon> + <upsilon object="content" xml:lang="nb"> + <pi xml:lang="en-GB" xml:id="id3"/> + <omega> + <any delete="_blank" xml:lang="nb"/> + <lambda xml:id="id4"/> + <delta xml:lang="en-GB"/> + <psi> + <zeta or="attribute-value"> + <rho string="attribute-value" xml:lang="no"/> + <epsilon xml:lang="no-nb"> + <upsilon abort="attribute-value" xml:lang="en-GB"> + <upsilon xml:id="id5"/> + <eta xml:id="id6"> + <beta xml:lang="en-GB" xml:id="id7"> + <lambda content="true" xml:lang="en" xml:id="id8"/> + <any token="_blank" xml:id="id9"/> + <rho content="attribute-value" xml:lang="no-nb" xml:id="id10"> + <tau> + <green>This text must be green</green> + </tau> + </rho> + </beta> + </eta> + </upsilon> + </epsilon> + </zeta> + </psi> + </omega> + </upsilon> + </epsilon> + </rho> + </gamma> + </nu> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="nb"]/delta[not(preceding-sibling::*)]//omicron[contains(concat(@content,"$"),"nodeValue$")][@xml:lang="nb"][not(following-sibling::*)]//tau[@xml:lang="nb"][@xml:id="id1"]/theta[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:lang="en-US"]/delta[@xml:lang="en-US"][not(preceding-sibling::*)]//theta[not(child::node())][following-sibling::kappa[starts-with(concat(@desciption,"-"),"another attribute value-")][@xml:lang="no-nb"][@xml:id="id2"][not(following-sibling::*)]//chi[@string][@xml:id="id3"][following-sibling::sigma[following-sibling::*[position()=1]][following-sibling::gamma[starts-with(concat(@attr,"-"),"_blank-")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]/epsilon[contains(concat(@false,"$"),"e$")][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//theta[@data="solid 1px green"][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[not(preceding-sibling::*)][not(following-sibling::*)]/zeta[not(following-sibling::*)]//lambda[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)]//omicron[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][not(following-sibling::*)]/omicron[@xml:lang="en"][@xml:id="id7"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau xml:lang="nb"> + <delta> + <omicron content="this.nodeValue" xml:lang="nb"> + <tau xml:lang="nb" xml:id="id1"> + <theta xml:lang="en-US"/> + <omicron xml:lang="en-US"> + <delta xml:lang="en-US"> + <theta/> + <kappa desciption="another attribute value" xml:lang="no-nb" xml:id="id2"> + <chi string="123456789" xml:id="id3"/> + <sigma/> + <gamma attr="_blank" xml:lang="nb"> + <epsilon false="attribute value" xml:id="id4"> + <theta data="solid 1px green" xml:lang="en-US"> + <xi> + <zeta> + <lambda xml:lang="en-US" xml:id="id5"> + <omicron xml:lang="no" xml:id="id6"/> + <chi xml:lang="en-GB"> + <omicron xml:lang="en" xml:id="id7"> + <green>This text must be green</green> + </omicron> + </chi> + </lambda> + </zeta> + </xi> + </theta> + </epsilon> + </gamma> + </kappa> + </delta> + </omicron> + </tau> + </omicron> + </delta> + </tau> + </tree> + </test> + <test> + <xpath>//lambda[@xml:id="id1"]/kappa[contains(concat(@false,"$"),"k$")][@xml:id="id2"][following-sibling::zeta[not(child::node())][following-sibling::pi[contains(concat(@attrib,"$"),"e$")][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::delta[@xml:lang="en-GB"][not(child::node())][following-sibling::gamma[contains(@title,"ttribu")][@xml:id="id4"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/iota[@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::upsilon)]//sigma[@true][not(preceding-sibling::*)]/eta[@xml:lang="no-nb"]//lambda[@token][@xml:lang="en"][@xml:id="id7"][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda xml:id="id1"> + <kappa false="_blank" xml:id="id2"/> + <zeta/> + <pi attrib="true" xml:id="id3"/> + <delta xml:lang="en-GB"/> + <gamma title="attribute" xml:id="id4"> + <iota xml:id="id5"/> + <upsilon xml:lang="en-US" xml:id="id6"> + <sigma true="100%"> + <eta xml:lang="no-nb"> + <lambda token="100%" xml:lang="en" xml:id="id7"> + <green>This text must be green</green> + </lambda> + </eta> + </sigma> + </upsilon> + </gamma> + </lambda> + </tree> + </test> + <test> + <xpath>//kappa[@string="attribute"][@xml:id="id1"]/iota[contains(@title,"%")][@xml:id="id2"][following-sibling::xi[starts-with(concat(@src,"-"),"this.nodeValue-")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//theta[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]//pi[position() = 1]]]</xpath> + <tree> + <kappa string="attribute" xml:id="id1"> + <iota title="100%" xml:id="id2"/> + <xi src="this.nodeValue"> + <theta xml:lang="nb" xml:id="id3"/> + <beta xml:lang="en-US" xml:id="id4"> + <pi> + <green>This text must be green</green> + </pi> + </beta> + </xi> + </kappa> + </tree> + </test> + <test> + <xpath>//mu[starts-with(concat(@data,"-"),"attribute-")]//gamma[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[contains(@name,"-a")][@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[@xml:id="id2"][not(following-sibling::*)]//kappa[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[starts-with(@number,"a")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::delta[contains(@attribute,"r attribute value")][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[starts-with(concat(@src,"-"),"this-")][@xml:lang="en"][@xml:id="id5"][not(following-sibling::*)]/*[@or="_blank"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::lambda[starts-with(concat(@title,"-"),"content-")][@xml:lang="nb"][following-sibling::*[position()=1]][following-sibling::nu[starts-with(@token,"attrib")][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/beta[not(preceding-sibling::*)][not(following-sibling::*)]//zeta[starts-with(@att,"another attribu")][not(child::node())][following-sibling::phi[starts-with(concat(@data,"-"),"100%-")][@xml:lang="en-US"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][not(child::node())][following-sibling::pi[not(child::node())][following-sibling::*//pi[@xml:id="id6"][not(following-sibling::*)]//alpha[starts-with(concat(@abort,"-"),"true-")][@xml:id="id7"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]]]]</xpath> + <tree> + <mu data="attribute"> + <gamma xml:id="id1"> + <pi name="this-is-att-value" xml:lang="nb"/> + <tau xml:id="id2"> + <kappa xml:id="id3"> + <zeta number="attribute" xml:lang="no" xml:id="id4"/> + <delta attribute="another attribute value"/> + <beta> + <nu src="this-is-att-value" xml:lang="en" xml:id="id5"> + <any or="_blank"/> + <lambda title="content" xml:lang="nb"/> + <nu token="attribute-value"> + <beta> + <zeta att="another attribute value"/> + <phi data="100%" xml:lang="en-US"/> + <pi/> + <any> + <pi xml:id="id6"> + <alpha abort="true" xml:id="id7"> + <green>This text must be green</green> + </alpha> + </pi> + </any> + </beta> + </nu> + </nu> + </beta> + </kappa> + </tau> + </gamma> + </mu> + </tree> + </test> + <test> + <xpath>//*[contains(@string,"ent")][@xml:lang="nb"]//*[starts-with(@and,"true")][@xml:lang="en-US"][following-sibling::eta[@content="this.nodeValue"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::delta[@xml:lang="no"][not(child::node())][following-sibling::beta[contains(@src," 1")][@xml:id="id2"][following-sibling::psi[contains(concat(@string,"$"),"00%$")][@xml:id="id3"][following-sibling::iota[@xml:id="id4"][preceding-sibling::*[position() = 5]][not(following-sibling::*)][not(preceding-sibling::iota)]//zeta[contains(@string,"green")][@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]//beta[not(following-sibling::*)]/sigma[starts-with(@attribute,"another attribut")][@xml:lang="no"][not(preceding-sibling::*)]/delta[@string][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@class][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::nu[@xml:lang="en-US"][@xml:id="id7"][not(child::node())][following-sibling::beta[contains(@delete,"0%")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//mu[@xml:lang="no-nb"][not(following-sibling::*)]/eta[@xml:id="id8"][following-sibling::*[position()=5]][not(child::node())][following-sibling::phi[@xml:lang="no"][preceding-sibling::*[position() = 1]][following-sibling::zeta[contains(concat(@content,"$"),"-value$")][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::tau[contains(@or,"10")][@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 3]][following-sibling::psi[@xml:id="id10"][following-sibling::beta[@xml:lang="no-nb"]/mu[@xml:id="id11"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]]]][position() = 1]][position() = 1]]]]][position() = 1]]]</xpath> + <tree> + <any string="content" xml:lang="nb"> + <any and="true" xml:lang="en-US"/> + <eta content="this.nodeValue" xml:id="id1"/> + <delta xml:lang="no"/> + <beta src="solid 1px green" xml:id="id2"/> + <psi string="100%" xml:id="id3"/> + <iota xml:id="id4"> + <zeta string="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <beta> + <sigma attribute="another attribute value" xml:lang="no"> + <delta string="content" xml:lang="en"> + <rho class="this-is-att-value" xml:id="id6"/> + <nu xml:lang="en-US" xml:id="id7"/> + <beta delete="100%" xml:lang="no"> + <mu xml:lang="no-nb"> + <eta xml:id="id8"/> + <phi xml:lang="no"/> + <zeta content="this-is-att-value"/> + <tau or="100%" xml:lang="en-GB" xml:id="id9"/> + <psi xml:id="id10"/> + <beta xml:lang="no-nb"> + <mu xml:id="id11"> + <green>This text must be green</green> + </mu> + </beta> + </mu> + </beta> + </delta> + </sigma> + </beta> + </zeta> + </iota> + </any> + </tree> + </test> + <test> + <xpath>//xi//*[starts-with(concat(@abort,"-"),"attribute value-")][@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)]//beta[starts-with(@object,"this.nodeV")][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@and]/omicron[@xml:id="id2"]//lambda[@src="this-is-att-value"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[@token][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)]</xpath> + <tree> + <xi> + <any abort="attribute value" xml:lang="en-US" xml:id="id1"> + <beta object="this.nodeValue" xml:lang="en-US"> + <theta and="attribute-value"> + <omicron xml:id="id2"> + <lambda src="this-is-att-value" xml:id="id3"> + <theta token="_blank" xml:lang="en-GB" xml:id="id4"> + <green>This text must be green</green> + </theta> + </lambda> + </omicron> + </theta> + </beta> + </any> + </xi> + </tree> + </test> + <test> + <xpath>//rho/psi[@xml:id="id1"][following-sibling::beta[contains(concat(@class,"$"),"6789$")][@xml:lang="nb"][not(following-sibling::*)]/omicron[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::eta[@and][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[preceding-sibling::*[position() = 2]][following-sibling::theta/omicron[starts-with(concat(@object,"-"),"123456789-")][@xml:id="id2"][not(following-sibling::*)]//pi[@name][not(preceding-sibling::*)]/zeta[@class]//mu[contains(@insert,"u")][@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/gamma[starts-with(concat(@string,"-"),"100%-")][@xml:lang="no-nb"][not(preceding-sibling::*)][following-sibling::nu[@xml:id="id4"][preceding-sibling::*[position() = 1]]/epsilon[starts-with(concat(@attrib,"-"),"solid 1px green-")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:lang="en-GB"][@xml:id="id6"]/lambda[contains(concat(@string,"$"),"e$")][not(preceding-sibling::*)][following-sibling::nu/xi[starts-with(@abort,"attribute")][@xml:lang="nb"][not(preceding-sibling::*)]/*[contains(@number,"ttribute")][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@content][@xml:lang="en-US"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <rho> + <psi xml:id="id1"/> + <beta class="123456789" xml:lang="nb"> + <omicron xml:lang="en-US"/> + <eta and="attribute" xml:lang="en"/> + <any/> + <theta> + <omicron object="123456789" xml:id="id2"> + <pi name="solid 1px green"> + <zeta class="this.nodeValue"> + <mu insert="true" xml:lang="en-US" xml:id="id3"> + <gamma string="100%" xml:lang="no-nb"/> + <nu xml:id="id4"> + <epsilon attrib="solid 1px green" xml:id="id5"> + <xi xml:lang="en-GB" xml:id="id6"> + <lambda string="false"/> + <nu> + <xi abort="attribute" xml:lang="nb"> + <any number="attribute value"> + <iota content="attribute value" xml:lang="en-US"> + <green>This text must be green</green> + </iota> + </any> + </xi> + </nu> + </xi> + </epsilon> + </nu> + </mu> + </zeta> + </pi> + </omicron> + </theta> + </beta> + </rho> + </tree> + </test> + <test> + <xpath>//phi[@object]/sigma[contains(@insert,"tr")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[starts-with(@abort,"12345678")][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@or]/beta[not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[@desciption][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//zeta[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)]/omicron[@content][not(preceding-sibling::*)][not(following-sibling::*)]/lambda[contains(concat(@or,"$"),"lank$")][@xml:id="id2"]//sigma[@xml:id="id3"][following-sibling::gamma[@attribute][not(following-sibling::*)]//omicron[@attribute][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(preceding-sibling::omicron)][following-sibling::iota[@src][not(child::node())][following-sibling::rho[@xml:id="id5"][not(child::node())][following-sibling::*[@xml:lang="no"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//gamma[@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@att][@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//zeta[@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:id="id8"][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <phi object="solid 1px green"> + <sigma insert="true" xml:lang="en"> + <kappa abort="123456789"/> + <mu or="attribute-value"> + <beta/> + <chi desciption="false" xml:lang="en-GB"> + <zeta xml:lang="en-US" xml:id="id1"> + <omicron content="another attribute value"> + <lambda or="_blank" xml:id="id2"> + <sigma xml:id="id3"/> + <gamma attribute="attribute"> + <omicron attribute="this-is-att-value" xml:id="id4"/> + <iota src="another attribute value"/> + <rho xml:id="id5"/> + <any xml:lang="no"> + <gamma xml:lang="en-US" xml:id="id6"> + <alpha att="solid 1px green" xml:lang="en-GB"> + <zeta xml:id="id7"> + <eta xml:id="id8"> + <green>This text must be green</green> + </eta> + </zeta> + </alpha> + </gamma> + </any> + </gamma> + </lambda> + </omicron> + </zeta> + </chi> + </mu> + </sigma> + </phi> + </tree> + </test> + <test> + <xpath>//zeta[@token="attribute"][@xml:lang="en-US"]//zeta[@and][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[contains(concat(@title,"$"),"attribute value$")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/omicron[@xml:lang="en"]//nu[contains(@insert," value")][@xml:lang="en-GB"][@xml:id="id1"][following-sibling::tau[@true][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/xi[starts-with(@content,"t")][following-sibling::delta[@xml:lang="no"][@xml:id="id2"]/nu[contains(concat(@attr,"$"),"this-is-att-value$")][@xml:id="id3"][not(preceding-sibling::*)]//omicron[starts-with(concat(@delete,"-"),"false-")][@xml:lang="no"][@xml:id="id4"]//beta[starts-with(concat(@content,"-"),"this.nodeValue-")][@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@abort][@xml:lang="no"][@xml:id="id6"]]][position() = 1]]]</xpath> + <tree> + <zeta token="attribute" xml:lang="en-US"> + <zeta and="123456789"/> + <tau title="another attribute value" xml:lang="en-GB"> + <omicron xml:lang="en"> + <nu insert="another attribute value" xml:lang="en-GB" xml:id="id1"/> + <tau true="attribute"> + <xi content="true"/> + <delta xml:lang="no" xml:id="id2"> + <nu attr="this-is-att-value" xml:id="id3"> + <omicron delete="false" xml:lang="no" xml:id="id4"> + <beta content="this.nodeValue" xml:id="id5"/> + <any abort="_blank" xml:lang="no" xml:id="id6"> + <green>This text must be green</green> + </any> + </omicron> + </nu> + </delta> + </tau> + </omicron> + </tau> + </zeta> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="no"][@xml:id="id1"]/*[starts-with(concat(@desciption,"-"),"attribute value-")][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::psi[@xml:id="id2"][preceding-sibling::*[position() = 1]]//chi[@xml:lang="nb"][not(following-sibling::*)]/beta[contains(@src,"bute")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[@delete][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::tau[@xml:id="id4"][not(following-sibling::*)]//chi[@content="this-is-att-value"][@xml:lang="en-GB"][following-sibling::theta[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/kappa[@content][@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::theta[contains(@attrib,"nt")][@xml:lang="en-GB"][following-sibling::gamma[starts-with(concat(@token,"-"),"_blank-")][@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::omicron[starts-with(@name,"_blan")][not(following-sibling::*)]//pi[@xml:lang="en"]/theta[@xml:lang="no"][not(following-sibling::*)]//iota[@xml:lang="no"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[contains(@and,"als")][@xml:id="id10"][not(child::node())][following-sibling::sigma[contains(@data,"bute valu")][not(following-sibling::*)]//gamma[not(preceding-sibling::*)]//mu[@xml:id="id11"]]][position() = 1]]]][position() = 1]]]]]</xpath> + <tree> + <eta xml:lang="no" xml:id="id1"> + <any desciption="attribute value"/> + <psi xml:id="id2"> + <chi xml:lang="nb"> + <beta src="attribute" xml:id="id3"> + <alpha delete="this.nodeValue" xml:lang="en-US"/> + <tau xml:id="id4"> + <chi content="this-is-att-value" xml:lang="en-GB"/> + <theta xml:id="id5"> + <kappa content="attribute" xml:lang="no" xml:id="id6"/> + <theta attrib="content" xml:lang="en-GB"/> + <gamma token="_blank" xml:lang="no" xml:id="id7"/> + <omicron name="_blank"> + <pi xml:lang="en"> + <theta xml:lang="no"> + <iota xml:lang="no" xml:id="id8"/> + <iota xml:lang="en" xml:id="id9"/> + <nu and="false" xml:id="id10"/> + <sigma data="another attribute value"> + <gamma> + <mu xml:id="id11"> + <green>This text must be green</green> + </mu> + </gamma> + </sigma> + </theta> + </pi> + </omicron> + </theta> + </tau> + </beta> + </chi> + </psi> + </eta> + </tree> + </test> + <test> + <xpath>//zeta//delta[following-sibling::*[position()=9]][not(preceding-sibling::delta)][not(child::node())][following-sibling::psi[@xml:lang="nb"][following-sibling::phi[contains(concat(@att,"$"),"%$")][not(child::node())][following-sibling::omega[@xml:lang="en-US"][@xml:id="id1"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::pi[@xml:lang="no"][following-sibling::tau[starts-with(concat(@and,"-"),"this-")][@xml:id="id2"][preceding-sibling::*[position() = 5]][not(child::node())][following-sibling::beta[starts-with(@number,"this.nodeVa")][@xml:id="id3"][preceding-sibling::*[position() = 6]][following-sibling::beta[starts-with(concat(@object,"-"),"123456789-")][@xml:id="id4"][not(child::node())][following-sibling::iota[contains(concat(@or,"$"),"nk$")][@xml:lang="no"][not(child::node())][following-sibling::kappa[not(following-sibling::*)]/tau[not(following-sibling::*)]/*[@xml:lang="nb"][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id5"]/rho[@xml:id="id6"][not(following-sibling::*)]/phi[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[@xml:lang="no"][@xml:id="id7"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//xi[@xml:id="id8"][following-sibling::zeta[@xml:lang="en-GB"][not(following-sibling::*)]//theta[@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]//eta[starts-with(@desciption,"this.n")]/phi[starts-with(@number,"con")][@xml:lang="no"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::psi[@xml:lang="no-nb"][@xml:id="id11"][preceding-sibling::*[position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <zeta> + <delta/> + <psi xml:lang="nb"/> + <phi att="100%"/> + <omega xml:lang="en-US" xml:id="id1"/> + <pi xml:lang="no"/> + <tau and="this-is-att-value" xml:id="id2"/> + <beta number="this.nodeValue" xml:id="id3"/> + <beta object="123456789" xml:id="id4"/> + <iota or="_blank" xml:lang="no"/> + <kappa> + <tau> + <any xml:lang="nb"/> + <delta xml:lang="en-GB" xml:id="id5"> + <rho xml:id="id6"> + <phi xml:lang="en"/> + <chi/> + <gamma xml:lang="no" xml:id="id7"> + <xi xml:id="id8"/> + <zeta xml:lang="en-GB"> + <theta xml:id="id9"> + <eta desciption="this.nodeValue"> + <phi number="content" xml:lang="no" xml:id="id10"/> + <psi xml:lang="no-nb" xml:id="id11"> + <green>This text must be green</green> + </psi> + </eta> + </theta> + </zeta> + </gamma> + </rho> + </delta> + </tau> + </kappa> + </zeta> + </tree> + </test> + <test> + <xpath>//delta[contains(concat(@or,"$"),"e$")]//phi[@xml:lang="en-GB"][not(child::node())][following-sibling::sigma[starts-with(@token,"10")]/*[starts-with(@src,"true")][@xml:lang="en-US"][following-sibling::*[position()=3]][following-sibling::alpha[@xml:lang="en"][@xml:id="id1"][following-sibling::tau[@string][@xml:id="id2"][not(child::node())][following-sibling::lambda[preceding-sibling::*[position() = 3]][not(following-sibling::*)]]]]]</xpath> + <tree> + <delta or="attribute value"> + <phi xml:lang="en-GB"/> + <sigma token="100%"> + <any src="true" xml:lang="en-US"/> + <alpha xml:lang="en" xml:id="id1"/> + <tau string="attribute" xml:id="id2"/> + <lambda> + <green>This text must be green</green> + </lambda> + </sigma> + </delta> + </tree> + </test> + <test> + <xpath>//gamma[starts-with(@false,"_blank")][@xml:lang="en"]//omicron[@xml:lang="no"][@xml:id="id1"][not(following-sibling::*)][not(preceding-sibling::omicron)]/omega[not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::nu[@object]//omicron[@xml:lang="en-US"][not(child::node())][following-sibling::zeta[@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::sigma[@attribute][@xml:lang="en-GB"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::xi[preceding-sibling::*[position() = 4]][not(following-sibling::*)]//theta[starts-with(concat(@object,"-"),"this-")][@xml:id="id5"]/pi[@attrib][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[starts-with(concat(@desciption,"-"),"false-")][@xml:lang="no"][@xml:id="id6"][preceding-sibling::*[position() = 1]]//*[@xml:id="id7"][not(preceding-sibling::*)][not(preceding-sibling::any)][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id8"][not(following-sibling::*)]/chi[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::iota[@xml:lang="en-US"][preceding-sibling::*[position() = 1]]//rho[not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]][position() = 1]]]]][position() = 1]]]]</xpath> + <tree> + <gamma false="_blank" xml:lang="en"> + <omicron xml:lang="no" xml:id="id1"> + <omega/> + <omicron xml:id="id2"/> + <nu object="true"> + <omicron xml:lang="en-US"/> + <zeta xml:lang="en-US" xml:id="id3"/> + <iota xml:id="id4"/> + <sigma attribute="solid 1px green" xml:lang="en-GB"/> + <xi> + <theta object="this-is-att-value" xml:id="id5"> + <pi attrib="solid 1px green"/> + <rho desciption="false" xml:lang="no" xml:id="id6"> + <any xml:id="id7"/> + <chi xml:lang="no" xml:id="id8"> + <chi xml:lang="en-GB"/> + <iota xml:lang="en-US"> + <rho> + <green>This text must be green</green> + </rho> + </iota> + </chi> + </rho> + </theta> + </xi> + </nu> + </omicron> + </gamma> + </tree> + </test> + <test> + <xpath>//tau[@xml:id="id1"]/kappa[@xml:lang="no"]//psi[@xml:lang="no-nb"][@xml:id="id2"][not(child::node())][following-sibling::sigma[@desciption="_blank"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/theta[@xml:id="id3"][not(preceding-sibling::*)]//omicron[@object][not(preceding-sibling::*)]]</xpath> + <tree> + <tau xml:id="id1"> + <kappa xml:lang="no"> + <psi xml:lang="no-nb" xml:id="id2"/> + <sigma desciption="_blank"> + <theta xml:id="id3"> + <omicron object="content"> + <green>This text must be green</green> + </omicron> + </theta> + </sigma> + </kappa> + </tau> + </tree> + </test> + <test> + <xpath>//omicron//beta[starts-with(concat(@string,"-"),"123456789-")][@xml:lang="en-GB"][not(preceding-sibling::*)][not(child::node())][following-sibling::epsilon[@or="this.nodeValue"][not(following-sibling::*)]//pi[starts-with(concat(@att,"-"),"_blank-")][@xml:lang="no-nb"]/delta[@delete]/rho[contains(@or,"lue")][@xml:lang="en-GB"]/alpha[not(preceding-sibling::*)]]</xpath> + <tree> + <omicron> + <beta string="123456789" xml:lang="en-GB"/> + <epsilon or="this.nodeValue"> + <pi att="_blank" xml:lang="no-nb"> + <delta delete="solid 1px green"> + <rho or="this-is-att-value" xml:lang="en-GB"> + <alpha> + <green>This text must be green</green> + </alpha> + </rho> + </delta> + </pi> + </epsilon> + </omicron> + </tree> + </test> + <test> + <xpath>//epsilon[contains(concat(@true,"$"),"olid 1px green$")]//upsilon[@attribute][@xml:lang="no"][@xml:id="id1"][following-sibling::*[position()=1]][following-sibling::eta[@xml:id="id2"][preceding-sibling::*[position() = 1]]//omicron[@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//lambda[@att][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::omicron[@and][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[@name][following-sibling::*[@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::pi[@xml:id="id6"][following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[starts-with(concat(@data,"-"),"attribute-")][@xml:lang="no"][preceding-sibling::*[position() = 3]][following-sibling::rho[@number][@xml:lang="nb"][not(child::node())][following-sibling::kappa[contains(concat(@attribute,"$"),"ibute-value$")][@xml:lang="en-GB"]//*[@desciption="attribute-value"][not(child::node())][following-sibling::zeta[@name][@xml:lang="no-nb"][@xml:id="id7"][not(following-sibling::*)]//omega[@xml:id="id8"][not(following-sibling::*)]/phi[not(preceding-sibling::*)]//psi[@xml:id="id9"][not(child::node())][following-sibling::epsilon[contains(concat(@insert,"$"),"nt$")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][position() = 1]][position() = 1]]]]]]]][position() = 1]]]</xpath> + <tree> + <epsilon true="solid 1px green"> + <upsilon attribute="solid 1px green" xml:lang="no" xml:id="id1"/> + <eta xml:id="id2"> + <omicron xml:id="id3"> + <lambda att="false" xml:id="id4"/> + <omicron and="this.nodeValue"> + <sigma name="_blank"/> + <any xml:id="id5"/> + <pi xml:id="id6"/> + <omega data="attribute" xml:lang="no"/> + <rho number="this.nodeValue" xml:lang="nb"/> + <kappa attribute="attribute-value" xml:lang="en-GB"> + <any desciption="attribute-value"/> + <zeta name="this-is-att-value" xml:lang="no-nb" xml:id="id7"> + <omega xml:id="id8"> + <phi> + <psi xml:id="id9"/> + <epsilon insert="content" xml:lang="nb"/> + <sigma xml:lang="en"> + <green>This text must be green</green> + </sigma> + </phi> + </omega> + </zeta> + </kappa> + </omicron> + </omicron> + </eta> + </epsilon> + </tree> + </test> + <test> + <xpath>//eta//psi[following-sibling::upsilon[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@false][@xml:lang="no-nb"][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@xml:id="id1"][not(following-sibling::*)]/theta[not(preceding-sibling::*)][not(child::node())][following-sibling::delta[contains(concat(@name,"$"),"ue$")]][position() = 1]]]]</xpath> + <tree> + <eta> + <psi/> + <upsilon/> + <xi false="another attribute value" xml:lang="no-nb"/> + <lambda xml:id="id1"> + <theta/> + <delta name="true"> + <green>This text must be green</green> + </delta> + </lambda> + </eta> + </tree> + </test> + <test> + <xpath>//chi[@object][@xml:lang="no"]//nu[@xml:lang="en-US"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=6]][not(child::node())][following-sibling::iota[starts-with(@data,"sol")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][following-sibling::xi[@attribute][following-sibling::mu[@xml:lang="en"][@xml:id="id2"][following-sibling::upsilon[@xml:lang="nb"][not(child::node())][following-sibling::mu[starts-with(@token,"attribute")][@xml:lang="en-US"][@xml:id="id3"][not(child::node())][following-sibling::epsilon[contains(concat(@number,"$"),"456789$")][@xml:lang="no"][preceding-sibling::*[position() = 6]]//kappa[starts-with(@desciption,"fal")][@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@token="content"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[@xml:lang="nb"][following-sibling::iota[@xml:id="id6"]/pi[starts-with(concat(@att,"-"),"attribute-")][@xml:lang="no"][not(preceding-sibling::*)][not(following-sibling::*)]/chi[not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:id="id7"][preceding-sibling::*[position() = 1]]//mu[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id8"][following-sibling::mu[@class][@xml:lang="nb"][@xml:id="id9"][not(following-sibling::*)]/phi[@attribute][@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:id="id11"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]][position() = 1]]]]]][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <chi object="attribute value" xml:lang="no"> + <nu xml:lang="en-US" xml:id="id1"/> + <iota data="solid 1px green"/> + <xi attribute="solid 1px green"/> + <mu xml:lang="en" xml:id="id2"/> + <upsilon xml:lang="nb"/> + <mu token="attribute" xml:lang="en-US" xml:id="id3"/> + <epsilon number="123456789" xml:lang="no"> + <kappa desciption="false" xml:lang="no-nb" xml:id="id4"/> + <any token="content" xml:id="id5"> + <sigma xml:lang="nb"/> + <iota xml:id="id6"> + <pi att="attribute" xml:lang="no"> + <chi/> + <delta xml:id="id7"> + <mu xml:lang="en-US"/> + <psi xml:lang="no" xml:id="id8"/> + <mu class="another attribute value" xml:lang="nb" xml:id="id9"> + <phi attribute="true" xml:id="id10"/> + <kappa xml:id="id11"> + <green>This text must be green</green> + </kappa> + </mu> + </delta> + </pi> + </iota> + </any> + </epsilon> + </chi> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="no"]/omega[@xml:lang="no"][@xml:id="id1"]/gamma[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//iota[@xml:id="id2"]/mu[@xml:lang="en"][@xml:id="id3"]/delta[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(concat(@and,"$"),"ttribute$")][@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[@att][@xml:id="id5"][not(child::node())][following-sibling::gamma//omicron[@xml:id="id6"][not(child::node())][following-sibling::delta[@src="attribute value"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][not(child::node())][following-sibling::*[@xml:lang="nb"][@xml:id="id7"][following-sibling::*[position()=2]][following-sibling::iota[@xml:id="id8"][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 4]]//chi[@xml:lang="no-nb"][@xml:id="id9"]/gamma[contains(concat(@name,"$"),"true$")][@xml:lang="en-GB"][@xml:id="id10"][not(preceding-sibling::*)][not(preceding-sibling::gamma)]/phi[@number="123456789"][@xml:lang="nb"][@xml:id="id11"][not(preceding-sibling::*)][following-sibling::*[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[not(preceding-sibling::*)]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau xml:lang="no"> + <omega xml:lang="no" xml:id="id1"> + <gamma xml:lang="en-US"> + <iota xml:id="id2"> + <mu xml:lang="en" xml:id="id3"> + <delta xml:lang="en"/> + <sigma and="attribute" xml:lang="no" xml:id="id4"> + <delta att="content" xml:id="id5"/> + <gamma> + <omicron xml:id="id6"/> + <delta src="attribute value"/> + <any xml:lang="nb" xml:id="id7"/> + <iota xml:id="id8"/> + <beta> + <chi xml:lang="no-nb" xml:id="id9"> + <gamma name="true" xml:lang="en-GB" xml:id="id10"> + <phi number="123456789" xml:lang="nb" xml:id="id11"/> + <any xml:lang="en-US"> + <phi> + <green>This text must be green</green> + </phi> + </any> + </gamma> + </chi> + </beta> + </gamma> + </sigma> + </mu> + </iota> + </gamma> + </omega> + </tau> + </tree> + </test> + <test> + <xpath>//pi[contains(@desciption,"%")][@xml:lang="nb"]/lambda[@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[@insert][@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]/beta[contains(concat(@attribute,"$"),"tribute$")][@xml:lang="en-GB"]/mu[@desciption][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::zeta[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::tau[@number][@xml:id="id4"]/kappa[not(preceding-sibling::*)][following-sibling::nu[contains(@data,"is.nodeValue")][@xml:lang="en"][@xml:id="id5"]/mu[not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@attr="content"][@xml:id="id6"][not(following-sibling::*)]//delta[not(following-sibling::*)]][position() = 1]]]]</xpath> + <tree> + <pi desciption="100%" xml:lang="nb"> + <lambda xml:id="id1"> + <alpha insert="solid 1px green" xml:lang="en-US" xml:id="id2"> + <beta attribute="attribute" xml:lang="en-GB"> + <mu desciption="attribute" xml:lang="nb"/> + <zeta xml:id="id3"/> + <tau number="this.nodeValue" xml:id="id4"> + <kappa/> + <nu data="this.nodeValue" xml:lang="en" xml:id="id5"> + <mu/> + <phi attr="content" xml:id="id6"> + <delta> + <green>This text must be green</green> + </delta> + </phi> + </nu> + </tau> + </beta> + </alpha> + </lambda> + </pi> + </tree> + </test> + <test> + <xpath>//pi//lambda[@xml:id="id1"]//epsilon[@xml:id="id2"][following-sibling::alpha[contains(concat(@name,"$"),"rue$")][@xml:lang="en"][@xml:id="id3"][not(following-sibling::*)]/phi[contains(concat(@insert,"$"),"e$")][@xml:id="id4"][not(preceding-sibling::*)]/chi[@xml:lang="no-nb"][not(preceding-sibling::*)][position() = 1]]</xpath> + <tree> + <pi> + <lambda xml:id="id1"> + <epsilon xml:id="id2"/> + <alpha name="true" xml:lang="en" xml:id="id3"> + <phi insert="attribute-value" xml:id="id4"> + <chi xml:lang="no-nb"> + <green>This text must be green</green> + </chi> + </phi> + </alpha> + </lambda> + </pi> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="en-GB"][@xml:id="id1"]//eta[contains(@object,"id 1px")][@xml:lang="en-US"][@xml:id="id2"][not(following-sibling::*)]//omega[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::kappa[@false="this.nodeValue"][@xml:lang="en-US"][following-sibling::mu[@attribute][preceding-sibling::*[position() = 2]]/gamma[@class][@xml:lang="en-GB"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::sigma[contains(@class,"-is-att-v")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//pi[contains(concat(@data,"$"),"ank$")][not(preceding-sibling::*)]//omega[starts-with(concat(@false,"-"),"this-")][@xml:id="id5"]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma xml:lang="en-GB" xml:id="id1"> + <eta object="solid 1px green" xml:lang="en-US" xml:id="id2"> + <omega xml:id="id3"/> + <kappa false="this.nodeValue" xml:lang="en-US"/> + <mu attribute="attribute-value"> + <gamma class="false" xml:lang="en-GB" xml:id="id4"/> + <sigma class="this-is-att-value" xml:lang="no-nb"> + <pi data="_blank"> + <omega false="this-is-att-value" xml:id="id5"> + <green>This text must be green</green> + </omega> + </pi> + </sigma> + </mu> + </eta> + </sigma> + </tree> + </test> + <test> + <xpath>//pi[@xml:id="id1"]/tau[@xml:lang="nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::psi[preceding-sibling::*[position() = 2]]/pi[@xml:lang="no"][not(child::node())][following-sibling::omega[contains(concat(@string,"$"),"ttribute$")][@xml:lang="en-GB"][following-sibling::mu[@xml:lang="en"][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::tau[contains(@insert,"lank")][@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]/xi[@number="123456789"][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/epsilon[@xml:lang="no"][not(child::node())][following-sibling::beta[starts-with(concat(@number,"-"),"_blank-")][@xml:id="id6"][preceding-sibling::*[position() = 1]][following-sibling::beta[starts-with(@src,"1234")][@xml:lang="en-US"][@xml:id="id7"][preceding-sibling::*[position() = 2]]/xi[@xml:lang="no-nb"][not(following-sibling::*)]/epsilon[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:id="id9"][following-sibling::lambda[contains(@attribute,"alue")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <pi xml:id="id1"> + <tau xml:lang="nb" xml:id="id2"/> + <upsilon xml:lang="en-GB" xml:id="id3"/> + <psi> + <pi xml:lang="no"/> + <omega string="attribute" xml:lang="en-GB"/> + <mu xml:lang="en" xml:id="id4"/> + <tau insert="_blank" xml:lang="en-GB" xml:id="id5"> + <xi number="123456789" xml:lang="no-nb"> + <epsilon xml:lang="no"/> + <beta number="_blank" xml:id="id6"/> + <beta src="123456789" xml:lang="en-US" xml:id="id7"> + <xi xml:lang="no-nb"> + <epsilon xml:lang="en-GB" xml:id="id8"> + <beta xml:id="id9"/> + <lambda attribute="attribute-value"> + <green>This text must be green</green> + </lambda> + </epsilon> + </xi> + </beta> + </xi> + </tau> + </psi> + </pi> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="en-US"]/nu[contains(@number,"se")][@xml:lang="en-US"][not(child::node())][following-sibling::chi[@false][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//omega[contains(concat(@and,"$"),"123456789$")][@xml:lang="en-GB"]/theta[not(preceding-sibling::*)][not(following-sibling::*)]/*[@content][@xml:id="id2"][not(following-sibling::*)]//phi[contains(concat(@false,"$"),"ttribute-value$")][@xml:lang="en-US"][not(child::node())][following-sibling::omega[starts-with(concat(@attribute,"-"),"solid 1px green-")][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::theta[@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/beta[@content][@xml:lang="no"]/beta[following-sibling::theta[@object="content"][@xml:lang="en-GB"][@xml:id="id4"]/rho[starts-with(@title,"100")][@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="en-US"> + <nu number="false" xml:lang="en-US"/> + <chi false="this-is-att-value" xml:id="id1"> + <omega and="123456789" xml:lang="en-GB"> + <theta> + <any content="100%" xml:id="id2"> + <phi false="attribute-value" xml:lang="en-US"/> + <omega attribute="solid 1px green" xml:id="id3"/> + <theta xml:lang="no"> + <beta content="attribute value" xml:lang="no"> + <beta/> + <theta object="content" xml:lang="en-GB" xml:id="id4"> + <rho title="100%" xml:lang="no" xml:id="id5"> + <green>This text must be green</green> + </rho> + </theta> + </beta> + </theta> + </any> + </theta> + </omega> + </chi> + </epsilon> + </tree> + </test> + <test> + <xpath>//*//tau[@content][@xml:lang="en"][following-sibling::nu[@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::eta[@xml:id="id2"][following-sibling::psi[@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::phi[@xml:lang="nb"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//mu[@xml:id="id3"][not(following-sibling::*)]//delta[not(preceding-sibling::*)][following-sibling::kappa[starts-with(concat(@number,"-"),"100%-")][@xml:lang="en-US"][following-sibling::delta[starts-with(@abort,"this-")][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[@xml:lang="en-US"][@xml:id="id5"][not(preceding-sibling::*)]//nu[starts-with(@src,"at")][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <any> + <tau content="this-is-att-value" xml:lang="en"/> + <nu xml:id="id1"/> + <eta xml:id="id2"/> + <psi xml:lang="en-US"/> + <phi xml:lang="nb"> + <mu xml:id="id3"> + <delta/> + <kappa number="100%" xml:lang="en-US"/> + <delta abort="this-is-att-value" xml:id="id4"> + <nu xml:lang="en-US" xml:id="id5"> + <nu src="attribute"> + <green>This text must be green</green> + </nu> + </nu> + </delta> + </mu> + </phi> + </any> + </tree> + </test> + <test> + <xpath>//delta[@title]/tau[@xml:lang="nb"][@xml:id="id1"][not(child::node())][following-sibling::omicron[@xml:lang="en-US"][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/lambda[@object="attribute-value"][not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:lang="en-US"][@xml:id="id3"][following-sibling::xi[contains(@false,"a")][@xml:lang="en-US"][preceding-sibling::*[position() = 2]][following-sibling::epsilon[@number][@xml:lang="en-US"][@xml:id="id4"][not(child::node())][following-sibling::nu[@src="attribute value"][@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)]//xi[@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::upsilon[starts-with(@src,"this.no")][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <delta title="_blank"> + <tau xml:lang="nb" xml:id="id1"/> + <omicron xml:lang="en-US"/> + <tau xml:id="id2"> + <lambda object="attribute-value"/> + <iota xml:lang="en-US" xml:id="id3"/> + <xi false="false" xml:lang="en-US"/> + <epsilon number="attribute" xml:lang="en-US" xml:id="id4"/> + <nu src="attribute value" xml:lang="en-US" xml:id="id5"> + <xi xml:id="id6"/> + <upsilon src="this.nodeValue" xml:id="id7"> + <chi xml:lang="en-GB" xml:id="id8"> + <green>This text must be green</green> + </chi> + </upsilon> + </nu> + </tau> + </delta> + </tree> + </test> + <test> + <xpath>//xi[@false]//rho[@xml:id="id1"][not(preceding-sibling::*)]//delta[@xml:id="id2"]/psi[@xml:lang="no-nb"][not(following-sibling::*)]/theta[@xml:id="id3"][not(preceding-sibling::*)]/sigma[@xml:lang="en-US"]/phi[@content="another attribute value"][@xml:lang="en-GB"][not(child::node())][following-sibling::chi[@desciption][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/iota[contains(concat(@attrib,"$"),"ute$")][@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)]/sigma[@xml:id="id6"]]</xpath> + <tree> + <xi false="attribute-value"> + <rho xml:id="id1"> + <delta xml:id="id2"> + <psi xml:lang="no-nb"> + <theta xml:id="id3"> + <sigma xml:lang="en-US"> + <phi content="another attribute value" xml:lang="en-GB"/> + <chi desciption="false" xml:id="id4"> + <iota attrib="attribute" xml:lang="en-US" xml:id="id5"> + <sigma xml:id="id6"> + <green>This text must be green</green> + </sigma> + </iota> + </chi> + </sigma> + </theta> + </psi> + </delta> + </rho> + </xi> + </tree> + </test> + <test> + <xpath>//sigma/epsilon[@attr][@xml:id="id1"]/xi[@xml:id="id2"][not(preceding-sibling::*)]//sigma[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[@xml:id="id3"][not(preceding-sibling::*)][following-sibling::*[position()=4]][following-sibling::xi[@title][@xml:id="id4"][preceding-sibling::*[position() = 1]][not(preceding-sibling::xi)][not(child::node())][following-sibling::pi[@xml:id="id5"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::omicron[@attr][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=1]][following-sibling::*[preceding-sibling::*[position() = 4]]//theta[not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::chi[@xml:id="id8"][following-sibling::*[position()=2]][following-sibling::theta[@xml:lang="en-US"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::upsilon[contains(@true,"_b")][@xml:lang="en"][@xml:id="id9"][preceding-sibling::*[position() = 3]]/epsilon[@xml:id="id10"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[contains(@or," gree")][@xml:id="id11"][following-sibling::alpha[@token][@xml:id="id12"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::psi[@desciption="123456789"][@xml:lang="no"][preceding-sibling::*[position() = 3]]/gamma[@title][not(child::node())][following-sibling::omega[@xml:id="id13"][preceding-sibling::*[position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <sigma> + <epsilon attr="this-is-att-value" xml:id="id1"> + <xi xml:id="id2"> + <sigma xml:lang="en-US"> + <beta xml:id="id3"/> + <xi title="this-is-att-value" xml:id="id4"/> + <pi xml:id="id5"/> + <omicron attr="this.nodeValue" xml:id="id6"/> + <any> + <theta> + <epsilon xml:id="id7"/> + <chi xml:id="id8"/> + <theta xml:lang="en-US"/> + <upsilon true="_blank" xml:lang="en" xml:id="id9"> + <epsilon xml:id="id10"/> + <omicron or="solid 1px green" xml:id="id11"/> + <alpha token="another attribute value" xml:id="id12"/> + <psi desciption="123456789" xml:lang="no"> + <gamma title="attribute value"/> + <omega xml:id="id13"> + <green>This text must be green</green> + </omega> + </psi> + </upsilon> + </theta> + </any> + </sigma> + </xi> + </epsilon> + </sigma> + </tree> + </test> + <test> + <xpath>//kappa[@string][@xml:lang="nb"][@xml:id="id1"]//lambda[starts-with(@attribute,"fal")][@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]/nu[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::theta[starts-with(@attribute,"con")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="en-GB"]/lambda[@xml:id="id4"][not(following-sibling::*)]/omega[starts-with(@token,"tru")][@xml:id="id5"]//tau[@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@xml:id="id6"]/mu[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 1]]//gamma[starts-with(@data,"thi")][not(preceding-sibling::*)]//theta[starts-with(concat(@desciption,"-"),"true-")][@xml:lang="en"][following-sibling::lambda[not(following-sibling::*)]//phi[@xml:lang="nb"][@xml:id="id8"][not(child::node())][following-sibling::*[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[starts-with(concat(@content,"-"),"this.nodeValue-")][@xml:id="id9"]/epsilon[position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <kappa string="solid 1px green" xml:lang="nb" xml:id="id1"> + <lambda attribute="false" xml:lang="en-GB" xml:id="id2"> + <nu xml:lang="no-nb" xml:id="id3"/> + <theta attribute="content"/> + <xi xml:lang="en-GB"> + <lambda xml:id="id4"> + <omega token="true" xml:id="id5"> + <tau xml:lang="no-nb"> + <psi xml:id="id6"> + <mu xml:lang="nb"/> + <delta xml:lang="nb" xml:id="id7"> + <gamma data="this-is-att-value"> + <theta desciption="true" xml:lang="en"/> + <lambda> + <phi xml:lang="nb" xml:id="id8"/> + <any/> + <tau content="this.nodeValue" xml:id="id9"> + <epsilon> + <green>This text must be green</green> + </epsilon> + </tau> + </lambda> + </gamma> + </delta> + </psi> + </tau> + </omega> + </lambda> + </xi> + </lambda> + </kappa> + </tree> + </test> + <test> + <xpath>//psi[@name][@xml:lang="no-nb"]/epsilon[@abort="attribute-value"][@xml:id="id1"]//pi[contains(concat(@attr,"$"),"k$")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[contains(concat(@token,"$"),"content$")][@xml:lang="no"][not(preceding-sibling::eta)][following-sibling::pi[starts-with(@string,"another attribute va")][@xml:id="id3"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][following-sibling::upsilon[starts-with(@attribute,"at")][@xml:id="id4"][following-sibling::pi[contains(concat(@string,"$")," attribute value$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 4]][following-sibling::alpha[@xml:id="id5"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <psi name="100%" xml:lang="no-nb"> + <epsilon abort="attribute-value" xml:id="id1"> + <pi attr="_blank" xml:lang="en" xml:id="id2"/> + <eta token="content" xml:lang="no"/> + <pi string="another attribute value" xml:id="id3"/> + <upsilon attribute="attribute-value" xml:id="id4"/> + <pi string="another attribute value" xml:lang="no-nb"/> + <alpha xml:id="id5"> + <green>This text must be green</green> + </alpha> + </epsilon> + </psi> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="no-nb"][@xml:id="id1"]//*[contains(@and,"%")][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@content="false"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/kappa[starts-with(@delete,"fa")][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@xml:lang="no"][@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=4]][following-sibling::sigma[@xml:id="id5"][following-sibling::*[position()=3]][not(child::node())][following-sibling::tau[@xml:lang="nb"][preceding-sibling::*[position() = 3]][following-sibling::*[position()=2]][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::rho[@xml:lang="en-GB"][not(following-sibling::*)][position() = 1]]][position() = 1]]]][position() = 1]]</xpath> + <tree> + <delta xml:lang="no-nb" xml:id="id1"> + <any and="100%"/> + <alpha content="false" xml:id="id2"> + <kappa delete="false" xml:id="id3"/> + <psi xml:lang="no" xml:id="id4"/> + <sigma xml:id="id5"/> + <tau xml:lang="nb"/> + <rho xml:lang="en-GB"/> + <rho xml:lang="en-GB"> + <green>This text must be green</green> + </rho> + </alpha> + </delta> + </tree> + </test> + <test> + <xpath>//*[contains(@attr,"blank")]//sigma[contains(@abort,"t")][not(preceding-sibling::*)]/pi[@xml:lang="en-GB"]//phi[@string][@xml:id="id1"][following-sibling::*[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[starts-with(concat(@token,"-"),"another attribute value-")][@xml:id="id3"][not(preceding-sibling::*)][not(preceding-sibling::kappa or following-sibling::kappa)]/mu[not(preceding-sibling::*)][following-sibling::psi[@string][preceding-sibling::*[position() = 1]][following-sibling::alpha[@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::delta[starts-with(concat(@number,"-"),"123456789-")][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/sigma[contains(@false,"alue")][@xml:lang="nb"]][position() = 1]]][position() = 1]]</xpath> + <tree> + <any attr="_blank"> + <sigma abort="content"> + <pi xml:lang="en-GB"> + <phi string="attribute value" xml:id="id1"/> + <any xml:lang="no" xml:id="id2"> + <kappa token="another attribute value" xml:id="id3"> + <mu/> + <psi string="_blank"/> + <alpha xml:lang="nb" xml:id="id4"/> + <delta number="123456789"> + <sigma false="this-is-att-value" xml:lang="nb"> + <green>This text must be green</green> + </sigma> + </delta> + </kappa> + </any> + </pi> + </sigma> + </any> + </tree> + </test> + <test> + <xpath>//eta[@desciption][@xml:id="id1"]//theta[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[starts-with(concat(@string,"-"),"100%-")][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]/omicron[starts-with(@true,"conten")][@xml:id="id3"][not(preceding-sibling::*)][following-sibling::lambda[@xml:lang="en"]//mu[not(preceding-sibling::*)]//*[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//nu[starts-with(concat(@and,"-"),"solid 1px green-")][not(preceding-sibling::*)]//psi[@xml:lang="en-US"][@xml:id="id4"]]</xpath> + <tree> + <eta desciption="false" xml:id="id1"> + <theta xml:lang="en-US"> + <xi string="100%" xml:lang="en-US" xml:id="id2"> + <omicron true="content" xml:id="id3"/> + <lambda xml:lang="en"> + <mu> + <any xml:lang="en-GB"> + <nu and="solid 1px green"> + <psi xml:lang="en-US" xml:id="id4"> + <green>This text must be green</green> + </psi> + </nu> + </any> + </mu> + </lambda> + </xi> + </theta> + </eta> + </tree> + </test> + <test> + <xpath>//pi[@xml:lang="en-GB"]/tau[@attribute][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[contains(concat(@desciption,"$"),"attribute value$")][@xml:lang="no"]//pi[starts-with(@class,"true")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]/sigma[contains(concat(@att,"$")," 1px green$")][not(preceding-sibling::*)][not(following-sibling::*)]//sigma[starts-with(concat(@string,"-"),"false-")]//phi[contains(@desciption,"100%")][@xml:lang="en-GB"][not(following-sibling::*)]//zeta[@xml:id="id3"][not(following-sibling::*)]/pi[@class="another attribute value"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[starts-with(concat(@attribute,"-"),"attribute value-")][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:lang="en-US"][@xml:id="id5"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::lambda[@false="attribute"][@xml:lang="en"][@xml:id="id6"][preceding-sibling::*[position() = 3]]//alpha[@title][@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]][position() = 1]]</xpath> + <tree> + <pi xml:lang="en-GB"> + <tau attribute="attribute" xml:id="id1"/> + <epsilon desciption="attribute value" xml:lang="no"> + <pi class="true" xml:lang="en" xml:id="id2"> + <sigma att="solid 1px green"> + <sigma string="false"> + <phi desciption="100%" xml:lang="en-GB"> + <zeta xml:id="id3"> + <pi class="another attribute value" xml:id="id4"/> + <pi attribute="attribute value" xml:lang="en-GB"/> + <theta xml:lang="en-US" xml:id="id5"/> + <lambda false="attribute" xml:lang="en" xml:id="id6"> + <alpha title="this.nodeValue" xml:lang="nb"> + <green>This text must be green</green> + </alpha> + </lambda> + </zeta> + </phi> + </sigma> + </sigma> + </pi> + </epsilon> + </pi> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="no"][@xml:id="id1"]//chi[@xml:id="id2"][not(preceding-sibling::*)]//lambda[@xml:id="id3"][not(child::node())][following-sibling::beta[preceding-sibling::*[position() = 1]]//psi[contains(@true,"0%")][@xml:lang="no"][@xml:id="id4"]/nu[@attrib][@xml:lang="no"][following-sibling::*[position()=2]][following-sibling::omega[contains(concat(@abort,"$"),"-is-att-value$")][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::iota[@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]//psi[contains(concat(@desciption,"$"),"ue$")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::iota[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::xi[@attr][@xml:id="id8"][following-sibling::*[position()=5]][following-sibling::chi[contains(concat(@att,"$"),"nk$")][following-sibling::*[position()=4]][not(child::node())][following-sibling::chi[@xml:lang="en-GB"][@xml:id="id9"][not(child::node())][following-sibling::kappa[@desciption="solid 1px green"][@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 5]][following-sibling::eta[contains(concat(@desciption,"$"),"te$")][following-sibling::eta[@xml:lang="nb"][not(following-sibling::*)]/eta[@true="123456789"][@xml:lang="nb"][not(preceding-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <nu xml:lang="no" xml:id="id1"> + <chi xml:id="id2"> + <lambda xml:id="id3"/> + <beta> + <psi true="100%" xml:lang="no" xml:id="id4"> + <nu attrib="123456789" xml:lang="no"/> + <omega abort="this-is-att-value"/> + <iota xml:lang="nb" xml:id="id5"> + <psi desciption="this-is-att-value" xml:lang="en-US" xml:id="id6"/> + <iota xml:id="id7"/> + <xi attr="false" xml:id="id8"/> + <chi att="_blank"/> + <chi xml:lang="en-GB" xml:id="id9"/> + <kappa desciption="solid 1px green" xml:lang="no" xml:id="id10"/> + <eta desciption="attribute"/> + <eta xml:lang="nb"> + <eta true="123456789" xml:lang="nb"> + <green>This text must be green</green> + </eta> + </eta> + </iota> + </psi> + </beta> + </chi> + </nu> + </tree> + </test> + <test> + <xpath>//theta[@att="false"][@xml:id="id1"]//epsilon[contains(concat(@false,"$"),"bute value$")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[starts-with(@or,"con")][@xml:lang="en-GB"][@xml:id="id3"][not(child::node())][following-sibling::mu[starts-with(concat(@att,"-"),"attribute-")][@xml:lang="no-nb"][@xml:id="id4"]/theta[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::omicron[following-sibling::tau[starts-with(@attrib,"attri")][@xml:lang="nb"][preceding-sibling::*[position() = 2]]//rho[@xml:lang="en-GB"][@xml:id="id6"][not(child::node())][following-sibling::tau[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/lambda[@xml:id="id8"]/rho[starts-with(@desciption,"attrib")][@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::upsilon[@xml:lang="no"][preceding-sibling::*[position() = 1]]//delta[@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::upsilon[contains(concat(@attrib,"$"),"56789$")][@xml:id="id10"]/alpha[starts-with(@attrib,"th")][@xml:lang="no"][not(preceding-sibling::*)][not(preceding-sibling::alpha)][following-sibling::gamma[contains(@delete,"4567")]/upsilon[@xml:lang="no-nb"][@xml:id="id11"][not(following-sibling::*)]//epsilon[@attr][@xml:lang="en-GB"][not(following-sibling::*)]/sigma[@xml:id="id12"]/epsilon[@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@xml:id="id13"][following-sibling::omega[preceding-sibling::*[position() = 2]]/phi[@desciption][@xml:id="id14"][not(preceding-sibling::*)][not(following-sibling::*)]/pi[@content="false"][@xml:lang="en-US"][@xml:id="id15"][not(preceding-sibling::*)]]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <theta att="false" xml:id="id1"> + <epsilon false="attribute value" xml:id="id2"> + <beta or="content" xml:lang="en-GB" xml:id="id3"/> + <mu att="attribute-value" xml:lang="no-nb" xml:id="id4"> + <theta xml:lang="en" xml:id="id5"/> + <omicron/> + <tau attrib="attribute" xml:lang="nb"> + <rho xml:lang="en-GB" xml:id="id6"/> + <tau xml:id="id7"> + <lambda xml:id="id8"> + <rho desciption="attribute" xml:lang="no"/> + <upsilon xml:lang="no"> + <delta xml:id="id9"/> + <upsilon attrib="123456789" xml:id="id10"> + <alpha attrib="this-is-att-value" xml:lang="no"/> + <gamma delete="123456789"> + <upsilon xml:lang="no-nb" xml:id="id11"> + <epsilon attr="100%" xml:lang="en-GB"> + <sigma xml:id="id12"> + <epsilon xml:lang="en"/> + <omega xml:id="id13"/> + <omega> + <phi desciption="false" xml:id="id14"> + <pi content="false" xml:lang="en-US" xml:id="id15"> + <green>This text must be green</green> + </pi> + </phi> + </omega> + </sigma> + </epsilon> + </upsilon> + </gamma> + </upsilon> + </upsilon> + </lambda> + </tau> + </tau> + </mu> + </epsilon> + </theta> + </tree> + </test> + <test> + <xpath>//kappa[contains(@number,"e")][@xml:id="id1"]/upsilon[contains(concat(@title,"$"),"ue$")][@xml:lang="en"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:id="id2"]/nu[@delete="123456789"][@xml:lang="en-US"][@xml:id="id3"][following-sibling::*[position()=1]][not(child::node())][following-sibling::beta[@desciption][@xml:id="id4"]//alpha[@desciption][@xml:lang="en"][not(parent::*/*[position()=2])]//omicron[contains(concat(@name,"$"),"tent$")][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@xml:lang="nb"][@xml:id="id6"][not(preceding-sibling::*)][not(following-sibling::*)]/xi[@attr][@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::pi/upsilon[starts-with(@object,"_b")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::kappa[@abort][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[starts-with(concat(@class,"-"),"content-")][@xml:lang="en-US"][not(preceding-sibling::*)]//rho[@abort][not(following-sibling::*)]//kappa[@false][@xml:lang="en-GB"]/upsilon[@xml:id="id7"][not(following-sibling::*)]//eta[@attribute="this.nodeValue"]/theta[@xml:lang="en-GB"][@xml:id="id8"][not(child::node())][following-sibling::nu[preceding-sibling::*[position() = 1]]//xi[@string][@xml:lang="en-GB"][@xml:id="id9"]/eta[starts-with(@object,"1")][not(following-sibling::*)][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <kappa number="true" xml:id="id1"> + <upsilon title="true" xml:lang="en"/> + <sigma xml:id="id2"> + <nu delete="123456789" xml:lang="en-US" xml:id="id3"/> + <beta desciption="this.nodeValue" xml:id="id4"> + <alpha desciption="this.nodeValue" xml:lang="en"> + <omicron name="content" xml:id="id5"> + <upsilon xml:lang="nb" xml:id="id6"> + <xi attr="attribute value" xml:lang="no"/> + <pi> + <upsilon object="_blank" xml:lang="nb"/> + <kappa abort="false"> + <phi class="content" xml:lang="en-US"> + <rho abort="content"> + <kappa false="attribute" xml:lang="en-GB"> + <upsilon xml:id="id7"> + <eta attribute="this.nodeValue"> + <theta xml:lang="en-GB" xml:id="id8"/> + <nu> + <xi string="false" xml:lang="en-GB" xml:id="id9"> + <eta object="123456789"> + <green>This text must be green</green> + </eta> + </xi> + </nu> + </eta> + </upsilon> + </kappa> + </rho> + </phi> + </kappa> + </pi> + </upsilon> + </omicron> + </alpha> + </beta> + </sigma> + </kappa> + </tree> + </test> + <test> + <xpath>//zeta[@false]/mu[contains(@abort,"56789")][@xml:lang="en-US"][not(child::node())][following-sibling::mu[not(following-sibling::*)]//epsilon[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[contains(concat(@string,"$"),"ue$")][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[@attr="_blank"][not(preceding-sibling::*)]//phi[not(child::node())][following-sibling::theta[@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::chi[@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]]/sigma[@xml:lang="nb"][not(child::node())][following-sibling::alpha[@desciption][@xml:id="id5"][preceding-sibling::*[position() = 1]]//xi[contains(concat(@desciption,"$"),"blank$")][@xml:id="id6"][following-sibling::chi[contains(@object,"er")][@xml:lang="en"][@xml:id="id7"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//*[@content][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[contains(@title,"a")][@xml:id="id9"][not(preceding-sibling::*)][not(preceding-sibling::pi)]//nu[@xml:lang="en-GB"][not(preceding-sibling::*)]//xi[@xml:lang="no"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::*[position()=2]][not(child::node())][following-sibling::kappa[@xml:id="id11"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::chi/alpha[@number][@xml:lang="en"][@xml:id="id12"][not(following-sibling::*)]//tau[not(preceding-sibling::*)][not(following-sibling::*)]/theta[@attr="_blank"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <zeta false="content"> + <mu abort="123456789" xml:lang="en-US"/> + <mu> + <epsilon xml:id="id1"/> + <tau string="true" xml:id="id2"> + <eta attr="_blank"> + <phi/> + <theta xml:lang="en" xml:id="id3"/> + <chi xml:lang="no-nb" xml:id="id4"> + <sigma xml:lang="nb"/> + <alpha desciption="this-is-att-value" xml:id="id5"> + <xi desciption="_blank" xml:id="id6"/> + <chi object="another attribute value" xml:lang="en" xml:id="id7"> + <any content="100%" xml:id="id8"> + <pi title="attribute" xml:id="id9"> + <nu xml:lang="en-GB"> + <xi xml:lang="no" xml:id="id10"/> + <kappa xml:id="id11"/> + <chi> + <alpha number="solid 1px green" xml:lang="en" xml:id="id12"> + <tau> + <theta attr="_blank"> + <green>This text must be green</green> + </theta> + </tau> + </alpha> + </chi> + </nu> + </pi> + </any> + </chi> + </alpha> + </chi> + </eta> + </tau> + </mu> + </zeta> + </tree> + </test> + <test> + <xpath>//lambda/chi[@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]//delta[not(preceding-sibling::delta or following-sibling::delta)][not(child::node())][following-sibling::omicron[contains(@data,"e")][@xml:lang="en-US"]/gamma/tau[@xml:lang="nb"][@xml:id="id2"]//eta[@number="this-is-att-value"][@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]/zeta[following-sibling::*[position()=2]][not(child::node())][following-sibling::theta[@xml:id="id4"][preceding-sibling::*[position() = 1]][following-sibling::delta[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]][position() = 1]]]</xpath> + <tree> + <lambda> + <chi xml:lang="en-US" xml:id="id1"> + <delta/> + <omicron data="attribute-value" xml:lang="en-US"> + <gamma> + <tau xml:lang="nb" xml:id="id2"> + <eta number="this-is-att-value" xml:lang="nb" xml:id="id3"> + <zeta/> + <theta xml:id="id4"/> + <delta xml:lang="no-nb"> + <green>This text must be green</green> + </delta> + </eta> + </tau> + </gamma> + </omicron> + </chi> + </lambda> + </tree> + </test> + <test> + <xpath>//rho[@xml:id="id1"]/xi[contains(@object,"4")][@xml:lang="no-nb"][not(following-sibling::*)]//chi[@xml:id="id2"]/omega[@xml:lang="nb"][not(following-sibling::*)]//omega[not(child::node())][following-sibling::omicron[contains(concat(@title,"$"),"e$")][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//rho[contains(concat(@string,"$"),"ibute$")][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/iota[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)]/zeta[@xml:lang="no"][@xml:id="id5"]//kappa[@or="true"][@xml:lang="en-US"][not(preceding-sibling::*)]/*[starts-with(concat(@token,"-"),"another attribute value-")][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::gamma[@att="content"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[@xml:id="id6"][not(preceding-sibling::*)][position() = 1]]]</xpath> + <tree> + <rho xml:id="id1"> + <xi object="123456789" xml:lang="no-nb"> + <chi xml:id="id2"> + <omega xml:lang="nb"> + <omega/> + <omicron title="true"> + <rho string="attribute" xml:id="id3"> + <iota xml:lang="en-US" xml:id="id4"> + <zeta xml:lang="no" xml:id="id5"> + <kappa or="true" xml:lang="en-US"> + <any token="another attribute value" xml:lang="en-GB"/> + <gamma att="content"> + <beta xml:id="id6"> + <green>This text must be green</green> + </beta> + </gamma> + </kappa> + </zeta> + </iota> + </rho> + </omicron> + </omega> + </chi> + </xi> + </rho> + </tree> + </test> + <test> + <xpath>//eta[@xml:lang="no"]//kappa[@xml:id="id1"][not(following-sibling::*)]/pi[@object][not(following-sibling::*)]//*[@and="true"][@xml:id="id2"]//omega[@title][following-sibling::*[position()=2]][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::lambda[@xml:lang="no"][@xml:id="id3"]//chi[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <eta xml:lang="no"> + <kappa xml:id="id1"> + <pi object="_blank"> + <any and="true" xml:id="id2"> + <omega title="attribute value"/> + <iota/> + <lambda xml:lang="no" xml:id="id3"> + <chi xml:lang="nb"> + <green>This text must be green</green> + </chi> + </lambda> + </any> + </pi> + </kappa> + </eta> + </tree> + </test> + <test> + <xpath>//*[@xml:id="id1"]//tau[starts-with(concat(@src,"-"),"this-")][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//pi[contains(@delete,"en")][@xml:lang="no-nb"][@xml:id="id3"]/theta[@title="attribute-value"][@xml:id="id4"][not(child::node())][following-sibling::iota[@desciption="another attribute value"][@xml:lang="en-GB"][@xml:id="id5"]//tau[@xml:lang="no"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(preceding-sibling::tau)][following-sibling::omega[@xml:lang="en-GB"]/tau[starts-with(@desciption,"attrib")][@xml:id="id7"]//beta[not(preceding-sibling::*)][not(child::node())][following-sibling::iota[preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][following-sibling::alpha[@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//xi[starts-with(concat(@delete,"-"),"true-")][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:id="id10"][preceding-sibling::*[position() = 1]][following-sibling::alpha[@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[contains(concat(@string,"$"),"nodeValue$")]/tau[@xml:lang="en-US"][@xml:id="id12"][not(following-sibling::*)]//mu[contains(@true,"t")][@xml:id="id13"][not(preceding-sibling::*)]/upsilon[starts-with(concat(@or,"-"),"123456789-")][following-sibling::zeta[@and][@xml:id="id14"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::zeta[@xml:id="id15"]/mu[@xml:lang="en-US"][not(preceding-sibling::*)]/alpha[@true][not(following-sibling::*)]//sigma[@xml:id="id16"][not(preceding-sibling::*)][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <any xml:id="id1"> + <tau src="this-is-att-value" xml:lang="en" xml:id="id2"> + <pi delete="solid 1px green" xml:lang="no-nb" xml:id="id3"> + <theta title="attribute-value" xml:id="id4"/> + <iota desciption="another attribute value" xml:lang="en-GB" xml:id="id5"> + <tau xml:lang="no" xml:id="id6"/> + <omega xml:lang="en-GB"> + <tau desciption="attribute" xml:id="id7"> + <beta/> + <iota/> + <alpha xml:lang="nb" xml:id="id8"> + <xi delete="true" xml:id="id9"/> + <upsilon xml:id="id10"/> + <alpha xml:lang="nb" xml:id="id11"/> + <epsilon string="this.nodeValue"> + <tau xml:lang="en-US" xml:id="id12"> + <mu true="attribute value" xml:id="id13"> + <upsilon or="123456789"/> + <zeta and="attribute value" xml:id="id14"/> + <zeta xml:id="id15"> + <mu xml:lang="en-US"> + <alpha true="100%"> + <sigma xml:id="id16"> + <green>This text must be green</green> + </sigma> + </alpha> + </mu> + </zeta> + </mu> + </tau> + </epsilon> + </alpha> + </tau> + </omega> + </iota> + </pi> + </tau> + </any> + </tree> + </test> + <test> + <xpath>//chi[contains(concat(@number,"$"),"-value$")][@xml:lang="nb"]/rho[@name="100%"][@xml:id="id1"][not(preceding-sibling::rho)]//mu[@attrib][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::upsilon[@xml:id="id3"][preceding-sibling::*[position() = 1]]/pi[starts-with(concat(@false,"-"),"false-")][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[@name="100%"][@xml:lang="en-US"][not(following-sibling::*)]/pi[contains(concat(@attribute,"$"),"value$")][@xml:lang="en-GB"][following-sibling::sigma[contains(concat(@name,"$"),"lid 1px green$")][@xml:lang="en-GB"][@xml:id="id5"][not(following-sibling::*)]/lambda[starts-with(concat(@object,"-"),"123456789-")][@xml:id="id6"][not(preceding-sibling::*)][not(child::node())][following-sibling::phi[@xml:id="id7"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::upsilon[preceding-sibling::*[position() = 2]][following-sibling::lambda[@xml:lang="en-US"][preceding-sibling::*[position() = 3]][following-sibling::nu[contains(@attr,"_blan")][@xml:lang="en"][not(following-sibling::*)]/sigma[contains(concat(@true,"$"),"789$")][@xml:lang="no"][@xml:id="id8"][following-sibling::omega[starts-with(concat(@data,"-"),"attribute value-")][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::omicron[@token="another attribute value"][@xml:id="id9"][not(following-sibling::*)]/mu[@xml:id="id10"][not(preceding-sibling::*)]//beta[@object][@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::*[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//epsilon[starts-with(@and,"another attribute v")][@xml:id="id11"][position() = 1]]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <chi number="attribute-value" xml:lang="nb"> + <rho name="100%" xml:id="id1"> + <mu attrib="true" xml:lang="en" xml:id="id2"/> + <upsilon xml:id="id3"> + <pi false="false" xml:id="id4"/> + <any name="100%" xml:lang="en-US"> + <pi attribute="this-is-att-value" xml:lang="en-GB"/> + <sigma name="solid 1px green" xml:lang="en-GB" xml:id="id5"> + <lambda object="123456789" xml:id="id6"/> + <phi xml:id="id7"/> + <upsilon/> + <lambda xml:lang="en-US"/> + <nu attr="_blank" xml:lang="en"> + <sigma true="123456789" xml:lang="no" xml:id="id8"/> + <omega data="attribute value"/> + <omicron token="another attribute value" xml:id="id9"> + <mu xml:id="id10"> + <beta object="true" xml:lang="en-GB"/> + <any> + <epsilon and="another attribute value" xml:id="id11"> + <green>This text must be green</green> + </epsilon> + </any> + </mu> + </omicron> + </nu> + </sigma> + </any> + </upsilon> + </rho> + </chi> + </tree> + </test> + <test> + <xpath>//chi[@xml:id="id1"]//eta[@xml:lang="en-GB"][@xml:id="id2"][not(following-sibling::*)]/omega[@desciption]/pi/omicron[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[contains(@true,"ttribute ")][@xml:lang="en"][not(child::node())][following-sibling::psi[@xml:lang="no"][preceding-sibling::*[position() = 2]]//*[following-sibling::mu[contains(@data,"alse")][@xml:lang="no-nb"][@xml:id="id4"][not(child::node())][following-sibling::psi[starts-with(@att,"this.nodeVa")][preceding-sibling::*[position() = 2]]//delta[starts-with(@att,"this-is-att")][not(child::node())][following-sibling::mu[@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[@xml:lang="en-US"][@xml:id="id6"][not(preceding-sibling::*)]/xi[@desciption][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//tau[contains(concat(@attr,"$"),"ue$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::mu[@xml:lang="no-nb"][@xml:id="id8"]]]]]][position() = 1]]</xpath> + <tree> + <chi xml:id="id1"> + <eta xml:lang="en-GB" xml:id="id2"> + <omega desciption="attribute"> + <pi> + <omicron xml:id="id3"/> + <kappa true="another attribute value" xml:lang="en"/> + <psi xml:lang="no"> + <any/> + <mu data="false" xml:lang="no-nb" xml:id="id4"/> + <psi att="this.nodeValue"> + <delta att="this-is-att-value"/> + <mu xml:id="id5"> + <phi xml:lang="en-US" xml:id="id6"> + <xi desciption="123456789" xml:id="id7"> + <tau attr="this-is-att-value" xml:lang="no-nb"/> + <mu xml:lang="no-nb" xml:id="id8"> + <green>This text must be green</green> + </mu> + </xi> + </phi> + </mu> + </psi> + </psi> + </pi> + </omega> + </eta> + </chi> + </tree> + </test> + <test> + <xpath>//chi[@xml:lang="nb"]//chi[not(child::node())][following-sibling::lambda[contains(concat(@desciption,"$"),"00%$")][@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::iota[starts-with(@desciption,"att")][@xml:lang="en-GB"][@xml:id="id3"]//rho[@abort="attribute value"][@xml:id="id4"][not(preceding-sibling::*)]/psi[following-sibling::*[position()=1]][following-sibling::upsilon[@data][@xml:id="id5"][preceding-sibling::*[position() = 1]]//sigma[contains(@false,"n")][@xml:id="id6"][following-sibling::theta[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/theta[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::eta[contains(@and,"nt")][@xml:id="id8"][preceding-sibling::*[position() = 1]][following-sibling::alpha[starts-with(concat(@src,"-"),"attribute-")][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::tau[contains(concat(@and,"$"),"blank$")][preceding-sibling::*[position() = 3]]/nu[@xml:lang="en"][@xml:id="id9"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::iota[@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::nu[@insert="attribute value"][@xml:id="id11"][preceding-sibling::*[position() = 2]]//psi[starts-with(@false,"c")][@xml:lang="no"][@xml:id="id12"]][position() = 1]]][position() = 1]]]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <chi xml:lang="nb"> + <chi/> + <lambda desciption="100%" xml:lang="en-GB" xml:id="id1"/> + <tau xml:id="id2"/> + <iota desciption="attribute-value" xml:lang="en-GB" xml:id="id3"> + <rho abort="attribute value" xml:id="id4"> + <psi/> + <upsilon data="this-is-att-value" xml:id="id5"> + <sigma false="_blank" xml:id="id6"/> + <theta> + <theta xml:lang="no" xml:id="id7"/> + <eta and="content" xml:id="id8"/> + <alpha src="attribute" xml:lang="no"/> + <tau and="_blank"> + <nu xml:lang="en" xml:id="id9"/> + <iota xml:lang="en-US" xml:id="id10"/> + <nu insert="attribute value" xml:id="id11"> + <psi false="content" xml:lang="no" xml:id="id12"> + <green>This text must be green</green> + </psi> + </nu> + </tau> + </theta> + </upsilon> + </rho> + </iota> + </chi> + </tree> + </test> + <test> + <xpath>//epsilon[contains(@desciption,"te-valu")][@xml:lang="no"][@xml:id="id1"]/alpha[@xml:lang="en-US"][not(child::node())][following-sibling::alpha[starts-with(concat(@insert,"-"),"content-")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@attribute="attribute-value"][@xml:id="id2"][following-sibling::*[position()=1]][not(child::node())][following-sibling::epsilon[starts-with(@insert,"another attribute va")][@xml:id="id3"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//sigma[@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/tau[following-sibling::upsilon[@delete="this.nodeValue"][@xml:lang="en-US"][@xml:id="id4"]//nu[not(preceding-sibling::nu)]//pi[starts-with(concat(@object,"-"),"attribute value-")][@xml:lang="en-GB"]//*[not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="nb"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]]</xpath> + <tree> + <epsilon desciption="attribute-value" xml:lang="no" xml:id="id1"> + <alpha xml:lang="en-US"/> + <alpha insert="content" xml:lang="nb"/> + <pi attribute="attribute-value" xml:id="id2"/> + <epsilon insert="another attribute value" xml:id="id3"> + <sigma xml:lang="en-US"> + <tau/> + <upsilon delete="this.nodeValue" xml:lang="en-US" xml:id="id4"> + <nu> + <pi object="attribute value" xml:lang="en-GB"> + <any> + <rho xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </rho> + </any> + </pi> + </nu> + </upsilon> + </sigma> + </epsilon> + </epsilon> + </tree> + </test> + <test> + <xpath>//beta[@xml:lang="no-nb"][@xml:id="id1"]//beta[starts-with(concat(@true,"-"),"this-")][@xml:lang="en-US"][@xml:id="id2"][following-sibling::zeta[@xml:id="id3"][preceding-sibling::*[position() = 1]]//eta[@xml:lang="no"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::tau[@attribute="true"][@xml:lang="en-GB"][@xml:id="id4"][preceding-sibling::*[position() = 1]]//alpha[@data][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::tau[@xml:id="id6"][following-sibling::*[starts-with(concat(@insert,"-"),"this.nodeValue-")][not(child::node())][following-sibling::eta[starts-with(@desciption,"true")][@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::chi[starts-with(@false,"fa")][@xml:lang="en-US"][@xml:id="id8"][not(following-sibling::*)]/eta[@xml:lang="no"][@xml:id="id9"][not(following-sibling::*)]//pi[@string][@xml:lang="en"][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@xml:lang="en-US"][@xml:id="id10"]/delta[@xml:lang="no-nb"]/phi[following-sibling::iota[starts-with(concat(@insert,"-"),"123456789-")][@xml:lang="en"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::pi[contains(@string,"lse")][@xml:lang="no"][not(child::node())][following-sibling::nu[contains(@string,"ribute-value")][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::upsilon[@true][@xml:id="id11"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]//zeta[starts-with(concat(@string,"-"),"this.nodeValue-")][not(preceding-sibling::*)]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]]][position() = 1]]</xpath> + <tree> + <beta xml:lang="no-nb" xml:id="id1"> + <beta true="this-is-att-value" xml:lang="en-US" xml:id="id2"/> + <zeta xml:id="id3"> + <eta xml:lang="no"/> + <tau attribute="true" xml:lang="en-GB" xml:id="id4"> + <alpha data="attribute value" xml:id="id5"/> + <tau xml:id="id6"/> + <any insert="this.nodeValue"/> + <eta desciption="true" xml:id="id7"/> + <chi false="false" xml:lang="en-US" xml:id="id8"> + <eta xml:lang="no" xml:id="id9"> + <pi string="another attribute value" xml:lang="en"/> + <pi xml:lang="en-US" xml:id="id10"> + <delta xml:lang="no-nb"> + <phi/> + <iota insert="123456789" xml:lang="en"/> + <pi string="false" xml:lang="no"/> + <nu string="attribute-value"/> + <upsilon true="this.nodeValue" xml:id="id11"> + <zeta string="this.nodeValue"> + <green>This text must be green</green> + </zeta> + </upsilon> + </delta> + </pi> + </eta> + </chi> + </tau> + </zeta> + </beta> + </tree> + </test> + <test> + <xpath>//tau[@xml:lang="nb"]//gamma[contains(concat(@string,"$"),"_blank$")][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/sigma[following-sibling::pi[following-sibling::*[position()=3]][not(child::node())][following-sibling::tau[@xml:id="id2"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=2]][following-sibling::lambda[@xml:id="id3"][following-sibling::rho[@name][@xml:lang="en"]/iota[@or="content"][@xml:lang="nb"][@xml:id="id4"][not(following-sibling::*)]//iota[@xml:id="id5"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::nu[@src][@xml:lang="no-nb"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <tau xml:lang="nb"> + <gamma string="_blank" xml:id="id1"> + <sigma/> + <pi/> + <tau xml:id="id2"/> + <lambda xml:id="id3"/> + <rho name="100%" xml:lang="en"> + <iota or="content" xml:lang="nb" xml:id="id4"> + <iota xml:id="id5"/> + <nu src="false" xml:lang="no-nb" xml:id="id6"> + <green>This text must be green</green> + </nu> + </iota> + </rho> + </gamma> + </tau> + </tree> + </test> + <test> + <xpath>//nu[@desciption]//chi[@xml:id="id1"][not(preceding-sibling::*)][not(child::node())][following-sibling::omega[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/mu[@xml:lang="no-nb"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]/beta[starts-with(@att,"another attribute v")][not(child::node())][following-sibling::sigma[not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <nu desciption="attribute value"> + <chi xml:id="id1"/> + <omega xml:id="id2"> + <mu xml:lang="no-nb" xml:id="id3"> + <beta att="another attribute value"/> + <sigma> + <green>This text must be green</green> + </sigma> + </mu> + </omega> + </nu> + </tree> + </test> + <test> + <xpath>//iota/eta[@class="attribute-value"][@xml:lang="nb"][@xml:id="id1"]/alpha[@class="true"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[contains(@desciption,"%")][@xml:id="id3"][not(preceding-sibling::*)]/rho[@title][@xml:lang="nb"][not(child::node())][following-sibling::chi[@and="false"][@xml:id="id4"][not(child::node())][following-sibling::rho[@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/*[@content][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:lang="nb"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/tau[starts-with(@class,"c")][not(child::node())][following-sibling::tau[@name="this-is-att-value"][not(child::node())][following-sibling::delta[@xml:lang="nb"][@xml:id="id6"][following-sibling::alpha[@xml:lang="nb"][@xml:id="id7"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]//omega[@xml:id="id8"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[contains(@false,"ue")][@xml:lang="en-US"][@xml:id="id9"]/lambda[@insert][@xml:id="id10"]/*[@desciption="true"][@xml:lang="en-US"][@xml:id="id11"][not(following-sibling::*)]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <iota> + <eta class="attribute-value" xml:lang="nb" xml:id="id1"> + <alpha class="true" xml:id="id2"/> + <tau> + <chi desciption="100%" xml:id="id3"> + <rho title="attribute" xml:lang="nb"/> + <chi and="false" xml:id="id4"/> + <rho xml:lang="no"> + <any content="true"/> + <eta xml:lang="nb" xml:id="id5"> + <tau class="content"/> + <tau name="this-is-att-value"/> + <delta xml:lang="nb" xml:id="id6"/> + <alpha xml:lang="nb" xml:id="id7"> + <omega xml:id="id8"/> + <eta false="this-is-att-value" xml:lang="en-US" xml:id="id9"> + <lambda insert="true" xml:id="id10"> + <any desciption="true" xml:lang="en-US" xml:id="id11"> + <green>This text must be green</green> + </any> + </lambda> + </eta> + </alpha> + </eta> + </rho> + </chi> + </tau> + </eta> + </iota> + </tree> + </test> + <test> + <xpath>//gamma/rho[following-sibling::*[position()=1]][not(child::node())][following-sibling::psi/mu[@xml:lang="en"][@xml:id="id1"][not(preceding-sibling::*)]/omicron[@xml:id="id2"][not(following-sibling::*)]//pi[@class][@xml:lang="en"][not(following-sibling::pi)][following-sibling::eta[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=2]][following-sibling::lambda[not(child::node())][following-sibling::chi[@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][not(following-sibling::*)][position() = 1]]]][position() = 1]]</xpath> + <tree> + <gamma> + <rho/> + <psi> + <mu xml:lang="en" xml:id="id1"> + <omicron xml:id="id2"> + <pi class="true" xml:lang="en"/> + <eta xml:id="id3"/> + <lambda/> + <chi xml:lang="no-nb"> + <green>This text must be green</green> + </chi> + </omicron> + </mu> + </psi> + </gamma> + </tree> + </test> + <test> + <xpath>//theta//beta[@xml:lang="en"][not(child::node())][following-sibling::iota[@number][not(preceding-sibling::iota)][following-sibling::chi[@src][@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]/rho[not(preceding-sibling::*)][following-sibling::delta[@xml:lang="no"][@xml:id="id2"][preceding-sibling::*[position() = 1]][following-sibling::mu[contains(concat(@data,"$"),"ank$")][@xml:lang="en"][@xml:id="id3"][not(child::node())][following-sibling::pi[@xml:lang="en"][following-sibling::theta[@abort="_blank"][@xml:lang="en-US"][@xml:id="id4"][preceding-sibling::*[position() = 4]][not(following-sibling::*)]/omicron[starts-with(@title,"fals")][not(preceding-sibling::*)][following-sibling::alpha[starts-with(@title,"attribute-v")][not(following-sibling::*)]/sigma[@attribute][@xml:id="id5"][following-sibling::pi[@xml:lang="en-GB"][not(child::node())][following-sibling::kappa[@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(child::node())][following-sibling::kappa[not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 4]][following-sibling::*[position()=1]][following-sibling::*[@xml:id="id6"][preceding-sibling::*[position() = 5]]/lambda[contains(concat(@false,"$"),"alue$")][@xml:lang="nb"][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::delta[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/alpha[@xml:id="id8"][not(parent::*/*[position()=2])]//lambda[@xml:lang="no-nb"][@xml:id="id9"][not(child::node())][following-sibling::tau[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/phi[position() = 1]]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <theta> + <beta xml:lang="en"/> + <iota number="this.nodeValue"/> + <chi src="_blank" xml:lang="en-US" xml:id="id1"> + <rho/> + <delta xml:lang="no" xml:id="id2"/> + <mu data="_blank" xml:lang="en" xml:id="id3"/> + <pi xml:lang="en"/> + <theta abort="_blank" xml:lang="en-US" xml:id="id4"> + <omicron title="false"/> + <alpha title="attribute-value"> + <sigma attribute="attribute-value" xml:id="id5"/> + <pi xml:lang="en-GB"/> + <kappa xml:lang="no-nb"/> + <kappa/> + <sigma xml:lang="en-GB"/> + <any xml:id="id6"> + <lambda false="attribute-value" xml:lang="nb" xml:id="id7"/> + <delta xml:lang="en-GB"> + <alpha xml:id="id8"> + <lambda xml:lang="no-nb" xml:id="id9"/> + <tau xml:lang="no-nb"> + <phi> + <green>This text must be green</green> + </phi> + </tau> + </alpha> + </delta> + </any> + </alpha> + </theta> + </chi> + </theta> + </tree> + </test> + <test> + <xpath>//mu[starts-with(@data,"attribut")]/epsilon[@xml:lang="nb"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::eta[contains(@attr,"ank")][not(child::node())][following-sibling::gamma[starts-with(concat(@string,"-"),"attribute-")][@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/eta[@delete][@xml:lang="en"][@xml:id="id3"][following-sibling::*[@content][@xml:lang="nb"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=3]][following-sibling::beta[@desciption][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::epsilon[contains(concat(@token,"$"),"een$")][@xml:lang="en"][preceding-sibling::*[position() = 3]][following-sibling::alpha[@att][@xml:lang="no-nb"][@xml:id="id5"][not(following-sibling::*)][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <mu data="attribute value"> + <epsilon xml:lang="nb" xml:id="id1"/> + <eta attr="_blank"/> + <gamma string="attribute-value" xml:lang="en-US" xml:id="id2"> + <eta delete="this.nodeValue" xml:lang="en" xml:id="id3"/> + <any content="false" xml:lang="nb"/> + <beta desciption="another attribute value" xml:id="id4"/> + <epsilon token="solid 1px green" xml:lang="en"/> + <alpha att="content" xml:lang="no-nb" xml:id="id5"> + <green>This text must be green</green> + </alpha> + </gamma> + </mu> + </tree> + </test> + <test> + <xpath>//kappa[@delete][@xml:lang="en-GB"]//epsilon[@xml:lang="no"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/eta[@xml:lang="en-GB"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::*[@false][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/nu[@desciption="false"][not(preceding-sibling::*)]/pi[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::beta//theta[starts-with(concat(@content,"-"),"attribute-")][@xml:lang="no"][@xml:id="id5"][not(child::node())][following-sibling::sigma[starts-with(concat(@desciption,"-"),"this-")][@xml:lang="nb"][@xml:id="id6"][not(following-sibling::*)]/nu[@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)][not(preceding-sibling::nu)]//gamma[starts-with(concat(@attrib,"-"),"this.nodeValue-")][@xml:id="id8"]//theta[contains(@title,"ue")][@xml:id="id9"][following-sibling::*[position()=1]][following-sibling::kappa[preceding-sibling::*[position() = 1]][not(following-sibling::*)]//sigma[@xml:lang="no-nb"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::omicron[starts-with(@token,"soli")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::rho[@xml:lang="no"][preceding-sibling::*[position() = 2]]/mu[contains(@src,"e")][@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]]]]</xpath> + <tree> + <kappa delete="100%" xml:lang="en-GB"> + <epsilon xml:lang="no" xml:id="id1"> + <eta xml:lang="en-GB" xml:id="id2"/> + <any false="false" xml:id="id3"> + <nu desciption="false"> + <pi xml:lang="en-GB" xml:id="id4"/> + <beta> + <theta content="attribute-value" xml:lang="no" xml:id="id5"/> + <sigma desciption="this-is-att-value" xml:lang="nb" xml:id="id6"> + <nu xml:lang="en" xml:id="id7"> + <gamma attrib="this.nodeValue" xml:id="id8"> + <theta title="this.nodeValue" xml:id="id9"/> + <kappa> + <sigma xml:lang="no-nb" xml:id="id10"/> + <omicron token="solid 1px green" xml:lang="no-nb"/> + <rho xml:lang="no"> + <mu src="attribute" xml:lang="en"> + <rho xml:lang="nb"> + <green>This text must be green</green> + </rho> + </mu> + </rho> + </kappa> + </gamma> + </nu> + </sigma> + </beta> + </nu> + </any> + </epsilon> + </kappa> + </tree> + </test> + <test> + <xpath>//nu[@xml:lang="nb"]/eta[@xml:id="id1"]/*[@object][@xml:lang="en-US"][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[contains(concat(@abort,"$"),"bute value$")][@xml:lang="nb"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omicron[@xml:lang="no"][@xml:id="id2"][following-sibling::*[position()=1]][following-sibling::epsilon[contains(@object,"t")][preceding-sibling::*[position() = 2]]//upsilon[@xml:lang="en-US"][@xml:id="id3"]//mu[@xml:lang="nb"][following-sibling::epsilon[preceding-sibling::*[position() = 1]][not(following-sibling::*)]][position() = 1]]]</xpath> + <tree> + <nu xml:lang="nb"> + <eta xml:id="id1"> + <any object="solid 1px green" xml:lang="en-US"> + <zeta abort="attribute value" xml:lang="nb"/> + <omicron xml:lang="no" xml:id="id2"/> + <epsilon object="content"> + <upsilon xml:lang="en-US" xml:id="id3"> + <mu xml:lang="nb"/> + <epsilon> + <green>This text must be green</green> + </epsilon> + </upsilon> + </epsilon> + </any> + </eta> + </nu> + </tree> + </test> + <test> + <xpath>//phi[contains(concat(@string,"$"),"e$")][@xml:lang="en"][@xml:id="id1"]//iota[@xml:lang="en-US"]//upsilon[contains(concat(@string,"$"),"bute value$")][@xml:lang="en-US"][@xml:id="id2"]//nu[@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::omicron[contains(concat(@insert,"$"),"content$")][@xml:lang="en"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//chi[@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <phi string="false" xml:lang="en" xml:id="id1"> + <iota xml:lang="en-US"> + <upsilon string="attribute value" xml:lang="en-US" xml:id="id2"> + <nu xml:id="id3"/> + <omicron insert="content" xml:lang="en"> + <chi xml:lang="no" xml:id="id4"/> + <sigma xml:lang="en-GB"> + <green>This text must be green</green> + </sigma> + </omicron> + </upsilon> + </iota> + </phi> + </tree> + </test> + <test> + <xpath>//xi[@delete]//theta[@xml:id="id1"][following-sibling::beta[@xml:lang="en-GB"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/upsilon[@content][following-sibling::omega[@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::*[position()=1]][not(child::node())][following-sibling::pi[@token][@xml:id="id4"][not(following-sibling::*)]/gamma[@xml:lang="en"][not(preceding-sibling::*)]/gamma[@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[@xml:lang="en"]/rho[@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::beta[contains(@src,"-is")][@xml:id="id6"][preceding-sibling::*[position() = 1]]//*[starts-with(concat(@src,"-"),"another attribute value-")][@xml:id="id7"][not(following-sibling::*)]//rho[not(following-sibling::*)]/mu[contains(@attribute,"tr")][@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]/theta[starts-with(concat(@title,"-"),"_blank-")][@xml:id="id9"][not(child::node())][following-sibling::rho[@xml:id="id10"][preceding-sibling::*[position() = 1]]//xi[starts-with(concat(@and,"-"),"true-")][not(preceding-sibling::*)][following-sibling::omicron[@content][not(child::node())][following-sibling::theta[@xml:lang="nb"][@xml:id="id11"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//upsilon[@class="attribute"][following-sibling::zeta//eta[@name="true"][@xml:lang="en-GB"][@xml:id="id12"][following-sibling::beta[starts-with(@abort,"attribu")][@xml:id="id13"][not(child::node())][following-sibling::gamma[starts-with(concat(@title,"-"),"solid 1px green-")][@xml:lang="no-nb"][@xml:id="id14"][preceding-sibling::*[position() = 2]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]]</xpath> + <tree> + <xi delete="attribute-value"> + <theta xml:id="id1"/> + <beta xml:lang="en-GB" xml:id="id2"> + <upsilon content="100%"/> + <omega xml:id="id3"/> + <pi token="attribute-value" xml:id="id4"> + <gamma xml:lang="en"> + <gamma xml:lang="en-US"/> + <alpha xml:lang="en"> + <rho xml:id="id5"/> + <beta src="this-is-att-value" xml:id="id6"> + <any src="another attribute value" xml:id="id7"> + <rho> + <mu attribute="attribute" xml:id="id8"> + <theta title="_blank" xml:id="id9"/> + <rho xml:id="id10"> + <xi and="true"/> + <omicron content="attribute-value"/> + <theta xml:lang="nb" xml:id="id11"> + <upsilon class="attribute"/> + <zeta> + <eta name="true" xml:lang="en-GB" xml:id="id12"/> + <beta abort="attribute" xml:id="id13"/> + <gamma title="solid 1px green" xml:lang="no-nb" xml:id="id14"> + <green>This text must be green</green> + </gamma> + </zeta> + </theta> + </rho> + </mu> + </rho> + </any> + </beta> + </alpha> + </gamma> + </pi> + </beta> + </xi> + </tree> + </test> + <test> + <xpath>//lambda[starts-with(concat(@content,"-"),"this.nodeValue-")]//psi[@xml:lang="no"]/kappa[following-sibling::*[position()=3]][not(child::node())][following-sibling::omega[@xml:lang="en-GB"][@xml:id="id1"][preceding-sibling::*[position() = 1]][following-sibling::pi[@attrib="another attribute value"][@xml:id="id2"][following-sibling::iota[@xml:lang="nb"][@xml:id="id3"][not(following-sibling::*)]//mu[contains(concat(@content,"$"),"reen$")][@xml:lang="en-US"][@xml:id="id4"][following-sibling::gamma[@false]/rho[@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 1]][following-sibling::kappa[@xml:id="id6"][following-sibling::eta[@content="another attribute value"][@xml:lang="nb"][@xml:id="id7"][not(following-sibling::*)]/upsilon[@token="attribute value"][@xml:lang="nb"][not(child::node())][following-sibling::lambda[@true][@xml:id="id8"][not(following-sibling::*)]//theta[starts-with(@or,"_blan")]//psi[@xml:lang="en-US"][not(following-sibling::*)]//upsilon[@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::upsilon[starts-with(@object,"1234567")][@xml:lang="en-US"][@xml:id="id9"][not(following-sibling::*)]//mu[@xml:id="id10"][not(following-sibling::*)]/omega[@xml:id="id11"]]][position() = 1]]]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <lambda content="this.nodeValue"> + <psi xml:lang="no"> + <kappa/> + <omega xml:lang="en-GB" xml:id="id1"/> + <pi attrib="another attribute value" xml:id="id2"/> + <iota xml:lang="nb" xml:id="id3"> + <mu content="solid 1px green" xml:lang="en-US" xml:id="id4"/> + <gamma false="another attribute value"> + <rho xml:lang="en-GB" xml:id="id5"/> + <alpha/> + <kappa xml:id="id6"/> + <eta content="another attribute value" xml:lang="nb" xml:id="id7"> + <upsilon token="attribute value" xml:lang="nb"/> + <lambda true="this-is-att-value" xml:id="id8"> + <theta or="_blank"> + <psi xml:lang="en-US"> + <upsilon xml:lang="en-US"/> + <upsilon object="123456789" xml:lang="en-US" xml:id="id9"> + <mu xml:id="id10"> + <omega xml:id="id11"> + <green>This text must be green</green> + </omega> + </mu> + </upsilon> + </psi> + </theta> + </lambda> + </eta> + </gamma> + </iota> + </psi> + </lambda> + </tree> + </test> + <test> + <xpath>//upsilon[@xml:lang="en-US"][@xml:id="id1"]//nu[not(child::node())][following-sibling::psi[@xml:id="id2"][not(following-sibling::*)]/nu[@abort="_blank"][not(preceding-sibling::*)][following-sibling::iota[@delete][@xml:id="id3"][following-sibling::*[position()=2]][not(child::node())][following-sibling::phi[@xml:lang="nb"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::xi[@false][@xml:lang="no"]//upsilon[contains(concat(@src,"$"),"attribute-value$")][@xml:lang="en-US"][not(preceding-sibling::*)]//eta[@true][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:lang="en-GB"][not(preceding-sibling::*)][not(following-sibling::*)]//alpha[@false][@xml:id="id4"]//*[@string][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(concat(@insert,"$"),"rue$")][@xml:lang="nb"][not(child::node())][following-sibling::rho//nu[@xml:lang="nb"][not(preceding-sibling::*)]//delta[starts-with(concat(@attrib,"-"),"true-")][@xml:id="id5"][following-sibling::*[position()=1]][following-sibling::phi[@xml:lang="en-US"][@xml:id="id6"]//nu[starts-with(concat(@src,"-"),"attribute-")][@xml:lang="en-GB"][following-sibling::*[position()=1]][not(child::node())][following-sibling::gamma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[@xml:lang="en"][not(child::node())][following-sibling::xi[@xml:lang="en-GB"][@xml:id="id7"][not(following-sibling::*)]/omicron[contains(concat(@attribute,"$"),"ribute-value$")][@xml:lang="no-nb"][not(preceding-sibling::*)][not(following-sibling::*)]]]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <upsilon xml:lang="en-US" xml:id="id1"> + <nu/> + <psi xml:id="id2"> + <nu abort="_blank"/> + <iota delete="another attribute value" xml:id="id3"/> + <phi xml:lang="nb"/> + <xi false="another attribute value" xml:lang="no"> + <upsilon src="attribute-value" xml:lang="en-US"> + <eta true="solid 1px green"> + <epsilon xml:lang="en-GB"> + <alpha false="this-is-att-value" xml:id="id4"> + <any string="_blank"/> + <sigma insert="true" xml:lang="nb"/> + <rho> + <nu xml:lang="nb"> + <delta attrib="true" xml:id="id5"/> + <phi xml:lang="en-US" xml:id="id6"> + <nu src="attribute-value" xml:lang="en-GB"/> + <gamma> + <delta xml:lang="en"/> + <xi xml:lang="en-GB" xml:id="id7"> + <omicron attribute="attribute-value" xml:lang="no-nb"> + <green>This text must be green</green> + </omicron> + </xi> + </gamma> + </phi> + </nu> + </rho> + </alpha> + </epsilon> + </eta> + </upsilon> + </xi> + </psi> + </upsilon> + </tree> + </test> + <test> + <xpath>//tau[@insert][@xml:id="id1"]/delta[@xml:lang="no"][not(preceding-sibling::*)][not(child::node())][following-sibling::tau[starts-with(@token,"_bla")][@xml:id="id2"][not(following-sibling::*)]//kappa[@xml:lang="no"][not(preceding-sibling::*)]//gamma[following-sibling::*[position()=2]][not(preceding-sibling::gamma)][not(child::node())][following-sibling::chi[@delete][@xml:id="id3"][preceding-sibling::*[position() = 1]][following-sibling::chi[@delete][@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/pi[@xml:lang="en-US"][@xml:id="id5"][not(following-sibling::*)]//xi[@data][not(preceding-sibling::*)]/lambda[@att][@xml:lang="no"][@xml:id="id6"][not(following-sibling::*)]/theta[@object][@xml:lang="en-GB"]//sigma[starts-with(concat(@string,"-"),"another attribute value-")][not(following-sibling::*)]/upsilon[@xml:id="id7"][not(following-sibling::*)][position() = 1]]]]</xpath> + <tree> + <tau insert="this-is-att-value" xml:id="id1"> + <delta xml:lang="no"/> + <tau token="_blank" xml:id="id2"> + <kappa xml:lang="no"> + <gamma/> + <chi delete="true" xml:id="id3"/> + <chi delete="attribute value" xml:id="id4"> + <pi xml:lang="en-US" xml:id="id5"> + <xi data="123456789"> + <lambda att="another attribute value" xml:lang="no" xml:id="id6"> + <theta object="this.nodeValue" xml:lang="en-GB"> + <sigma string="another attribute value"> + <upsilon xml:id="id7"> + <green>This text must be green</green> + </upsilon> + </sigma> + </theta> + </lambda> + </xi> + </pi> + </chi> + </kappa> + </tau> + </tau> + </tree> + </test> + <test> + <xpath>//iota[@xml:id="id1"]//nu[contains(@abort,"v")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)]/delta[@xml:lang="no-nb"]//epsilon[@src="123456789"][@xml:lang="en-GB"][@xml:id="id3"]//iota[@xml:lang="en-US"][@xml:id="id4"]/pi[starts-with(@abort,"fa")][@xml:lang="no-nb"]/upsilon</xpath> + <tree> + <iota xml:id="id1"> + <nu abort="attribute-value" xml:lang="no-nb" xml:id="id2"> + <delta xml:lang="no-nb"> + <epsilon src="123456789" xml:lang="en-GB" xml:id="id3"> + <iota xml:lang="en-US" xml:id="id4"> + <pi abort="false" xml:lang="no-nb"> + <upsilon> + <green>This text must be green</green> + </upsilon> + </pi> + </iota> + </epsilon> + </delta> + </nu> + </iota> + </tree> + </test> + <test> + <xpath>//sigma[@xml:lang="en-US"]/epsilon[@src][@xml:lang="en-GB"][@xml:id="id1"][not(preceding-sibling::*)][not(following-sibling::*)]/psi[@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//upsilon[@desciption][@xml:id="id3"][not(preceding-sibling::*)]//gamma[@xml:lang="no"][following-sibling::pi[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::beta[@xml:lang="no-nb"][@xml:id="id4"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=3]][not(child::node())][following-sibling::sigma[contains(concat(@name,"$"),"3456789$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 3]][following-sibling::mu[starts-with(@attribute,"attribute v")][@xml:lang="en"][@xml:id="id5"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::theta[@xml:id="id6"][not(following-sibling::*)]/alpha[@number][@xml:id="id7"][following-sibling::*[position()=1]][following-sibling::rho[@xml:lang="no"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/psi[@xml:id="id8"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@xml:lang="en"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@xml:id="id9"][not(following-sibling::*)]/phi[@xml:lang="nb"]/phi[@xml:lang="en"][not(following-sibling::*)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <sigma xml:lang="en-US"> + <epsilon src="false" xml:lang="en-GB" xml:id="id1"> + <psi xml:id="id2"> + <upsilon desciption="content" xml:id="id3"> + <gamma xml:lang="no"/> + <pi/> + <beta xml:lang="no-nb" xml:id="id4"/> + <sigma name="123456789" xml:lang="no-nb"/> + <mu attribute="attribute value" xml:lang="en" xml:id="id5"/> + <theta xml:id="id6"> + <alpha number="attribute value" xml:id="id7"/> + <rho xml:lang="no"> + <psi xml:id="id8"> + <xi xml:lang="en"> + <epsilon xml:id="id9"> + <phi xml:lang="nb"> + <phi xml:lang="en"> + <green>This text must be green</green> + </phi> + </phi> + </epsilon> + </xi> + </psi> + </rho> + </theta> + </upsilon> + </psi> + </epsilon> + </sigma> + </tree> + </test> + <test> + <xpath>//beta[starts-with(concat(@class,"-"),"100%-")][@xml:lang="en-GB"][@xml:id="id1"]/alpha[@xml:id="id2"][not(preceding-sibling::*)]/gamma[contains(@attrib,"t")][following-sibling::*[position()=1]][following-sibling::xi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]//*[@xml:id="id3"]/nu[@xml:id="id4"][following-sibling::*[position()=5]][following-sibling::rho[@content][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@xml:lang="nb"][following-sibling::*[position()=3]][not(child::node())][following-sibling::iota[starts-with(@desciption,"fal")][@xml:id="id6"][preceding-sibling::*[position() = 3]][following-sibling::tau[@attribute][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::kappa[starts-with(@or,"anothe")][@xml:lang="no"][preceding-sibling::*[position() = 5]]//chi[contains(@attr,"0")][@xml:lang="en-US"]/eta[starts-with(concat(@attr,"-"),"this.nodeValue-")][not(preceding-sibling::*)][not(following-sibling::*)]/zeta[not(following-sibling::*)]/gamma[@xml:lang="no-nb"][@xml:id="id7"][following-sibling::upsilon[preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/iota[starts-with(@insert,"attr")][@xml:lang="nb"][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@xml:lang="no"][@xml:id="id10"][following-sibling::psi[@xml:lang="no"][@xml:id="id11"][preceding-sibling::*[position() = 1]]//nu[@abort][@xml:id="id12"][not(preceding-sibling::*)][not(child::node())][following-sibling::rho[@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::pi[@src][@xml:lang="nb"][position() = 1]][position() = 1]]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <beta class="100%" xml:lang="en-GB" xml:id="id1"> + <alpha xml:id="id2"> + <gamma attrib="content"/> + <xi xml:lang="en-GB"> + <any xml:id="id3"> + <nu xml:id="id4"/> + <rho content="_blank" xml:id="id5"/> + <pi xml:lang="nb"/> + <iota desciption="false" xml:id="id6"/> + <tau attribute="attribute value"/> + <kappa or="another attribute value" xml:lang="no"> + <chi attr="100%" xml:lang="en-US"> + <eta attr="this.nodeValue"> + <zeta> + <gamma xml:lang="no-nb" xml:id="id7"/> + <upsilon/> + <tau xml:lang="en-GB" xml:id="id8"> + <iota insert="attribute value" xml:lang="nb" xml:id="id9"> + <mu xml:lang="no" xml:id="id10"/> + <psi xml:lang="no" xml:id="id11"> + <nu abort="attribute-value" xml:id="id12"/> + <rho xml:lang="no-nb"/> + <pi src="_blank" xml:lang="nb"> + <green>This text must be green</green> + </pi> + </psi> + </iota> + </tau> + </zeta> + </eta> + </chi> + </kappa> + </any> + </xi> + </alpha> + </beta> + </tree> + </test> + <test> + <xpath>//zeta[@attribute][@xml:lang="en-GB"][@xml:id="id1"]/lambda[@token][@xml:lang="no-nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::*[@xml:lang="no-nb"][not(child::node())][following-sibling::delta[contains(concat(@class,"$"),"56789$")][@xml:lang="en-GB"]//zeta[@xml:lang="en-US"][@xml:id="id2"][following-sibling::eta[not(child::node())][following-sibling::lambda[starts-with(concat(@data,"-"),"solid 1px green-")][@xml:lang="no-nb"][preceding-sibling::*[position() = 2]][following-sibling::omicron[starts-with(concat(@desciption,"-"),"123456789-")][following-sibling::omicron[@false][@xml:id="id3"][not(child::node())][following-sibling::omega[@xml:id="id4"][preceding-sibling::*[position() = 5]][following-sibling::zeta[@xml:lang="en-GB"][@xml:id="id5"][not(child::node())][following-sibling::zeta[@xml:lang="no-nb"]/omega[@xml:lang="no-nb"][not(child::node())][following-sibling::chi[not(following-sibling::*)]]][position() = 1]]][position() = 1]]]][position() = 1]][position() = 1]]]</xpath> + <tree> + <zeta attribute="100%" xml:lang="en-GB" xml:id="id1"> + <lambda token="attribute value" xml:lang="no-nb"/> + <any xml:lang="no-nb"/> + <delta class="123456789" xml:lang="en-GB"> + <zeta xml:lang="en-US" xml:id="id2"/> + <eta/> + <lambda data="solid 1px green" xml:lang="no-nb"/> + <omicron desciption="123456789"/> + <omicron false="solid 1px green" xml:id="id3"/> + <omega xml:id="id4"/> + <zeta xml:lang="en-GB" xml:id="id5"/> + <zeta xml:lang="no-nb"> + <omega xml:lang="no-nb"/> + <chi> + <green>This text must be green</green> + </chi> + </zeta> + </delta> + </zeta> + </tree> + </test> + <test> + <xpath>//theta[@xml:lang="nb"][@xml:id="id1"]/zeta[@xml:lang="no-nb"][@xml:id="id2"]/beta[@object][not(following-sibling::beta)]//phi[@desciption][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//kappa[@xml:lang="en-US"][@xml:id="id4"][not(preceding-sibling::*)][not(child::node())][following-sibling::delta[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::mu[@xml:lang="en"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]/upsilon[@xml:lang="no-nb"][@xml:id="id6"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::sigma[contains(concat(@token,"$"),"olid 1px green$")][@xml:id="id7"]//omega[@content="this.nodeValue"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[starts-with(@insert,"fa")][@xml:lang="no"][following-sibling::pi[contains(@src,"nk")][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <theta xml:lang="nb" xml:id="id1"> + <zeta xml:lang="no-nb" xml:id="id2"> + <beta object="123456789"> + <phi desciption="attribute" xml:lang="no-nb" xml:id="id3"> + <kappa xml:lang="en-US" xml:id="id4"/> + <delta xml:id="id5"/> + <mu xml:lang="en"> + <upsilon xml:lang="no-nb" xml:id="id6"/> + <sigma token="solid 1px green" xml:id="id7"> + <omega content="this.nodeValue"> + <omega insert="false" xml:lang="no"/> + <pi src="_blank"> + <green>This text must be green</green> + </pi> + </omega> + </sigma> + </mu> + </phi> + </beta> + </zeta> + </theta> + </tree> + </test> + <test> + <xpath>//omega//kappa[not(preceding-sibling::*)][not(child::node())][following-sibling::iota[@xml:id="id1"][not(child::node())][following-sibling::upsilon[@xml:lang="en-GB"][not(following-sibling::*)]/zeta[@xml:lang="en-GB"][@xml:id="id2"][not(child::node())][following-sibling::phi[starts-with(@name,"12345")][@xml:lang="no-nb"][@xml:id="id3"][not(following-sibling::*)]//xi[@xml:lang="en-GB"][@xml:id="id4"][not(child::node())][following-sibling::lambda[@xml:id="id5"]//kappa[contains(concat(@abort,"$"),"e$")][@xml:lang="no-nb"][not(preceding-sibling::kappa)][following-sibling::xi[@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/delta[@xml:id="id7"][following-sibling::lambda[@attrib][@xml:id="id8"][preceding-sibling::*[position() = 1]]//psi[@xml:id="id9"]//tau[starts-with(@delete,"1234")][@xml:lang="en"][@xml:id="id10"][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="no-nb"][@xml:id="id11"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//kappa[@src][not(preceding-sibling::*)]//rho[@xml:id="id12"][not(preceding-sibling::*)]]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega> + <kappa/> + <iota xml:id="id1"/> + <upsilon xml:lang="en-GB"> + <zeta xml:lang="en-GB" xml:id="id2"/> + <phi name="123456789" xml:lang="no-nb" xml:id="id3"> + <xi xml:lang="en-GB" xml:id="id4"/> + <lambda xml:id="id5"> + <kappa abort="attribute" xml:lang="no-nb"/> + <xi xml:id="id6"> + <delta xml:id="id7"/> + <lambda attrib="attribute value" xml:id="id8"> + <psi xml:id="id9"> + <tau delete="123456789" xml:lang="en" xml:id="id10"/> + <xi xml:lang="no-nb" xml:id="id11"> + <kappa src="another attribute value"> + <rho xml:id="id12"> + <green>This text must be green</green> + </rho> + </kappa> + </xi> + </psi> + </lambda> + </xi> + </lambda> + </phi> + </upsilon> + </omega> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="nb"]//zeta[@object="content"][@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::tau[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/rho[@xml:id="id2"][not(preceding-sibling::*)]/omicron[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::lambda[not(following-sibling::*)]/eta[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="no"][@xml:id="id4"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::rho[@xml:lang="en-US"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="nb"> + <zeta object="content" xml:id="id1"/> + <tau> + <rho xml:id="id2"> + <omicron xml:lang="en-US" xml:id="id3"/> + <lambda> + <eta token="attribute" xml:lang="no" xml:id="id4"/> + <rho xml:lang="en-US"> + <green>This text must be green</green> + </rho> + </lambda> + </rho> + </tau> + </epsilon> + </tree> + </test> + <test> + <xpath>//*[@xml:id="id1"]//xi[starts-with(concat(@insert,"-"),"content-")][@xml:lang="en"][not(preceding-sibling::*)]/iota[contains(concat(@true,"$"),"blank$")][@xml:id="id2"][not(child::node())][following-sibling::mu[@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::mu)]//sigma[@xml:lang="en-US"][@xml:id="id4"][not(following-sibling::*)]/epsilon[@xml:lang="no-nb"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::pi[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]</xpath> + <tree> + <any xml:id="id1"> + <xi insert="content" xml:lang="en"> + <iota true="_blank" xml:id="id2"/> + <mu xml:lang="en-US" xml:id="id3"> + <sigma xml:lang="en-US" xml:id="id4"> + <epsilon xml:lang="no-nb" xml:id="id5"/> + <pi xml:lang="en-US" xml:id="id6"> + <green>This text must be green</green> + </pi> + </sigma> + </mu> + </xi> + </any> + </tree> + </test> + <test> + <xpath>//kappa[@xml:lang="en-US"]//lambda[contains(@att,"k")][@xml:lang="en-US"][not(preceding-sibling::*)]//gamma[not(preceding-sibling::*)][not(child::node())][following-sibling::theta[contains(@class,"ue")][@xml:lang="en-US"][@xml:id="id1"][not(following-sibling::*)]//iota[contains(@data,"00%")][@xml:id="id2"][not(preceding-sibling::*)][not(following-sibling::*)]//omega[contains(@src,"nk")][@xml:id="id3"]/beta[@attribute="solid 1px green"][not(following-sibling::*)]//phi[@desciption][@xml:id="id4"][not(preceding-sibling::*)][not(following-sibling::*)]//psi[@xml:lang="nb"][not(preceding-sibling::*)][not(child::node())][following-sibling::sigma[contains(concat(@false,"$"),"te-value$")][@xml:lang="en-US"][following-sibling::theta[@att][not(following-sibling::*)]//iota[contains(concat(@false,"$"),"e$")][@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]]][position() = 1]]</xpath> + <tree> + <kappa xml:lang="en-US"> + <lambda att="_blank" xml:lang="en-US"> + <gamma/> + <theta class="true" xml:lang="en-US" xml:id="id1"> + <iota data="100%" xml:id="id2"> + <omega src="_blank" xml:id="id3"> + <beta attribute="solid 1px green"> + <phi desciption="attribute" xml:id="id4"> + <psi xml:lang="nb"/> + <sigma false="attribute-value" xml:lang="en-US"/> + <theta att="this.nodeValue"> + <iota false="true" xml:lang="nb" xml:id="id5"> + <green>This text must be green</green> + </iota> + </theta> + </phi> + </beta> + </omega> + </iota> + </theta> + </lambda> + </kappa> + </tree> + </test> + <test> + <xpath>//xi[contains(concat(@att,"$"),"rue$")][@xml:lang="en-US"][@xml:id="id1"]//omega[@xml:id="id2"][not(preceding-sibling::*)][following-sibling::lambda[@and][preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][not(child::node())][following-sibling::sigma[@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::phi[starts-with(concat(@attr,"-"),"attribute-")][@xml:id="id4"][following-sibling::*[position()=3]][not(child::node())][following-sibling::nu[@xml:lang="en"][following-sibling::*[position()=2]][following-sibling::zeta[@desciption="attribute value"][@xml:id="id5"][not(child::node())][following-sibling::zeta[@token][@xml:lang="no-nb"][@xml:id="id6"][not(following-sibling::*)]//mu[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][following-sibling::tau[@xml:lang="en-GB"][@xml:id="id8"][following-sibling::*[position()=1]][following-sibling::omega[@xml:lang="nb"][@xml:id="id9"][preceding-sibling::*[position() = 2]]//xi[contains(@or,"true")][@xml:id="id10"][following-sibling::*[position()=1]][following-sibling::upsilon[@att][@xml:lang="no"][@xml:id="id11"][not(following-sibling::*)][position() = 1]][position() = 1]][position() = 1]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]</xpath> + <tree> + <xi att="true" xml:lang="en-US" xml:id="id1"> + <omega xml:id="id2"/> + <lambda and="another attribute value"/> + <sigma xml:id="id3"/> + <phi attr="attribute-value" xml:id="id4"/> + <nu xml:lang="en"/> + <zeta desciption="attribute value" xml:id="id5"/> + <zeta token="_blank" xml:lang="no-nb" xml:id="id6"> + <mu xml:lang="en-GB" xml:id="id7"/> + <tau xml:lang="en-GB" xml:id="id8"/> + <omega xml:lang="nb" xml:id="id9"> + <xi or="true" xml:id="id10"/> + <upsilon att="attribute" xml:lang="no" xml:id="id11"> + <green>This text must be green</green> + </upsilon> + </omega> + </zeta> + </xi> + </tree> + </test> + <test> + <xpath>//omega[@xml:id="id1"]//pi[contains(concat(@true,"$"),"ribute value$")][@xml:id="id2"][following-sibling::*[position()=2]][following-sibling::nu[@xml:lang="en-US"][@xml:id="id3"][not(child::node())][following-sibling::omicron[starts-with(@true,"attribute")][@xml:lang="en-GB"][not(following-sibling::*)]//psi[contains(@title,"e")][@xml:lang="en"][@xml:id="id4"][not(child::node())][following-sibling::lambda[@attribute][@xml:id="id5"][preceding-sibling::*[position() = 1]][position() = 1]]]]</xpath> + <tree> + <omega xml:id="id1"> + <pi true="attribute value" xml:id="id2"/> + <nu xml:lang="en-US" xml:id="id3"/> + <omicron true="attribute value" xml:lang="en-GB"> + <psi title="true" xml:lang="en" xml:id="id4"/> + <lambda attribute="this-is-att-value" xml:id="id5"> + <green>This text must be green</green> + </lambda> + </omicron> + </omega> + </tree> + </test> + <test> + <xpath>//kappa[@xml:id="id1"]//beta[@attribute][@xml:lang="en"][@xml:id="id2"][not(preceding-sibling::*)]//mu[starts-with(concat(@desciption,"-"),"true-")][not(preceding-sibling::*)][not(following-sibling::*)]/alpha[starts-with(concat(@insert,"-"),"true-")][@xml:lang="no"][@xml:id="id3"][following-sibling::upsilon[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]/zeta[@data="_blank"][@xml:lang="no-nb"][@xml:id="id5"]/psi[contains(concat(@attribute,"$"),"bute$")][@xml:lang="en-US"][@xml:id="id6"][following-sibling::omega[not(following-sibling::*)]//*[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::iota/zeta[@number="true"][@xml:lang="no"][@xml:id="id8"][not(following-sibling::*)]/xi[@xml:lang="no-nb"][@xml:id="id9"][not(child::node())][following-sibling::eta[@token][@xml:lang="en-US"][@xml:id="id10"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][position() = 1]]]][position() = 1]]</xpath> + <tree> + <kappa xml:id="id1"> + <beta attribute="attribute value" xml:lang="en" xml:id="id2"> + <mu desciption="true"> + <alpha insert="true" xml:lang="no" xml:id="id3"/> + <upsilon xml:id="id4"> + <zeta data="_blank" xml:lang="no-nb" xml:id="id5"> + <psi attribute="attribute" xml:lang="en-US" xml:id="id6"/> + <omega> + <any xml:id="id7"/> + <iota> + <zeta number="true" xml:lang="no" xml:id="id8"> + <xi xml:lang="no-nb" xml:id="id9"/> + <eta token="another attribute value" xml:lang="en-US" xml:id="id10"> + <green>This text must be green</green> + </eta> + </zeta> + </iota> + </omega> + </zeta> + </upsilon> + </mu> + </beta> + </kappa> + </tree> + </test> + <test> + <xpath>//nu[@xml:id="id1"]//tau[@class][@xml:lang="en"][not(preceding-sibling::*)]//alpha[following-sibling::alpha[contains(concat(@true,"$"),"tribute value$")][@xml:id="id2"][not(child::node())][following-sibling::alpha[@insert][preceding-sibling::*[position() = 2]][following-sibling::mu[not(following-sibling::*)]/*[starts-with(concat(@title,"-"),"true-")][@xml:lang="en"][not(following-sibling::*)]/theta[starts-with(concat(@object,"-"),"attribute-")][not(preceding-sibling::*)]/psi[not(child::node())][following-sibling::xi[@false][@xml:lang="en"][@xml:id="id3"][preceding-sibling::*[position() = 1]]//zeta[@or][@xml:lang="en-US"]//tau[@and="true"][not(following-sibling::*)]/gamma[starts-with(@token,"f")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::sigma[contains(@false,"9")][following-sibling::kappa[@xml:lang="nb"][not(following-sibling::*)]/eta[@xml:lang="no"][@xml:id="id4"]/delta[@xml:lang="no"][@xml:id="id5"][not(preceding-sibling::*)]//tau[contains(@insert,"bute value")][@xml:lang="en-GB"][not(following-sibling::*)]/eta[@content][@xml:lang="en"][@xml:id="id6"]][position() = 1]][position() = 1]][position() = 1]]]]</xpath> + <tree> + <nu xml:id="id1"> + <tau class="attribute-value" xml:lang="en"> + <alpha/> + <alpha true="attribute value" xml:id="id2"/> + <alpha insert="100%"/> + <mu> + <any title="true" xml:lang="en"> + <theta object="attribute"> + <psi/> + <xi false="solid 1px green" xml:lang="en" xml:id="id3"> + <zeta or="this-is-att-value" xml:lang="en-US"> + <tau and="true"> + <gamma token="false" xml:lang="en-US"/> + <sigma false="123456789"/> + <kappa xml:lang="nb"> + <eta xml:lang="no" xml:id="id4"> + <delta xml:lang="no" xml:id="id5"> + <tau insert="another attribute value" xml:lang="en-GB"> + <eta content="this.nodeValue" xml:lang="en" xml:id="id6"> + <green>This text must be green</green> + </eta> + </tau> + </delta> + </eta> + </kappa> + </tau> + </zeta> + </xi> + </theta> + </any> + </mu> + </tau> + </nu> + </tree> + </test> + <test> + <xpath>//kappa/kappa[not(preceding-sibling::*)]//iota[contains(@src,"od")][@xml:id="id1"][not(preceding-sibling::*)]//omicron[@false][@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)]/omega[@src="attribute value"][@xml:id="id3"][not(preceding-sibling::*)][not(following-sibling::*)]//beta[@content="this-is-att-value"][@xml:lang="en"][@xml:id="id4"][not(preceding-sibling::*)]/beta[contains(concat(@attrib,"$"),"e$")][@xml:lang="nb"][not(following-sibling::*)]//nu[not(following-sibling::*)]/alpha[@xml:lang="nb"][@xml:id="id5"][not(following-sibling::*)]/*[@att][@xml:id="id6"][not(preceding-sibling::*)]//delta[@xml:lang="en-GB"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]//xi[@object][@xml:lang="en-US"][not(preceding-sibling::*)][not(child::node())][following-sibling::psi[@name="solid 1px green"][@xml:lang="nb"]//chi[@xml:id="id8"][not(following-sibling::*)]//delta[@xml:lang="en"][@xml:id="id9"][following-sibling::gamma[contains(concat(@att,"$"),"attribute$")][@xml:lang="no-nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//alpha[contains(concat(@insert,"$"),"nk$")][position() = 1]]]</xpath> + <tree> + <kappa> + <kappa> + <iota src="this.nodeValue" xml:id="id1"> + <omicron false="content" xml:lang="en-US" xml:id="id2"> + <omega src="attribute value" xml:id="id3"> + <beta content="this-is-att-value" xml:lang="en" xml:id="id4"> + <beta attrib="true" xml:lang="nb"> + <nu> + <alpha xml:lang="nb" xml:id="id5"> + <any att="false" xml:id="id6"> + <delta xml:lang="en-GB" xml:id="id7"> + <xi object="attribute" xml:lang="en-US"/> + <psi name="solid 1px green" xml:lang="nb"> + <chi xml:id="id8"> + <delta xml:lang="en" xml:id="id9"/> + <gamma att="attribute" xml:lang="no-nb"> + <alpha insert="_blank"> + <green>This text must be green</green> + </alpha> + </gamma> + </chi> + </psi> + </delta> + </any> + </alpha> + </nu> + </beta> + </beta> + </omega> + </omicron> + </iota> + </kappa> + </kappa> + </tree> + </test> + <test> + <xpath>//epsilon[@xml:lang="no"][@xml:id="id1"]/*[contains(concat(@attrib,"$"),"rue$")][not(following-sibling::*)]//psi//xi[@xml:lang="no"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=1]][following-sibling::zeta[@insert="attribute"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//eta[@xml:id="id4"][not(preceding-sibling::*)][following-sibling::pi[@xml:lang="en"]/*[starts-with(@attrib,"this.nodeValue")][@xml:lang="en-GB"][@xml:id="id5"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]</xpath> + <tree> + <epsilon xml:lang="no" xml:id="id1"> + <any attrib="true"> + <psi> + <xi xml:lang="no" xml:id="id2"/> + <zeta insert="attribute" xml:id="id3"> + <eta xml:id="id4"/> + <pi xml:lang="en"> + <any attrib="this.nodeValue" xml:lang="en-GB" xml:id="id5"> + <green>This text must be green</green> + </any> + </pi> + </zeta> + </psi> + </any> + </epsilon> + </tree> + </test> + <test> + <xpath>//omicron[contains(concat(@content,"$"),"tribute value$")][@xml:id="id1"]/lambda[@xml:id="id2"][not(preceding-sibling::*)]/mu[@xml:lang="nb"][not(following-sibling::*)]//theta[@xml:lang="nb"][not(preceding-sibling::*)][not(following-sibling::*)]//kappa[@delete][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::kappa[@xml:id="id4"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]]</xpath> + <tree> + <omicron content="another attribute value" xml:id="id1"> + <lambda xml:id="id2"> + <mu xml:lang="nb"> + <theta xml:lang="nb"> + <kappa delete="this-is-att-value" xml:id="id3"/> + <kappa xml:id="id4"> + <green>This text must be green</green> + </kappa> + </theta> + </mu> + </lambda> + </omicron> + </tree> + </test> + <test> + <xpath>//zeta[@desciption][@xml:lang="no-nb"][@xml:id="id1"]/tau[@xml:lang="en-US"][@xml:id="id2"][not(preceding-sibling::*)][not(child::node())][following-sibling::eta[@xml:lang="no"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::tau[contains(@data,"lank")]//upsilon[@xml:id="id4"][not(following-sibling::*)]/omega[@xml:lang="en"][@xml:id="id5"][not(preceding-sibling::*)][following-sibling::alpha[@xml:lang="en-US"][@xml:id="id6"][following-sibling::*[position()=2]][following-sibling::phi[@xml:id="id7"][preceding-sibling::*[position() = 2]][following-sibling::*[position()=1]][following-sibling::omega[contains(concat(@title,"$"),"3456789$")][@xml:lang="no"][@xml:id="id8"][preceding-sibling::*[position() = 3]][not(following-sibling::*)]/alpha[@xml:id="id9"][not(following-sibling::*)]/psi[@delete="this-is-att-value"][@xml:lang="no"][not(preceding-sibling::*)]//chi[@attrib="123456789"][not(child::node())][following-sibling::epsilon[@xml:lang="no-nb"][@xml:id="id10"][preceding-sibling::*[position() = 1]]//omicron[contains(@attr,"e")][not(preceding-sibling::*)][not(following-sibling::*)]//chi[contains(@token,"89")]/psi[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::delta[@xml:lang="en-GB"][@xml:id="id11"]//alpha[@attr]/epsilon[@attr][@xml:id="id12"][not(following-sibling::*)]//omega[starts-with(concat(@content,"-"),"123456789-")][@xml:id="id13"][following-sibling::*[position()=2]][following-sibling::gamma[@xml:lang="no"][not(child::node())][following-sibling::iota[@xml:lang="no-nb"][not(following-sibling::*)]/xi[@att="_blank"][@xml:lang="en-GB"][@xml:id="id14"][not(preceding-sibling::*)]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <zeta desciption="solid 1px green" xml:lang="no-nb" xml:id="id1"> + <tau xml:lang="en-US" xml:id="id2"/> + <eta xml:lang="no" xml:id="id3"/> + <tau data="_blank"> + <upsilon xml:id="id4"> + <omega xml:lang="en" xml:id="id5"/> + <alpha xml:lang="en-US" xml:id="id6"/> + <phi xml:id="id7"/> + <omega title="123456789" xml:lang="no" xml:id="id8"> + <alpha xml:id="id9"> + <psi delete="this-is-att-value" xml:lang="no"> + <chi attrib="123456789"/> + <epsilon xml:lang="no-nb" xml:id="id10"> + <omicron attr="false"> + <chi token="123456789"> + <psi xml:lang="en-GB"/> + <delta xml:lang="en-GB" xml:id="id11"> + <alpha attr="100%"> + <epsilon attr="true" xml:id="id12"> + <omega content="123456789" xml:id="id13"/> + <gamma xml:lang="no"/> + <iota xml:lang="no-nb"> + <xi att="_blank" xml:lang="en-GB" xml:id="id14"> + <green>This text must be green</green> + </xi> + </iota> + </epsilon> + </alpha> + </delta> + </chi> + </omicron> + </epsilon> + </psi> + </alpha> + </omega> + </upsilon> + </tau> + </zeta> + </tree> + </test> + <test> + <xpath>//mu[@abort]/eta[@xml:id="id1"][not(preceding-sibling::*)][following-sibling::*[position()=2]][following-sibling::omega[@data][following-sibling::*[position()=1]][not(child::node())][following-sibling::*[@xml:id="id2"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//tau[@class="attribute-value"][@xml:lang="en-US"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::pi[@delete="123456789"][@xml:lang="nb"][@xml:id="id4"][preceding-sibling::*[position() = 1]]/tau[@xml:lang="en-US"][@xml:id="id5"]/delta[@xml:lang="nb"][@xml:id="id6"]/beta[@xml:lang="no"][@xml:id="id7"][not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[preceding-sibling::*[position() = 1]]/xi[@xml:id="id8"][not(preceding-sibling::*)]//xi[contains(concat(@abort,"$"),"solid 1px green$")][@xml:lang="no"][@xml:id="id9"][following-sibling::*[position()=4]][not(preceding-sibling::xi)][not(child::node())][following-sibling::psi[@insert][following-sibling::*[position()=3]][not(child::node())][following-sibling::nu[@string][not(child::node())][following-sibling::gamma[starts-with(concat(@number,"-"),"_blank-")][@xml:lang="en-US"][@xml:id="id10"][not(child::node())][following-sibling::phi[preceding-sibling::*[position() = 4]][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]][position() = 1]]</xpath> + <tree> + <mu abort="_blank"> + <eta xml:id="id1"/> + <omega data="attribute value"/> + <any xml:id="id2"> + <tau class="attribute-value" xml:lang="en-US" xml:id="id3"/> + <pi delete="123456789" xml:lang="nb" xml:id="id4"> + <tau xml:lang="en-US" xml:id="id5"> + <delta xml:lang="nb" xml:id="id6"> + <beta xml:lang="no" xml:id="id7"/> + <alpha> + <xi xml:id="id8"> + <xi abort="solid 1px green" xml:lang="no" xml:id="id9"/> + <psi insert="123456789"/> + <nu string="100%"/> + <gamma number="_blank" xml:lang="en-US" xml:id="id10"/> + <phi> + <green>This text must be green</green> + </phi> + </xi> + </alpha> + </delta> + </tau> + </pi> + </any> + </mu> + </tree> + </test> + <test> + <xpath>//omega/xi[@attrib][@xml:lang="nb"][@xml:id="id1"][not(following-sibling::*)]/mu[not(preceding-sibling::*)][not(following-sibling::*)]//pi[starts-with(@attr,"_b")][@xml:id="id2"][not(following-sibling::*)]/upsilon[starts-with(concat(@attr,"-"),"attribute-")][@xml:lang="en-US"][not(preceding-sibling::*)][following-sibling::tau[@false="content"][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//phi[@xml:lang="en"][@xml:id="id4"][following-sibling::*[position()=1]][following-sibling::mu[@xml:id="id5"][preceding-sibling::*[position() = 1]]//sigma[@xml:lang="no"][@xml:id="id6"]//pi[@token][@xml:id="id7"][following-sibling::iota[starts-with(concat(@attrib,"-"),"false-")][@xml:lang="en"][@xml:id="id8"][following-sibling::zeta/kappa[@name][@xml:lang="nb"][not(child::node())][following-sibling::mu[@title][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)][not(following-sibling::mu)]]]][position() = 1]][position() = 1]]</xpath> + <tree> + <omega> + <xi attrib="solid 1px green" xml:lang="nb" xml:id="id1"> + <mu> + <pi attr="_blank" xml:id="id2"> + <upsilon attr="attribute-value" xml:lang="en-US"/> + <tau false="content" xml:id="id3"> + <phi xml:lang="en" xml:id="id4"/> + <mu xml:id="id5"> + <sigma xml:lang="no" xml:id="id6"> + <pi token="true" xml:id="id7"/> + <iota attrib="false" xml:lang="en" xml:id="id8"/> + <zeta> + <kappa name="true" xml:lang="nb"/> + <mu title="this.nodeValue" xml:id="id9"> + <green>This text must be green</green> + </mu> + </zeta> + </sigma> + </mu> + </tau> + </pi> + </mu> + </xi> + </omega> + </tree> + </test> + <test> + <xpath>//alpha[@xml:lang="en-US"][@xml:id="id1"]/delta[contains(@abort,"lue")][@xml:lang="no-nb"][following-sibling::*[position()=4]][not(child::node())][following-sibling::sigma[@abort][@xml:lang="en-GB"][not(child::node())][following-sibling::epsilon[following-sibling::*[position()=2]][following-sibling::eta[@xml:lang="en-GB"][following-sibling::*[position()=1]][following-sibling::rho[@xml:id="id2"]//eta[@xml:lang="nb"][@xml:id="id3"][not(preceding-sibling::*)][not(child::node())][following-sibling::beta[@xml:lang="nb"][preceding-sibling::*[position() = 1]]/tau[contains(concat(@desciption,"$"),"e$")][@xml:lang="no-nb"][@xml:id="id4"][following-sibling::*[position()=1]][not(child::node())][following-sibling::sigma[preceding-sibling::*[position() = 1]][not(following-sibling::*)]/chi[@abort][@xml:lang="en-US"]/*[following-sibling::chi[@content][@xml:id="id5"][preceding-sibling::*[position() = 1]][following-sibling::theta[@xml:id="id6"][preceding-sibling::*[position() = 2]][not(following-sibling::*)][not(preceding-sibling::theta or following-sibling::theta)]/omicron[@name][@xml:lang="en"][@xml:id="id7"][not(preceding-sibling::*)][not(following-sibling::*)]/nu[contains(@delete,"ribute value")][@xml:lang="en"]/sigma[@xml:lang="en-GB"]/alpha[not(preceding-sibling::*)][not(child::node())][following-sibling::alpha[following-sibling::*[position()=1]][following-sibling::beta[@xml:lang="en"][preceding-sibling::*[position() = 2]]//kappa[@attr][@xml:lang="en-GB"][@xml:id="id8"][not(preceding-sibling::*)][following-sibling::xi[starts-with(concat(@false,"-"),"true-")][@xml:lang="no-nb"][not(following-sibling::*)]/*[contains(concat(@class,"$"),"lse$")][@xml:id="id9"][not(following-sibling::*)][not(preceding-sibling::any)][position() = 1]]][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]][position() = 1]]]</xpath> + <tree> + <alpha xml:lang="en-US" xml:id="id1"> + <delta abort="this-is-att-value" xml:lang="no-nb"/> + <sigma abort="this-is-att-value" xml:lang="en-GB"/> + <epsilon/> + <eta xml:lang="en-GB"/> + <rho xml:id="id2"> + <eta xml:lang="nb" xml:id="id3"/> + <beta xml:lang="nb"> + <tau desciption="false" xml:lang="no-nb" xml:id="id4"/> + <sigma> + <chi abort="this.nodeValue" xml:lang="en-US"> + <any/> + <chi content="attribute" xml:id="id5"/> + <theta xml:id="id6"> + <omicron name="attribute" xml:lang="en" xml:id="id7"> + <nu delete="attribute value" xml:lang="en"> + <sigma xml:lang="en-GB"> + <alpha/> + <alpha/> + <beta xml:lang="en"> + <kappa attr="another attribute value" xml:lang="en-GB" xml:id="id8"/> + <xi false="true" xml:lang="no-nb"> + <any class="false" xml:id="id9"> + <green>This text must be green</green> + </any> + </xi> + </beta> + </sigma> + </nu> + </omicron> + </theta> + </chi> + </sigma> + </beta> + </rho> + </alpha> + </tree> + </test> + <test> + <xpath>//sigma/theta[contains(concat(@data,"$"),"is.nodeValue$")][@xml:lang="nb"]//omega[@xml:lang="no"][@xml:id="id1"][following-sibling::eta[@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::kappa[@xml:lang="en-US"][@xml:id="id3"][not(following-sibling::*)]/beta[not(child::node())][following-sibling::epsilon[@xml:id="id4"][following-sibling::delta[@false][@xml:lang="no"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//epsilon[@xml:lang="no-nb"][not(following-sibling::*)][not(parent::*/*[position()=2])]//phi[contains(@name,"lue")][not(following-sibling::*)]/alpha[@xml:lang="en-GB"][not(child::node())][following-sibling::beta[@xml:lang="no"][@xml:id="id5"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::sigma[starts-with(@abort,"attrib")][@xml:lang="en"][@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::rho[preceding-sibling::*[position() = 3]][not(following-sibling::*)]/phi[starts-with(@attribute,"100%")][@xml:lang="en-US"][@xml:id="id7"][not(child::node())][following-sibling::pi[starts-with(@title,"tr")][@xml:lang="nb"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//lambda[@content][not(following-sibling::*)]/gamma[@attrib="this-is-att-value"][@xml:lang="en-US"][@xml:id="id8"][following-sibling::kappa[@xml:lang="en-GB"][@xml:id="id9"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//beta[starts-with(@and,"this.nodeV")][@xml:id="id10"][not(following-sibling::*)]]][position() = 1]][position() = 1]][position() = 1]]]]][position() = 1]]</xpath> + <tree> + <sigma> + <theta data="this.nodeValue" xml:lang="nb"> + <omega xml:lang="no" xml:id="id1"/> + <eta xml:id="id2"/> + <kappa xml:lang="en-US" xml:id="id3"> + <beta/> + <epsilon xml:id="id4"/> + <delta false="123456789" xml:lang="no"> + <epsilon xml:lang="no-nb"> + <phi name="this-is-att-value"> + <alpha xml:lang="en-GB"/> + <beta xml:lang="no" xml:id="id5"/> + <sigma abort="attribute" xml:lang="en" xml:id="id6"/> + <rho> + <phi attribute="100%" xml:lang="en-US" xml:id="id7"/> + <pi title="true" xml:lang="nb"> + <lambda content="solid 1px green"> + <gamma attrib="this-is-att-value" xml:lang="en-US" xml:id="id8"/> + <kappa xml:lang="en-GB" xml:id="id9"> + <beta and="this.nodeValue" xml:id="id10"> + <green>This text must be green</green> + </beta> + </kappa> + </lambda> + </pi> + </rho> + </phi> + </epsilon> + </delta> + </kappa> + </theta> + </sigma> + </tree> + </test> + <test> + <xpath>//delta[@xml:lang="nb"]//iota[starts-with(concat(@object,"-"),"attribute value-")][@xml:lang="en"]/xi[@xml:id="id1"][not(child::node())][following-sibling::sigma[@false][@xml:lang="en-GB"][preceding-sibling::*[position() = 1]]/pi[not(preceding-sibling::*)]//kappa[contains(@name,"100")][@xml:lang="en"][@xml:id="id2"][following-sibling::*[position()=2]][not(child::node())][following-sibling::chi[@xml:lang="no"][@xml:id="id3"][following-sibling::*[position()=1]][following-sibling::eta[@xml:id="id4"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//alpha[@class="123456789"][not(preceding-sibling::*)][not(child::node())][following-sibling::xi[@xml:lang="en-GB"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::gamma[@xml:id="id5"][following-sibling::*[position()=1]][not(child::node())][following-sibling::rho[contains(concat(@string,"$"),"alse$")][@xml:id="id6"][preceding-sibling::*[position() = 3]]/lambda[contains(concat(@or,"$"),"k$")][not(preceding-sibling::*)][following-sibling::xi[@xml:lang="no-nb"]/psi[@xml:id="id7"][not(preceding-sibling::*)][following-sibling::*[position()=6]][not(preceding-sibling::psi)][not(child::node())][following-sibling::chi[preceding-sibling::*[position() = 1]][following-sibling::*[position()=5]][following-sibling::nu[contains(@token,"e")][@xml:lang="nb"][@xml:id="id8"][preceding-sibling::*[position() = 2]][following-sibling::theta[@xml:lang="nb"][@xml:id="id9"][following-sibling::*[position()=3]][following-sibling::mu[@xml:lang="no"][@xml:id="id10"][preceding-sibling::*[position() = 4]][not(child::node())][following-sibling::delta[contains(@src,"ribute")][@xml:lang="nb"][@xml:id="id11"][following-sibling::eta[@xml:lang="en-US"]/upsilon[@xml:id="id12"]//mu[not(preceding-sibling::*)][not(following-sibling::*)]]]]]]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]][position() = 1]]]</xpath> + <tree> + <delta xml:lang="nb"> + <iota object="attribute value" xml:lang="en"> + <xi xml:id="id1"/> + <sigma false="this-is-att-value" xml:lang="en-GB"> + <pi> + <kappa name="100%" xml:lang="en" xml:id="id2"/> + <chi xml:lang="no" xml:id="id3"/> + <eta xml:id="id4"> + <alpha class="123456789"/> + <xi xml:lang="en-GB"/> + <gamma xml:id="id5"/> + <rho string="false" xml:id="id6"> + <lambda or="_blank"/> + <xi xml:lang="no-nb"> + <psi xml:id="id7"/> + <chi/> + <nu token="another attribute value" xml:lang="nb" xml:id="id8"/> + <theta xml:lang="nb" xml:id="id9"/> + <mu xml:lang="no" xml:id="id10"/> + <delta src="attribute" xml:lang="nb" xml:id="id11"/> + <eta xml:lang="en-US"> + <upsilon xml:id="id12"> + <mu> + <green>This text must be green</green> + </mu> + </upsilon> + </eta> + </xi> + </rho> + </eta> + </pi> + </sigma> + </iota> + </delta> + </tree> + </test> + <test> + <xpath>//omega[@xml:id="id1"]/iota[starts-with(concat(@token,"-"),"attribute-")][@xml:lang="nb"][@xml:id="id2"][following-sibling::mu[@att][@xml:id="id3"][preceding-sibling::*[position() = 1]][not(following-sibling::*)]//upsilon[@number="123456789"][not(preceding-sibling::*)][not(following-sibling::*)]//rho[not(child::node())][following-sibling::xi[starts-with(concat(@title,"-"),"true-")][@xml:id="id4"][following-sibling::*[position()=4]][not(child::node())][following-sibling::gamma[@false="true"][@xml:lang="nb"][@xml:id="id5"][following-sibling::chi[@xml:lang="en-US"][@xml:id="id6"][preceding-sibling::*[position() = 3]][not(child::node())][following-sibling::theta[@title][preceding-sibling::*[position() = 4]][following-sibling::alpha[starts-with(@token,"10")][@xml:lang="nb"][@xml:id="id7"]/delta/rho[@src="true"]//gamma[@xml:id="id8"][not(preceding-sibling::*)]/beta[@xml:lang="en-GB"]/alpha[@att][@xml:id="id9"]/upsilon[contains(@and,"tru")][not(preceding-sibling::*)]//chi[@xml:id="id10"][not(preceding-sibling::*)][not(following-sibling::*)]//epsilon[@data="_blank"][not(preceding-sibling::*)][following-sibling::*[position()=1]][not(child::node())][following-sibling::xi[@xml:id="id11"][not(following-sibling::*)][not(preceding-sibling::xi)]//chi[@false="this-is-att-value"][@xml:id="id12"][position() = 1]][position() = 1]][position() = 1]]][position() = 1]]]]</xpath> + <tree> + <omega xml:id="id1"> + <iota token="attribute-value" xml:lang="nb" xml:id="id2"/> + <mu att="false" xml:id="id3"> + <upsilon number="123456789"> + <rho/> + <xi title="true" xml:id="id4"/> + <gamma false="true" xml:lang="nb" xml:id="id5"/> + <chi xml:lang="en-US" xml:id="id6"/> + <theta title="100%"/> + <alpha token="100%" xml:lang="nb" xml:id="id7"> + <delta> + <rho src="true"> + <gamma xml:id="id8"> + <beta xml:lang="en-GB"> + <alpha att="this.nodeValue" xml:id="id9"> + <upsilon and="true"> + <chi xml:id="id10"> + <epsilon data="_blank"/> + <xi xml:id="id11"> + <chi false="this-is-att-value" xml:id="id12"> + <green>This text must be green</green> + </chi> + </xi> + </chi> + </upsilon> + </alpha> + </beta> + </gamma> + </rho> + </delta> + </alpha> + </upsilon> + </mu> + </omega> + </tree> + </test> + <test> + <xpath>//omicron[@src="attribute value"][@xml:lang="en-US"]//kappa[@xml:lang="en-US"][@xml:id="id1"][following-sibling::*[position()=3]][not(child::node())][following-sibling::beta[@xml:lang="en-US"][@xml:id="id2"][preceding-sibling::*[position() = 1]][not(child::node())][following-sibling::omega[starts-with(@false,"attribute val")][@xml:lang="no"][@xml:id="id3"][preceding-sibling::*[position() = 2]][not(child::node())][following-sibling::beta/mu[@xml:lang="no-nb"][@xml:id="id4"][not(preceding-sibling::*)]//chi[starts-with(@string,"so")][not(child::node())][following-sibling::phi[@xml:lang="en-US"]/*[@xml:id="id5"][not(preceding-sibling::*)]/nu[@xml:id="id6"][following-sibling::*[position()=1]][following-sibling::lambda[@xml:lang="en-GB"]/xi[@xml:lang="en-GB"][not(preceding-sibling::*)][following-sibling::epsilon[@xml:id="id7"][following-sibling::*[position()=1]][not(child::node())][following-sibling::omega[contains(@attribute,"00%")][@xml:id="id8"][preceding-sibling::*[position() = 2]][not(following-sibling::*)]//nu[starts-with(@name,"a")][not(preceding-sibling::*)][not(following-sibling::*)]/mu[@false][@xml:id="id9"][not(preceding-sibling::*)][not(following-sibling::*)]][position() = 1]]]]]][position() = 1]]</xpath> + <tree> + <omicron src="attribute value" xml:lang="en-US"> + <kappa xml:lang="en-US" xml:id="id1"/> + <beta xml:lang="en-US" xml:id="id2"/> + <omega false="attribute value" xml:lang="no" xml:id="id3"/> + <beta> + <mu xml:lang="no-nb" xml:id="id4"> + <chi string="solid 1px green"/> + <phi xml:lang="en-US"> + <any xml:id="id5"> + <nu xml:id="id6"/> + <lambda xml:lang="en-GB"> + <xi xml:lang="en-GB"/> + <epsilon xml:id="id7"/> + <omega attribute="100%" xml:id="id8"> + <nu name="attribute value"> + <mu false="attribute value" xml:id="id9"> + <green>This text must be green</green> + </mu> + </nu> + </omega> + </lambda> + </any> + </phi> + </mu> + </beta> + </omicron> + </tree> + </test> + <test> + <xpath>//pi[@xml:id="id1"]/upsilon[contains(concat(@insert,"$"),"23456789$")][@xml:lang="no-nb"][@xml:id="id2"][not(preceding-sibling::*)][following-sibling::*[position()=6]][following-sibling::lambda[contains(concat(@abort,"$"),"9$")][following-sibling::tau[@insert][following-sibling::omicron[@xml:lang="en-US"][following-sibling::lambda[@number="100%"][@xml:lang="en-US"][@xml:id="id3"][preceding-sibling::*[position() = 4]][not(following-sibling::lambda)][not(child::node())][following-sibling::chi[@xml:id="id4"][preceding-sibling::*[position() = 5]][following-sibling::*[position()=1]][not(child::node())][following-sibling::psi[@xml:id="id5"][not(following-sibling::*)]//mu[not(child::node())][following-sibling::epsilon[starts-with(concat(@attr,"-"),"attribute-")]][position() = 1]]][position() = 1]]][position() = 1]]]</xpath> + <tree> + <pi xml:id="id1"> + <upsilon insert="123456789" xml:lang="no-nb" xml:id="id2"/> + <lambda abort="123456789"/> + <tau insert="this.nodeValue"/> + <omicron xml:lang="en-US"/> + <lambda number="100%" xml:lang="en-US" xml:id="id3"/> + <chi xml:id="id4"/> + <psi xml:id="id5"> + <mu/> + <epsilon attr="attribute-value"> + <green>This text must be green</green> + </epsilon> + </psi> + </pi> + </tree> + </test> +</tests> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001-1.html new file mode 100644 index 00000000000..cadcf126f54 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001-1.html @@ -0,0 +1,11 @@ +<!doctype html> +001-1 +<script> +addEventListener("pageshow", + function(e) { + parent.events.push(e); + if (parent.events.length == 2) { + parent.do_test(); + } + }, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001-2.html new file mode 100644 index 00000000000..6387bc89c8f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001-2.html @@ -0,0 +1,5 @@ +<!doctype html> +001-2 +<script> +onload = function() {setTimeout(function() {history.go(-1)}, 500)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001.html new file mode 100644 index 00000000000..26a66304a04 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/001.html @@ -0,0 +1,30 @@ +<!doctype html> +<title>pageshow event from traversal</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="001-1.html"></iframe> +<script> +var t = async_test(); +var events = []; +var iframe = document.getElementsByTagName("iframe")[0]; + +onload = t.step_func(function() { + setTimeout(t.step_func( + function() { + assert_equals(iframe.contentDocument.readyState, "complete") + iframe.src = "001-2.html"; + }), 500); + onload = null; +}) + +do_test = t.step_func(function() { + assert_equals(events.length, 2); + events.forEach(function(e, i) { + phase = i ? "after" : "before"; + assert_equals(e.type, "pageshow", "type " + phase + " navigation"); + assert_equals(e.persisted, i == 0 ? false : true, "persisted " + phase + " navigation"); + t.done(); + }); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/MANIFEST new file mode 100644 index 00000000000..b3b6014f605 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/MANIFEST @@ -0,0 +1,16 @@ +support 001-1.html +support 001-2.html +001.html +support browsing_context_name-1.html +support browsing_context_name-2.html +support browsing_context_name-3.html +support browsing_context_name-4.html +browsing_context_name_cross_origin_2.html +browsing_context_name_cross_origin_3.html +browsing_context_name_cross_origin.html +browsing_context_name.html +events.html +hashchange_event.html +popstate_event.html +support unset_context_name-1.html +unset_context_name.html diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-1.html new file mode 100644 index 00000000000..85748a2ebcd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-1.html @@ -0,0 +1,6 @@ +document 1 +<script> +if (!parent.navigated) { + window.name = "test"; +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-2.html new file mode 100644 index 00000000000..b0c869046b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-2.html @@ -0,0 +1,4 @@ +document 2 +<script> +window.name = "test1"; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-3.html new file mode 100644 index 00000000000..e0c239744f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-3.html @@ -0,0 +1,6 @@ +document 3 +<script> +if (!parent.navigated) { + window.name = "test3"; +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-4.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-4.html new file mode 100644 index 00000000000..5d2dfa6bb8f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name-4.html @@ -0,0 +1,6 @@ +document 4 +<script> +if (!parent.navigated) { + window.name = "test4"; +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html new file mode 100644 index 00000000000..0159a36b22d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name.html @@ -0,0 +1,42 @@ +<!doctype html> +<title>Retaining window.name on history traversal</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<pre id="step_log"></pre> +<iframe id="test"></iframe> +<script> + +var t = async_test(undefined, {timeout:10000}); +var f = document.getElementById("test"); +var l = document.getElementById("step_log"); +var navigated = false; + +log = function(t) {l.textContent += ("\n" + t)} + +var steps = [ + function() {f.src = "browsing_context_name-1.html"}, + function() { + var navigated = true; + assert_equals(f.contentWindow.name, "test", "Initial load"); + setTimeout(next, 0); + }, + function() {f.src = "browsing_context_name-2.html"; setTimeout(next, 500)}, + function() { + assert_equals(f.contentWindow.name, "test1"); + setTimeout(next, 0); + }, + function() {history.back(); setTimeout(next, 500)}, + function() { + assert_equals(f.contentWindow.name, "test1", "After navigation"); + t.done(); + } +].map(function(x) {return t.step_func(function() {log("Step " + step); x()})}); + +var step = 0; +next = t.step_func(function() {steps[step++]()}); + +f.onload=next; + +onload = setTimeout(next, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html new file mode 100644 index 00000000000..b04eee66ecf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html @@ -0,0 +1,41 @@ +<!doctype html> +<title>Restoring window.name on cross-origin history traversal</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<pre id="step_log"></pre> +<iframe id="test"></iframe> +<script> + +var t = async_test(undefined, {timeout:10000}); +var f = document.getElementById("test"); +var l = document.getElementById("step_log"); +var navigated = false; + +log = function(t) {l.textContent += ("\n" + t)} + +var steps = [ + function() {f.src = "browsing_context_name-1.html"}, + function() { + var navigated = true; + assert_equals(f.contentWindow.name, "test", "Initial load"); + setTimeout(next, 0); + }, + function() {f.src = f.src.replace("http://", "http://www.").replace("browsing_context_name-1", "browsing_context_name-2");}, + function() { + setTimeout(next, 0); + }, + function() {history.back(); setTimeout(next, 500)}, + function() { + assert_equals(f.contentWindow.name, "test", "After navigation"); + t.done(); + } +].map(function(x) {return t.step_func(function() {log("Step " + step); x()})}); + +var step = 0; +next = t.step_func(function() {steps[step++]()}); + +f.onload=next; + +onload = setTimeout(next, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html new file mode 100644 index 00000000000..1a57e838ca1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html @@ -0,0 +1,47 @@ +<!doctype html> +<title>Restoring window.name on cross-origin history traversal</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<pre id="step_log"></pre> +<iframe id="test"></iframe> +<script> + +var t = async_test(undefined, {timeout:10000}); +var f = document.getElementById("test"); +var l = document.getElementById("step_log"); +var navigated = false; + +log = function(t) {l.textContent += ("\n" + t)} + +var steps = [ + function() {f.src = "browsing_context_name-1.html"}, + function() { + var navigated = true; + assert_equals(f.contentWindow.name, "test", "Initial load"); + setTimeout(next, 0); + }, + function() {f.src = "browsing_context_name-3.html"}, + function() { + var navigated = true; + assert_equals(f.contentWindow.name, "test3", "Initial load"); + setTimeout(next, 0); + }, + function() {f.src = f.src.replace("http://", "http://www.").replace("browsing_context_name-3", "browsing_context_name-2");}, + function() { + setTimeout(next, 0); + }, + function() {history.go(-2); setTimeout(next, 500)}, + function() { + assert_equals(f.contentWindow.name, "test3", "After navigation"); + t.done(); + } +].map(function(x) {return t.step_func(function() {log("Step " + step); x()})}); + +var step = 0; +next = t.step_func(function() {steps[step++]()}); + +f.onload=next; + +onload = setTimeout(next, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html new file mode 100644 index 00000000000..0f07027322c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_3.html @@ -0,0 +1,47 @@ +<!doctype html> +<title>Restoring window.name on cross-origin history traversal</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<pre id="step_log"></pre> +<iframe id="test"></iframe> +<script> +var t = async_test(undefined, {timeout:10000}); +var f = document.getElementById("test"); +var l = document.getElementById("step_log"); +var navigated = false; + +log = function(t) {l.textContent += ("\n" + t)} + +var steps = [ + function() {f.src = "browsing_context_name-1.html"}, + function() { + var navigated = true; + assert_equals(f.contentWindow.name, "test", "Initial load"); + setTimeout(next, 0); + }, + function() {f.src = "browsing_context_name-3.html"}, + function() { + var navigated = true; + assert_equals(f.contentWindow.name, "test3", "Initial load"); + setTimeout(next, 0); + }, + function() {f.src = f.src.replace("http://", "http://www.").replace("browsing_context_name-1", "browsing_context_name-2");}, + function() {f.src = f.src.replace("http://www.", "http://").replace("browsing_context_name-2", "browsing_context_name-4");}, + function() { + assert_equals(f.contentWindow.name, "test3", "After navigation"); + history.go(-3); setTimeout(next, 500) + }, + function() { + assert_equals(f.contentWindow.name, "test3", "After navigation"); + t.done(); + } +].map(function(x) {return t.step_func(function() {log("Step " + step + " " + f.contentWindow.location); x()})}); + +var step = 0; +next = t.step_func(function() {steps[step++]()}); + +f.onload=next; + +onload = setTimeout(next, 0); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/events.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/events.html new file mode 100644 index 00000000000..d5ff83fac07 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/events.html @@ -0,0 +1,151 @@ +<!doctype html> +<title> PageTransitionEffect Event </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +test(function() { + var e = new PageTransitionEvent("pageshow", {persisted:false, cancelable:false, bubbles:false}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); + assert_false(e.persisted, "persisted"); +}, "Constructing pageshow event"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {persisted:false, cancelable:false, bubbles:false}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event"); + +test(function() { + var e = new PageTransitionEvent("pageshow", {persisted:true}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_true(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pageshow event, persisted true"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {persisted:true}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_true(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event, persisted true"); + +test(function() { + var e = new PageTransitionEvent("pageshow", {}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pageshow event, empty options"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event, empty options"); + +test(function() { + var e = new PageTransitionEvent("pageshow"); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pageshow event, missing options"); + +test(function() { + var e = new PageTransitionEvent("pagehide"); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event, missing options"); + +test(function() { + var e = new PageTransitionEvent("pageshow", {persisted:null}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pageshow event, persisted:null"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {persisted:null}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event, persisted:null"); + +test(function() { + var e = new PageTransitionEvent("pageshow", {persisted:undefined}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pageshow event, persisted:undefined"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {persisted:undefined}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event, persisted:undefined"); + +test(function() { + var e = new PageTransitionEvent("pageshow", {bubbles:true}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.persisted, "persisted"); + assert_true(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pageshow event, bubbles:true"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {bubbles:true}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_true(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); +}, "Constructing pagehide event, bubbles:true"); + +test(function() { + var e = new PageTransitionEvent("pageshow", {cancelable:true}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pageshow"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_true(e.cancelable, "cancelable"); +}, "Constructing pageshow event, cancelable:true"); + +test(function() { + var e = new PageTransitionEvent("pagehide", {cancelable:true}); + assert_true(e instanceof PageTransitionEvent); + assert_equals(e.type, "pagehide"); + assert_false(e.persisted, "persisted"); + assert_false(e.bubbles, "bubbles"); + assert_true(e.cancelable, "cancelable"); +}, "Constructing pagehide event, cancelable:true"); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/hashchange_event.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/hashchange_event.html new file mode 100644 index 00000000000..4b701ad04e2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/hashchange_event.html @@ -0,0 +1,43 @@ +<!doctype html> +<title>Queue a task to fire hashchange event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +t = async_test(); +window.onload = t.step_func(function () { + if (location.href.toString().indexOf("#") > -1) { + location.href = location.href.replace(/#.*$/,''); + return; + } + var root = location.href; + var oldURLs = []; + var newURLs = []; + + var timer = null; + + location.hash = 'foo'; + window.onhashchange = t.step_func(function (e) { + oldURLs.push(e.oldURL); + newURLs.push(e.newURL); + if (newURLs.length === 2) { + check_result(); + } else if (timer === null) { + timer = setTimeout(function() {check_result()}, 500); + } + }) + + check_result = t.step_func(function() { + clearTimeout(timer); + try { + assert_array_equals([root, root+"#foo"], oldURLs, "e.newURL"); + assert_array_equals([root+"#foo", root+"#bar"], newURLs, "e.newURL"); + t.done(); + } finally { + location.hash = ""; + } + }); + + location.hash = 'bar'; +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/popstate_event.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/popstate_event.html new file mode 100644 index 00000000000..7630b991843 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/popstate_event.html @@ -0,0 +1,40 @@ +<!doctype html> +<title>Queue a task to fire popstate event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +t = async_test(); +window.onload = t.step_func(function () { + var states = []; + + var timer = null; + + history.pushState("a", "State a", "/a"); + history.pushState("b", "State b", "/b"); + + history.back(); + window.onpopstate = t.step_func(function (e) { + states.push(e.state); + + if (states.length === 2) { + check_result(); + } else if (timer === null) { + timer = setTimeout(function() {check_result()}, 500); + } + }) + + check_result = t.step_func(function() { + clearTimeout(timer); + try { + assert_array_equals(states, ["a", null]); + t.done(); + } finally { + location.hash = ""; + } + }); + + setTimeout(function() {history.back()}, 0); + +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html new file mode 100644 index 00000000000..d3d67d0f826 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name-1.html @@ -0,0 +1,7 @@ +<!doctype html> +<title>window.name after navigating to a different origin</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +test(function() {assert_equals(window.name, "")}) +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name.html new file mode 100644 index 00000000000..6814ed50e2f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/history-traversal/unset_context_name.html @@ -0,0 +1,7 @@ +<!doctype html> +<!-- test must be run in a top level browsing context --> +<title>window.name after navigating to a different origin</title> +<script> +window.name = "test_window"; +location.href = location.href.replace("http://", "http://www.").replace("unset_context_name", "unset_context_name-1"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-1.html new file mode 100644 index 00000000000..df8d884e8d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-1.html @@ -0,0 +1,7 @@ +<!doctype html> +001-1 +<script> +addEventListener("unload", function() { + location = location.href.replace("http://", "http://www.").replace(/\d{3}-\d\.html/, "001-3.html"); +}, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-2.html new file mode 100644 index 00000000000..1cffc59b26c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-2.html @@ -0,0 +1,5 @@ +<!doctype html> +001-2 +<script> +parent.postMessage("001-2", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-3.html new file mode 100644 index 00000000000..5f1310e0744 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-3.html @@ -0,0 +1,5 @@ +<!doctype html> +001-3.html +<script> +parent.postMessage("001-3", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001.html new file mode 100644 index 00000000000..7d99f6beb53 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001.html @@ -0,0 +1,20 @@ +<!doctype html> +<title>Cross-origin navigation started from unload handler</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="001-1.html"></iframe> +<script> +var t = async_test(); +onload = t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + var new_src = iframe.src.replace(/\d{3}-\d\.html/, "001-2.html"); + iframe.src = new_src; +}); + +onmessage = t.step_func(function(e) { + assert_equals(e.data, "001-2"); + t.done(); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002-1.html new file mode 100644 index 00000000000..716e182ad53 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002-1.html @@ -0,0 +1,5 @@ +<!doctype html> +002-1 +<script> +parent.postMessage("002-1", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002-2.html new file mode 100644 index 00000000000..a29a6bbcdb7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002-2.html @@ -0,0 +1,5 @@ +<!doctype html> +002-2 +<script> +parent.postMessage("002-2", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002.html new file mode 100644 index 00000000000..0efc7016fc1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/002.html @@ -0,0 +1,23 @@ +<!doctype html> +<title>Multiple simultaneous navigations</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="about:blank"></iframe> +<script> +var t = async_test(); +onload = t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + + setTimeout(t.step_func(function() { + iframe.src = "002-1.html?pipe=trickle(d1)"; + setTimeout(t.step_func(function(){iframe.src = "002-2.html"}), 500); + }), 100); +}); + +onmessage = t.step_func(function(e) { + assert_equals(e.data, "002-2"); + t.done(); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-1.html new file mode 100644 index 00000000000..4d2229eb515 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-1.html @@ -0,0 +1,7 @@ +<!doctype html> +<script> +onload = function() { + parent.postMessage("003-1", "*"); + setTimeout(function() {location = "003-2.html";}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-2.html new file mode 100644 index 00000000000..827a069479f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-2.html @@ -0,0 +1,9 @@ +<!doctype html> +003-2 +<script> +onload = function() { + parent.postMessage("003-2", "*") + setTimeout(function() {history.go(-1)}) +} +onunload = function() {location = "003-3.html"} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-3.html new file mode 100644 index 00000000000..8b26c896fdb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-3.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +parent.postMessage("003-3", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003.html new file mode 100644 index 00000000000..f437150960a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Navigation from unload whilst traversing history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="003-1.html"></iframe> +<script> +var t = async_test(); + +var pages = []; +var iframe = document.getElementsByTagName("iframe")[0]; + + +onmessage = t.step_func(function(e) { + pages.push(e.data); + if(pages.length == 3) { + assert_array_equals(pages, ["003-1", "003-2", "003-1"]); + t.done(); + iframe.parentNode.removeChild(iframe); + } +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html new file mode 100644 index 00000000000..625f98bf32c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-1.html @@ -0,0 +1,7 @@ +<!doctype html> +<script> +onload = function() { + parent.postMessage("003-1", "*"); + setTimeout(function() {location = location.replace("http://", "http://www.").replace("004-1.html", "004-2.html");}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-2.html new file mode 100644 index 00000000000..f2ef83ee1a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-2.html @@ -0,0 +1,9 @@ +<!doctype html> +003-2 +<script> +onload = function() { + parent.postMessage("004-2", "*") + setTimeout(function() {history.go(-1)}) +} +onunload = function() {location = "004-3.html"} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-3.html new file mode 100644 index 00000000000..c98711ae980 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004-3.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +parent.postMessage("004-3", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004.html new file mode 100644 index 00000000000..dddde4918b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/004.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Navigation from unload whilst traversing cross-origin history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="004-1.html"></iframe> +<script> +var t = async_test(); + +var pages = []; +var iframe = document.getElementsByTagName("iframe")[0]; + + +onmessage = t.step_func(function(e) { + pages.push(e.data); + if(pages.length == 3) { + assert_array_equals(pages, ["004-1", "004-2", "004-1"]); + t.done(); + iframe.parentNode.removeChild(iframe); + } +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html new file mode 100644 index 00000000000..7efad8d6cde --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/005.html @@ -0,0 +1,16 @@ +<!doctype html> +<title>Link with onclick navigation and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe name="test"></iframe> +<a target="test" onclick="document.getElementById('test').contentWindow.location='click.html'" href="href.html">Test</a> +<script> +var t = async_test(); +t.step(function() {document.links[0].click()}); +onmessage = t.step_func( + function(e) { + assert_equals(e.data, "href"); + t.done(); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/006.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/006.html new file mode 100644 index 00000000000..1e7aa20209c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/006.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Link with onclick form submit and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe name="test"></iframe> +<form target="test" action="click.html"></form> +<a target="test" onclick="document.forms[0].submit()" href="href.html">Test</a> +<script> +var t = async_test(); +t.step(function() {document.links[0].click()}); +onmessage = t.step_func( + function(e) { + assert_equals(e.data, "href"); + t.done(); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/007.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/007.html new file mode 100644 index 00000000000..d4bcfc29032 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/007.html @@ -0,0 +1,16 @@ +<!doctype html> +<title>Link with onclick javascript url and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<a target="test" onclick="document.getElementById('test').contentWindow.location = 'javascript:\'abc<script>parent.postMessage("click", "*")</script>\'';" href="href.html">Test</a> +<script> +var t = async_test(); +t.step(function() {document.getElementsByTagName("a")[0].click()}); +onmessage = t.step_func( + function(e) { + assert_equals(e.data, "href"); + t.done(); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/008.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/008.html new file mode 100644 index 00000000000..7d1495a0856 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/008.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Link with onclick form submit to javascript url and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<form target="test" action="javascript:'<script>parent.postMessage("click", "*")</script>'"></form> +<a target="test" onclick="document.forms[0].submit()" href="href.html">Test</a> +<script> +var t = async_test(); +t.step(function() {document.getElementsByTagName("a")[0].click()}); +onmessage = t.step_func( + function(e) { + assert_equals(e.data, "href"); + t.done(); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/009.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/009.html new file mode 100644 index 00000000000..0fcd1d37f5c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/009.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Link with onclick form submit to javascript url with document.write and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<form target="test" action="javascript:(function() {document.write('<script>parent.postMessage("write", "*")</script>'); return '<script>parent.postMessage("click", "*")</script>'})()"></form> +<a target="test" onclick="document.forms[0].submit()" href="href.html">Test</a> +<script> +var t = async_test(); +var events = []; +t.step(function() { + document.getElementsByTagName("a")[0].click()}); +onmessage = t.step_func( + function(e) { + events.push(e.data); + if (events.length === 2) { + assert_array_equals(events, ["write", "href"]); + t.done(); + } + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/010.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/010.html new file mode 100644 index 00000000000..3917cd16e55 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/010.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Link with onclick form submit to javascript url with delayed document.write and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<form target="test" action="javascript:(function() {var x = new XMLHttpRequest(); x.open('GET', 'blank.html?pipe=trickle(d2)', false); x.send(); document.write('<script>parent.postMessage("write", "*")</script>'); return '<script>parent.postMessage("click", "*")</script>'})()"></form> +<a target="test" onclick="document.forms[0].submit()" href="href.html">Test</a> +<script> +var t = async_test(undefined, {timeout:4000}); +t.step(function() {document.getElementsByTagName("a")[0].click()}); +onmessage = t.step_func( + function(e) { + assert_equals(e.data, "href"); + t.done(); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/011.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/011.html new file mode 100644 index 00000000000..fe6b8dbc356 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/011.html @@ -0,0 +1,21 @@ +<!doctype html> +<title>Link with onclick navigation to javascript url with document.write and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<a target="test" onclick="javascript:(function() {document.write('<script>parent.postMessage("write", "*")</script>'); return '<script>parent.postMessage("click", "*")</script>'})()" href="href.html">Test</a> +<script> +var t = async_test(); +var events = []; +t.step(function() { + document.getElementsByTagName("a")[0].click()}); +onmessage = t.step_func( + function(e) { + events.push(e.data); + if (events.length === 2) { + assert_array_equals(events, ["write", "href"]); + t.done(); + } + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/012.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/012.html new file mode 100644 index 00000000000..4c595769ee2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/012.html @@ -0,0 +1,16 @@ +<!doctype html> +<title>Link with onclick navigation to javascript url with delayed document.write and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<a target="test" onclick="javascript:(function() {var x = new XMLHttpRequest(); x.open('GET', 'blank.html?pipe=trickle(d2)', false); x.send(); document.write('write<script>parent.postMessage("write", "*")</script>'); return '<script>parent.postMessage("click", "*")</script>'})()" href="href.html">Test</a> +<script> +var t = async_test(undefined, {timeout:4000}); +t.step(function() {document.getElementsByTagName("a")[0].click()}); +onmessage = t.step_func( + function(e) { + assert_equals(e.data, "href"); + t.done(); + }); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/013.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/013.html new file mode 100644 index 00000000000..a93c5f2dbed --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/013.html @@ -0,0 +1,20 @@ +<!doctype html> +<title>Link with onclick navigation to javascript url with delayed document.write and href navigation </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<a target="test" href="javascript:parent.events.push('javascript');">Test</a> +<script> +var t = async_test(undefined, {timeout:4000}); +var events = []; +t.step(function() { + document.getElementsByTagName("a")[0].click(); + events.push('after script'); +}); +onload = t.step_func(function() { + //assuming the order is sync + assert_array_equals(events, ['javascript', 'after script']); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html new file mode 100644 index 00000000000..6e4399e67d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/014.html @@ -0,0 +1,21 @@ +<!doctype html> +<title> Link with javascript onclick form submission script order </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<form action="javascript:parent.events.push('submit')"></form> +<a target="test" onclick="document.forms[0].submit()">Test</a> +<script> +var t = async_test(undefined, {timeout:4000}); +var events = []; +t.step(function() { + document.getElementsByTagName("a")[0].click(); + events.push('after script'); +}); +onload = t.step_func(function() { + //assuming the order is sync + assert_array_equals(events, ['javascript', 'after script']); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html new file mode 100644 index 00000000000..33dd4538c5f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/015.html @@ -0,0 +1,20 @@ +<!doctype html> +<title> Link with javascript onclick and href script order </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe id="test" name="test"></iframe> +<a target="test" onclick="parent.events.push('click');" href="javascript:parent.events.push('href')">Test</a> +<script> +var t = async_test(undefined, {timeout:4000}); +var events = []; +t.step(function() { + document.getElementsByTagName("a")[0].click(); + events.push('after script'); +}); +onload = t.step_func(function() { + //assuming the order is sync + assert_array_equals(events, ['click', 'href', 'after script']); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/MANIFEST new file mode 100644 index 00000000000..0467aa3b417 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/MANIFEST @@ -0,0 +1,42 @@ +support 001-1.html +support 001-2.html +support 001-3.html +http 001.html +support 002-1.html +support 002-2.html +002.html +support 003-1.html +support 003-2.html +support 003-3.html +003.html +support 004-1.html +support 004-2.html +support 004-3.html +004.html +005.html +006.html +007.html +008.html +009.html +010.html +011.html +012.html +013.html +014.html +015.html +support blank.html +support child_navigates_parent_location-1.html +support child_navigates_parent_location-2.html +support child_navigates_parent_location-3.html +child_navigates_parent_location.html +support child_navigates_parent_submit-1.html +support child_navigates_parent_submit-2.html +support child_navigates_parent_submit-3.html +child_navigates_parent_submit.html +support click.html +support href.html +support navigation_unload_data_url-1.html +navigation_unload_data_url.html +support navigation_unload_same_origin-1.html +navigation_unload_same_origin.html +support slice-and-dice.php diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/blank.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/blank.html new file mode 100644 index 00000000000..c50eddd41fa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/blank.html @@ -0,0 +1 @@ +<!doctype html> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-1.html new file mode 100644 index 00000000000..66afcff22ea --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-1.html @@ -0,0 +1,3 @@ +<!doctype html> +<script>parent.postMessage("initial", "*")</script> +<iframe src="child_navigates_parent_location-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-2.html new file mode 100644 index 00000000000..746cf4b0ffc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-2.html @@ -0,0 +1,5 @@ +<!doctype html> +<script> +parent.parent.postMessage("inner", "*"); +parent.location = "child_navigates_parent_location-3.html" +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-3.html new file mode 100644 index 00000000000..bb8ba4e6989 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location-3.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +parent.postMessage("destination", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html new file mode 100644 index 00000000000..9111232e26e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_location.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Child document navigating parent via location </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var events = []; +onmessage = t.step_func(function(e) { + events.push(e.data); + if (events.length == 3) { + assert_array_equals(events, ["initial", "inner", "destination"]); + t.done(); + } +}); +</script> +<iframe src="child_navigates_parent_location-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-1.html new file mode 100644 index 00000000000..cc861667015 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-1.html @@ -0,0 +1,3 @@ +<!doctype html> +<script>parent.postMessage("initial", "*")</script> +<iframe src="child_navigates_parent_submit-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-2.html new file mode 100644 index 00000000000..34e513de969 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-2.html @@ -0,0 +1,6 @@ +<!doctype html> +<form action="child_navigates_parent_submit-3.html" target="_parent"></form> +<script> +parent.parent.postMessage("inner", "*"); +document.forms[0].submit() +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-3.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-3.html new file mode 100644 index 00000000000..bb8ba4e6989 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit-3.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +parent.postMessage("destination", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html new file mode 100644 index 00000000000..d491a26c1ce --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/child_navigates_parent_submit.html @@ -0,0 +1,18 @@ +<!doctype html> +<title>Child document navigating parent via submit </title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var events = []; +onmessage = t.step_func(function(e) { + events.push(e.data); + if (events.length == 3) { + assert_array_equals(events, ["initial", "inner", "destination"]); + + t.done(); + } +}); +</script> +<iframe src="child_navigates_parent_submit-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/click.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/click.html new file mode 100644 index 00000000000..8cb03b74d5e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/click.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +parent.postMessage("click", "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/href.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/href.html new file mode 100644 index 00000000000..eccadadf41a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/href.html @@ -0,0 +1,5 @@ +<!doctype html> +<script> +parent.postMessage("href", "*"); +</script> +href diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-1.html new file mode 100644 index 00000000000..8c412e657e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-1.html @@ -0,0 +1,7 @@ +<!doctype html> +001-1 +<script> +addEventListener("unload", function() { + location = "data:text/html,unload<script>parent.postMessage('fail', '*');<\/script>"; +}, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html new file mode 100644 index 00000000000..7a8be3e917d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url.html @@ -0,0 +1,20 @@ +<!doctype html> +<title>Same-origin navigation started from unload handler</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="navigation_unload_data_url-1.html"></iframe> +<script> +var t = async_test(); +onload = t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + var new_src = "data:text/html,load<script>parent.postMessage('pass', '*')<\/script>"; + iframe.src = new_src; +}); + +onmessage = t.step_func(function(e) { + assert_equals(e.data, "pass"); + t.done(); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-1.html new file mode 100644 index 00000000000..4b52fe3cfba --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-1.html @@ -0,0 +1,7 @@ +<!doctype html> +001-1 +<script> +addEventListener("unload", function() { + location = location.href.replace(/[^\/\.]*\.html/, "001-3.html"); +}, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html new file mode 100644 index 00000000000..b75409cc8ad --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin.html @@ -0,0 +1,20 @@ +<!doctype html> +<title>Same-origin navigation started from unload handler</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe src="navigation_unload_same_origin-1.html"></iframe> +<script> +var t = async_test(); +onload = t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + var new_src = iframe.src.replace(/[^\/\.]*\.html/, "001-2.html"); + iframe.src = new_src; +}); + +onmessage = t.step_func(function(e) { + assert_equals(e.data, "001-3"); + t.done(); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/001.html new file mode 100644 index 00000000000..32599bbc500 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/001.html @@ -0,0 +1,16 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: Updating document address</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +test(function() { + assert_equals(location.hash, "", "Page must be loaded with no hash") + var original_location = location.href; + location.hash = "test"; + assert_equals(location.hash, "#test"); + assert_equals(location.href, original_location + "#test"); + location.hash = "" +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/002.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/002.html new file mode 100644 index 00000000000..92bfd634155 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/002.html @@ -0,0 +1,21 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: Updating document address twice</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +test(function() { + assert_equals(location.hash, "", "Page must be loaded with no hash") + var original_location = location.href; + location.hash = "test"; + assert_equals(location.hash, "#test"); + assert_equals(location.href, original_location + "#test"); + + location.hash = "test1"; + assert_equals(location.hash, "#test1"); + assert_equals(location.href, original_location + "#test1"); + + location.hash = ""; +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html new file mode 100644 index 00000000000..200a6dc3455 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/003.html @@ -0,0 +1,25 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: Updating scroll position</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"></div> +<div id="test">scroll 1</div> +<div style="height:10000px">Filler</div> +<div id="test1">scroll 2</div> +<script> +test(function() { + assert_equals(document.body.scrollTop, 0); + location.hash = "test"; + + var scroll1 = document.body.scrollTop; + assert_true(scroll1 > 0); + + location.hash = "test1"; + var scroll2 = document.body.scrollTop; + assert_true(scroll2 > scroll1); + + location.hash = "" +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html new file mode 100644 index 00000000000..950172d7b99 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/004.html @@ -0,0 +1,23 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: hashchange event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"></div> +<script> +var t = async_test(); +t.step(function() { + assert_equals(location.hash, "", "Page must be loaded with no hash"); + location.hash = "test"; + + addEventListener("hashchange", + t.step_func(function(e) { + assert_equals(e.target, window); + assert_equals(e.type, "hashchange"); + assert_true(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); + t.done(); + }), true) +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/005.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/005.html new file mode 100644 index 00000000000..f0761a64f62 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/005.html @@ -0,0 +1,23 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: hashchange event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"></div> +<script> +var t = async_test(); +t.step(function() { + var original_url = location.href; + assert_equals(location.hash, "", "Page must be loaded with no hash"); + location.hash = "test"; + + addEventListener("hashchange", + t.step_func(function(e) { + assert_equals(e.oldURL, original_url, "oldURL property"); + assert_equals(e.newURL, location.href, "newURL property"); + location.hash = ""; + t.done(); + }), true); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/006.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/006.html new file mode 100644 index 00000000000..a65b9eb4a2c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/006.html @@ -0,0 +1,34 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: hashchange event multiple changes old/newURL</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"></div> +<script> +var t = async_test(); +t.step(function() { + var original_url = location.href; + assert_equals(location.hash, "", "Page must be loaded with no hash"); + location.hash = "test"; + + var count = 0; + var mid_url = location.href; + + addEventListener("hashchange", + t.step_func(function(e) { + if (count === 0) { + assert_equals(e.oldURL, original_url, "oldURL property first update"); + assert_equals(e.newURL, mid_url, "newURL property first update"); + count = 1; + } else if (count === 1) { + assert_equals(e.oldURL, mid_url, "oldURL property second update"); + assert_equals(e.newURL, location.href, "newURL property second update"); + location.hash = ""; + t.done(); + } + }), true); + + location.hash = "test1"; +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/007.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/007.html new file mode 100644 index 00000000000..22c91268b25 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/007.html @@ -0,0 +1,36 @@ +<!doctype html> +<!-- this tests the spec as it hopefully will be once bug https://www.w3.org/Bugs/Public/show_bug.cgi?id=17155 is fixed --> +<title>Fragment Navigation: hashchange event multiple changes old/newURL</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<div id="log"></div> +<script> +var t = async_test(undefined, {timeout:30000}); +t.step(function() { + var original_url = location.href; + assert_equals(location.hash, "", "Page must be loaded with no hash"); + + var count = 0; + + location.hash = "test"; + + hashes = []; + + addEventListener("hashchange", + t.step_func(function(e) { + if (count < 1000) { + location.hash = "test" + count++; + hashes.push(location.hash); + } else if (count === 1000) { + expected = []; + for (var i=0; i<1000; i++) { + expected.push("#test" + i); + } + assert_array_equals(hashes, expected); + location.hash = ""; + t.done(); + } + }), true); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/MANIFEST new file mode 100644 index 00000000000..eaa8e6d6165 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/MANIFEST @@ -0,0 +1,7 @@ +001.html +002.html +003.html +004.html +005.html +006.html +007.html diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/MANIFEST new file mode 100644 index 00000000000..f778067951c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/MANIFEST @@ -0,0 +1,33 @@ +support 001-1.html +support 001a.html +support 001b.html +001.html +support 002-1.html +support 002a.html +support 002b.html +002.html +support 003-1.html +support 003a.html +support 003b.html +003.html +support 004-1.html +support 004a.html +support 004b.html +004.html +support 005-1.html +support 005a.html +support 005b.html +005.html +base.html +support beforeunload-on-history-back-1.html +beforeunload-on-history-back.html +support beforeunload-on-navigation-of-parent-1.html +support beforeunload-on-navigation-of-parent-2.html +beforeunload-on-navigation-of-parent.html +support navigation-within-beforeunload-1.html +support navigation-within-beforeunload-2.html +navigation-within-beforeunload.html +support pagehide-on-history-forward-1.html +pagehide-on-history-forward.html +dir prompt +dir unload diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/base.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/base.html new file mode 100644 index 00000000000..70c07cba4ca --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/base.html @@ -0,0 +1,14 @@ +<!doctype html> +Base +<script> +onpagehide = function() { + if(top.base_hide) { + top.base_hide(); + } +} +onpageshow = function() { +if (top.base_show) { + top.base_show(); +} +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back-1.html new file mode 100644 index 00000000000..4403cfa8e91 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back-1.html @@ -0,0 +1,5 @@ +<!doctype html> +001-1 +<script> +addEventListener("beforeunload", function() {top.t.step(function() {top.beforeunload_fired = true})}, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back.html new file mode 100644 index 00000000000..5b0415c4225 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back.html @@ -0,0 +1,31 @@ +<!doctype html> +<title>beforeunload event fires on history navigation back</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +beforeunload_fired = false; +var t = async_test(); + +var base_count = 0; + +onload = function() {setTimeout(t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0] + iframe.onload = t.step_func(function() { + iframe.onload = null; + history.go(-1); + }); + + iframe.src = "beforeunload-on-history-back-1.html"; +}), 100)}; + +base_show = t.step_func(function() { + base_count++; + if (base_count > 1) { + assert_true(beforeunload_fired); + t.done(); + } +}); + +</script> +<iframe src="base.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent-1.html new file mode 100644 index 00000000000..4f239dad1e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent-1.html @@ -0,0 +1,2 @@ +<!doctype html> +<iframe src="beforeunload-on-navigation-of-parent-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent-2.html new file mode 100644 index 00000000000..a34b182e70f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent-2.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +addEventListener("beforeunload", function() {parent.parent.beforeunload_fired=true}, false) +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent.html new file mode 100644 index 00000000000..96d49567f36 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-navigation-of-parent.html @@ -0,0 +1,31 @@ +<!doctype html> +<title>beforeunload in iframe on navigation of parent</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +beforeunload_fired = false; +var t = async_test(); + +var base_count = 0; + +onload = function() {setTimeout(t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0] + iframe.onload = t.step_func(function() { + iframe.onload = null; + history.go(-1); + }); + + iframe.src = "beforeunload-on-navigation-of-parent-1.html"; +}), 100)}; + +base_show = t.step_func(function() { + base_count++; + if (base_count > 1) { + assert_true(beforeunload_fired); + t.done(); + } +}); + +</script> +<iframe src="base.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-1.html new file mode 100644 index 00000000000..b96234fba2c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-1.html @@ -0,0 +1,10 @@ +<!doctype html> +004-1 +<script> +addEventListener("beforeunload", +function() { +if (top.counter++ < 999) { + location = "navigation-within-beforeunload-2.html?" + top.counter; +} +}, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-2.html new file mode 100644 index 00000000000..2dceaa6d6ad --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-2.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +document.write(location) +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload.html new file mode 100644 index 00000000000..73fcade5b04 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload.html @@ -0,0 +1,26 @@ +<!doctype html> +<title>Triggering navigation from withing beforeunload event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +beforeunload_fired = false; +var t = async_test(); + +var base_count = 0; +var counter = 0; + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + + iframe.onload = function() { + setTimeout(function() {iframe.contentWindow.location="navigation-within-beforeunload-2.html";}, 100); + iframe.onload = t.step_func(function() {assert_equals(counter, 1000); t.done()}); + }; + + iframe.src = "navigation-within-beforeunload-1.html?" + Math.random(); + +}, 100)}; + +</script> +<iframe src="base.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward-1.html new file mode 100644 index 00000000000..a60c20ed80a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward-1.html @@ -0,0 +1,2 @@ +<!doctype html> +filler text diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward.html new file mode 100644 index 00000000000..5e64b5ec666 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/pagehide-on-history-forward.html @@ -0,0 +1,19 @@ +<!doctype html> +<title>pagehide event fires on history navigation forward</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); + +onload = function() {setTimeout(t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0] + + iframe.src = "pagehide-on-history-forward-1.html"; +}), 100)}; + +base_hide = t.step_func(function() { + t.done() +}); +</script> +<iframe src="base.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-1.html new file mode 100644 index 00000000000..b68afc49ec2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-1.html @@ -0,0 +1,10 @@ +<script> +addEventListener("beforeunload", +function() { + parent.events.push("beforeunload"); +}, false); +parent.events.push("before src change"); + +location.href = "001-2.html&pipe=trickle(d2)"; +parent.events.push("after src change"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-2.html new file mode 100644 index 00000000000..9da0f9395ca --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001-2.html @@ -0,0 +1 @@ +001-2 diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001.html new file mode 100644 index 00000000000..109dcc1393d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/001.html @@ -0,0 +1,14 @@ +<!doctype html> +<title>beforeunload event order</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +events = []; +onload = t.step_func(function() { + assert_array_equals(events, ["before src change", "beforeunload", "after src change"]); + t.done(); +}) +</script> +<iframe src="001-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002-1.html new file mode 100644 index 00000000000..c5f57375da4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002-1.html @@ -0,0 +1,7 @@ +<script> +addEventListsner("beforeunload", parent.t.step_func( +function(e) { + parent.do_test(e); +}, false); +location.href = "001-2.html&pipe=trickle(d2)"; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002.html new file mode 100644 index 00000000000..d8f4fc60a9b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/002.html @@ -0,0 +1,20 @@ +<!doctype html> +<title>beforeunload event properties</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); + +function do_test(e) { + assert_equals(e.type, "beforeunload"); + assert_false(e.bubbles, "bubbles"); + assert_true(e.cancelable, "bubbles"); + assert_equals(e.returnValue, ""); +} + +onload = t.step_func(function() { + t.done(); +}) +</script> +<iframe src="001-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/003.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/003.html new file mode 100644 index 00000000000..5683f1b1209 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/003.html @@ -0,0 +1,20 @@ +<!doctype html> +<title>beforeunload event in child frame for parent navigation</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); + +function do_test(e) { + assert_equals(e.type, "beforeunload"); + assert_false(e.bubbles, "bubbles"); + assert_true(e.cancelable, "bubbles"); + assert_equals(e.returnValue, ""); +} + +onload = t.step_func(function() { + t.done(); +}) +</script> +<iframe src="001-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/MANIFEST new file mode 100644 index 00000000000..8d93279a44e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/MANIFEST @@ -0,0 +1,14 @@ +support 001-1.html +support 001-2.html +001.html +support 002-1.html +002.html +003.html +manual manual-001.html +manual manual-002.html +manual manual-003.html +manual manual-004.html +manual manual-005.html +manual manual-006.html +support next.html +support slice-and-dice.php diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-001.html new file mode 100644 index 00000000000..3b7ef74b714 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-001.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>Prompt when beforeunload is canceled</title> +<script> +addEventListener("beforeunload", +function(e) {e.preventDefault()}, +false); +</script> +<p>When clicking the link below, you should get a prompt asking if you want to unload the document</p> +<a href="next.html">Click here</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-002.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-002.html new file mode 100644 index 00000000000..7be8a3301f1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-002.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>Prompt when beforeunload has returnValue set</title> +<script> +addEventListener("beforeunload", +function(e) {e.returnValue = "PASS if you see this"}, +false); +</script> +<p>When clicking the link below, you should get a prompt asking if you want to unload the document</p> +<a href="next.html">Click here</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-003.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-003.html new file mode 100644 index 00000000000..ff72b670556 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-003.html @@ -0,0 +1,11 @@ +<!doctype html> +<title>Prompt when beforeunload is canceled</title> +<script> +addEventListener("beforeunload", +function(e) {e.preventDefault()}, +false); +</script> +<p>When clicking the button below, you should get a prompt asking if you want to unload the document</p> +<form method="get" action="next.html"> +<input type="submit" value="Click here"> +</form> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-004.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-004.html new file mode 100644 index 00000000000..a4d29689224 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-004.html @@ -0,0 +1,11 @@ +<!doctype html> +<title>Prompt on form submit</title> +<script> +addEventListener("beforeunload", +function(e) {e.preventDefault()}, +false); +</script> +<p>When clicking the button below, you should get a prompt asking if you want to unload the document</p> +<form method="get" action="next.html"> +<input type="submit" value="Click here"> +</form> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-005.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-005.html new file mode 100644 index 00000000000..71ff0a241da --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-005.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Event loop pause for beforeunload</title> +<script> +var counter = 0; + +onload = function count() { + document.getElementById("log").textContent = counter++ + setTimeout(count, 200); +} + +addEventListener("beforeunload", +function(e) { + e.preventDefault() +}, +false); +</script> +<ul> +<li>Click on the link below. When the prompt appears the counter at the bottom must stop incrementing. +<li>Opt not to leave the page. The counter must start incrementing again +</ul> +<p><a href="">Click here</a> +<div id="log"></div> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-006.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-006.html new file mode 100644 index 00000000000..dae0340ad9e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/manual-006.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>Prompt when beforeunload returns string value</title> +<script> +addEventListener("beforeunload", +function(e) {return "PASS if you see this"}, +false); +</script> +<p>When clicking the link below, you should get a prompt asking if you want to unload the document</p> +<a href="next.html">Click here</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/next.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/next.html new file mode 100644 index 00000000000..38e7cdd5e00 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/prompt/next.html @@ -0,0 +1,2 @@ +<!doctype html> +<p>You should have seen a prompt asking you to unload the previous document diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001-1.html new file mode 100644 index 00000000000..74ba43954b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001-1.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +addEventListener("pagehide", parent.t.step_func(function() {parent.pagehide_fired = true}), false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001-2.html new file mode 100644 index 00000000000..90e28ab7fbe --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001-2.html @@ -0,0 +1,2 @@ +<!doctype html> +Filler diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001.html new file mode 100644 index 00000000000..444a2770c75 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/001.html @@ -0,0 +1,25 @@ +<!doctype html> +<title>pagehide event on unload</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +pagehide_fired = false; +var t = async_test(); + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + + iframe.onload = function() { + setTimeout(function() { + iframe.contentWindow.location="001-2.html"; + }, 100); + iframe.onload = t.step_func(function() {assert_true(pagehide_fired); t.done()}); + }; + + iframe.src = "001-1.html?" + Math.random(); + +}, 100)}; + +</script> +<iframe></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/002-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/002-1.html new file mode 100644 index 00000000000..fd8e2b7262c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/002-1.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +addEventListener("pagehide", parent.t.step_func(parent.do_test()), false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/002.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/002.html new file mode 100644 index 00000000000..3fb07e48463 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/002.html @@ -0,0 +1,33 @@ +<!doctype html> +<title>pagehide event properties</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + + iframe.onload = function() { + setTimeout(function() { + iframe.contentWindow.location="001-2.html"; + }, 100); + iframe.onload = t.step_func(function() {t.done()}); + }; + + function do_test(e) { + assert_equals(e.type, "pagehide"); + assert_equals(e.target, iframe.contentDocument); + assert_equals(e.currentTarget, iframe.contentWindow); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); + assert_true(e.persisted, "persisted"); + } + + iframe.src = "002-1.html?" + Math.random(); + +}, 100)}; + +</script> +<iframe></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-1.html new file mode 100644 index 00000000000..9838c79456c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-1.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +addEventListener("unload", parent.t.step_func(function(e) {parent.do_test(e)}), false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003.html new file mode 100644 index 00000000000..97821be4847 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003.html @@ -0,0 +1,33 @@ +<!doctype html> +<title>unload event properties</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var do_test; + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + + iframe.onload = function() { + setTimeout(function() { + iframe.contentWindow.location="002-2.html"; + }, 100); + iframe.onload = t.step_func(function() {t.done()}); + }; + + do_test = function(e) { + assert_equals(e.type, "unload"); + assert_equals(e.target, iframe.contentDocument); + assert_equals(e.currentTarget, iframe.contentWindow); + assert_false(e.bubbles, "bubbles"); + assert_false(e.cancelable, "cancelable"); + } + + iframe.src = "003-1.html?" + Math.random(); + +}, 100)}; + +</script> +<iframe></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-1.html new file mode 100644 index 00000000000..5d0497556ba --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-1.html @@ -0,0 +1,5 @@ +<!doctype html> +<script> +addEventListener("pagehide", function() {parent.events.push("pagehide"); setTimeout(function() {parent.events.push("timeout")}, 0)}, false); +addEventListener("unload", function() {parent.events.push("unload")}, false); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004.html new file mode 100644 index 00000000000..301baa3b8ec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>pagehide / unload event order</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); + +var events = []; + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + + iframe.onload = function() { + setTimeout(function() { + iframe.contentWindow.location="001-2.html"; + }, 100); + iframe.onload = t.step_func(function() { + assert_array_equals(events, ["pagehide", "unload"]) + t.done()}); + }; + + iframe.src = "004-1.html?" + Math.random(); + +}, 100)}; + +</script> +<iframe></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html new file mode 100644 index 00000000000..8d265962375 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006-1.html @@ -0,0 +1,20 @@ +<!doctype html> +006-1 +<script> +onpagehide = function() { + onpagehide = null; + setTimeout(function() { + parent.t.done() + }, 1000); +} +onload = function() { + if (!parent.loaded) { + parent.loaded = true; + setTimeout(parent.t.step_func( + function() { + location="006-2.html?" + Math.random(); + } + ), 100); + } +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006-2.html new file mode 100644 index 00000000000..52365e55d8a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006-2.html @@ -0,0 +1,5 @@ +<!doctype html> +006-2 +<script> +onload = function() {setTimeout(parent.t.step_func(function() {history.go(-1)}), 100)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006.html new file mode 100644 index 00000000000..c9e4d68a10d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/006.html @@ -0,0 +1,18 @@ +<!doctype html> +<title>salvagable state of document after setting pagehide listener</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); + +var loaded = false; + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + onload = null; + iframe.src="006-1.html?" + Math.random(); +}, 100)}; + +</script> +<iframe></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-1.html new file mode 100644 index 00000000000..ed19f4498a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-1.html @@ -0,0 +1,21 @@ +<!doctype html> +007-1 +<script> +onunload = function() { + onunload = null; + parent.unload_fired = true; + setTimeout(function() { + parent.timeout_fired = true; + }, 100); +} +onload = function() { + if (!parent.loaded) { + parent.loaded = true; + setTimeout(parent.t.step_func( + function() { + location="007-2.html?" + Math.random(); + } + ), 100); + } +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-2.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-2.html new file mode 100644 index 00000000000..f74cd1e67ed --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-2.html @@ -0,0 +1,5 @@ +<!doctype html> +007-2 +<script> +onload = function() {setTimeout(parent.t.step_func(function() {parent.start_test(); history.go(-1)}), 100)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007.html new file mode 100644 index 00000000000..0d5b72e0fc5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>salvagable state of document after setting unload listener</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(undefined, {timeout:2000}); + +var loaded = false; +var unload_fired = false; +var timeout_fired = false; + +function start_test() { + setTimeout(t.step_func(function() { + assert_true(unload_fired); + assert_false(timeout_fired); + t.done() + }), 1000); +} + +onload = function() {setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0] + onload = null; + iframe.src="007-1.html?" + Math.random(); +}, 100)}; + +</script> +<iframe></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/008-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/008-1.html new file mode 100644 index 00000000000..29de29c9110 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/008-1.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +onpagehide = parent.t.step_func(function() {parent.t.done()}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/008.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/008.html new file mode 100644 index 00000000000..9e9a8639999 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/008.html @@ -0,0 +1,15 @@ +<!doctype html> +<title>pagehide IDL attribute</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var iframe; +var t = async_test(); +onload = setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + iframe.src="about:blank"; + setTimeout(t.step_func(function() {assert_unreached();}), 1000) + }, 100) +</script> +<iframe src="008-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-1.html new file mode 100644 index 00000000000..d69a05914a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-1.html @@ -0,0 +1,4 @@ +<!doctype html> +<script> +onunload = parent.t.step_func(function() {parent.t.done()}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009.html new file mode 100644 index 00000000000..2557d1c40eb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009.html @@ -0,0 +1,15 @@ +<!doctype html> +<title>unload IDL attribute</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var iframe; +var t = async_test(); +onload = setTimeout(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + iframe.src="about:blank"; + setTimeout(t.step_func(function() {assert_unreached();}), 1000) + }, 100) +</script> +<iframe src="009-1.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/MANIFEST new file mode 100644 index 00000000000..637d35cf396 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/MANIFEST @@ -0,0 +1,21 @@ +support 001-1.html +support 001-2.html +001.html +support 002-1.html +002.html +support 003-1.html +003.html +support 004-1.html +004.html +support 006-1.html +support 006-2.html +006.html +support 007-1.html +support 007-2.html +007.html +support 008-1.html +008.html +support 009-1.html +009.html +manual manual-001-1.html +manual manual-001.html diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html new file mode 100644 index 00000000000..3da0a0de3ec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001-1.html @@ -0,0 +1,2 @@ +<!doctype html> +<p>Now go back. PASS should be displayed after a short pause diff --git a/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html new file mode 100644 index 00000000000..6d817a111cd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/manual-001.html @@ -0,0 +1,5 @@ +<!doctype html> +<title>Document salvagable state after setting pagehide handler</title> +<script>onpagehide = function() {setTimeout(function(){document.body.innerHTML = "PASS"}, 100)}</script> +<p>Click the link below then navigate back to this page. Shortly after returning you should see the text "PASS"</p> +<p><A href="manual-001-1.html">Click here</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history.js b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history.js new file mode 100644 index 00000000000..bb5ee6dde03 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history.js @@ -0,0 +1,35 @@ +function parse_query() { + var query = location.search.slice(1); + var vars = query.split("&"); + var fields = {}; + vars.forEach( + function (x) { + var split = x.split("="); + return fields[split[0]] = split.slice(1).join("="); + }); + return fields; +} + +var query_parts = parse_query(); +var id = "id" in query_parts ? parseInt(query_parts.id) : 1; +var urls_to_load = query_parts.urls.split(","); + +document.write(id); + +onunload = function() {}; + +function queue_next() { + t = opener.t; + setTimeout(t.step_func( + function() { +// opener.assert_equals(history.length, id); + if (urls_to_load[0]) { + var next_page = urls_to_load[0]; + (next_page.indexOf("?") > -1) ? (next_page += "&") : (next_page += "?"); + next_page += "urls=" + urls_to_load.slice(1).join(","); + next_page += "&id=" + ++id; + location = next_page; + } + } + ), 100); +} diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_back-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_back-1.html new file mode 100644 index 00000000000..78547019f3a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_back-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {} + + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.back(); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_back_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_back_1.html new file mode 100644 index 00000000000..cc37ddd35d8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_back_1.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>history.back() with session history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [2, 1], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_back-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_entry.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_entry.html new file mode 100644 index 00000000000..e5929ddbe84 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_entry.html @@ -0,0 +1,12 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onload = function() { + if (!opener.started) { + queue_next(); + } else { + opener.pages.push(id); + opener.start_test_wait(); + } +}; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward-1.html new file mode 100644 index 00000000000..5880eacf04c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward-1.html @@ -0,0 +1,15 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {} + + onload = function() { + if (!opener.started) { + queue_next(); + } else { + opener.pages.push(id); + opener.start_test_wait(); + history.forward(); + } + }; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward-2.html new file mode 100644 index 00000000000..c7a9a106823 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward-2.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {} + + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.go(-1); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward_1.html new file mode 100644 index 00000000000..3d119482c9f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_forward_1.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>history.forward() with session history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [3, 2, 3], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_forward-1.html,history_forward-2.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_no_argument-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_no_argument-1.html new file mode 100644 index 00000000000..acd9bda31dc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_no_argument-1.html @@ -0,0 +1,18 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {} + + onload = function() { + if (!opener.started) { + queue_next(); + } else { + opener.pages.push(id); + opener.start_test_wait(); + if (!opener.gone) { + history.go(); + opener.gone = true; + } + } + }; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_no_argument.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_no_argument.html new file mode 100644 index 00000000000..278cf86c2ea --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_no_argument.html @@ -0,0 +1,29 @@ +<!doctype html> +<title>history.go()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + gone = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [3, 2, 2], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_go_no_argument-1.html,history_forward-2.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_undefined-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_undefined-1.html new file mode 100644 index 00000000000..5880eacf04c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_undefined-1.html @@ -0,0 +1,15 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {} + + onload = function() { + if (!opener.started) { + queue_next(); + } else { + opener.pages.push(id); + opener.start_test_wait(); + history.forward(); + } + }; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_undefined.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_undefined.html new file mode 100644 index 00000000000..e2a40275ee4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_undefined.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>history.forward() with session history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [3, 2, 2], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_go_undefined-1.html,history_forward-2.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_zero-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_zero-1.html new file mode 100644 index 00000000000..d9d4f330b2e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_zero-1.html @@ -0,0 +1,18 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {} + + onload = function() { + if (!opener.started) { + queue_next(); + } else { + opener.pages.push(id); + opener.start_test_wait(); + if (!opener.gone) { + history.go(0); + opener.gone = true; + } + } + }; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_zero.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_zero.html new file mode 100644 index 00000000000..6858783833e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/history_go_zero.html @@ -0,0 +1,29 @@ +<!doctype html> +<title>history.go(0)</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + gone = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [3, 2, 2], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_go_zero-1.html,history_forward-2.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/001-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/001-1.html new file mode 100644 index 00000000000..9aa5d30d16e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/001-1.html @@ -0,0 +1,72 @@ +<!doctype html> +<script> +var o = opener; + +var frameloaded = null; + +o.t.step(function() {o.assert_equals(history.length, 1)}); + +onload = function () { + o.t.step(function() { + o.assert_equals(history.length, 1); + o.t.done(); + }); + + o.t1.step(function() { + var iframe = document.createElement("iframe"); + iframe.src = "filler.html?id=2"; + document.body.appendChild(iframe); + frameloaded = o.t1.step_func(function () { + o.assert_equals(history.length, 1); + setTimeout(o.t1.step_func(function () { + o.assert_equals(history.length, 1); + iframe.src = "filler.html?id=3"; + frameloaded = o.t2.step_func(function() { + o.assert_equals(history.length, 2); + history.go(-1); + frameloaded = o.t3.step_func(function() { + o.assert_equals(history.length, 2); + var parts = iframe.contentWindow.location.href.split("/") + o.assert_equals(parts[parts.length - 1], "filler.html?id=2"); + o.t3.done(); + o.t4.step(function() { + var iframe0 = document.getElementsByTagName("iframe")[0]; + iframe0.src = "filler.html?id=4" + frameloaded = o.t4.step_func(function() { + o.assert_equals(history.length, 2); + var parts = iframe0.contentWindow.location.href.split("/") + o.assert_equals(parts[parts.length - 1], "filler.html?id=4"); + //This is the point at which gecko and webkit stop running tests + history.go(-1); + frameloaded = o.t5.step_func(function() { + o.assert_equals(history.length, 2); + var parts = iframe0.contentWindow.location.href.split("/") + o.assert_equals(parts[parts.length - 1], "filler.html?id=1"); + var parts = iframe.contentWindow.location.href.split("/") + o.assert_equals(parts[parts.length - 1], "filler.html?id=2"); + history.go(1); + frameloaded = o.t6.step_func(function() { + o.assert_equals(history.length, 2); + var parts = iframe0.contentWindow.location.href.split("/") + o.assert_equals(parts[parts.length - 1], "filler.html?id=4"); + var parts = iframe.contentWindow.location.href.split("/") + o.assert_equals(parts[parts.length - 1], "filler.html?id=2"); + o.t6.done(); + }); + o.t5.done(); + }); + o.t4.done(); + }); + }); + }); + o.t2.done(); + }); + o.t1.done(); + }, 500)) + }); + }); + +} +</script> + +<iframe src="filler.html?id=1"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/001.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/001.html new file mode 100644 index 00000000000..c9d1c6416d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/001.html @@ -0,0 +1,18 @@ +<!doctype html> +<title>Joint session history with single iframe</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +setup({timeout:10000}); +var t = async_test("Session history length on initial load"); +var t1 = async_test("Session history length on adding new iframe"); +var t2 = async_test("Navigating second iframe"); +var t3 = async_test("Traversing history back (1)"); +var t4 = async_test("Navigating first iframe"); +var t5 = async_test("Traversing history back (2)"); +var t6 = async_test("Traversing history forward"); +var w = window.open("001-1.html"); +//add_completion_callback(function() {w.close()}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/002-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/002-1.html new file mode 100644 index 00000000000..ed69d679da1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/002-1.html @@ -0,0 +1,35 @@ +<!doctype html> +<script> +var o = opener; + +var frameloaded = null; + +o.t.step(function() {o.assert_equals(history.length, 1)}); + +onload = function () { + o.t.step(function() { + o.assert_equals(history.length, 1); + o.t.done(); + }); + + o.t1.step(function() { + var iframe = document.createElement("iframe"); + iframe.src = "filler.html?id=2"; + document.body.appendChild(iframe); + o.assert_equals(history.length, 1); + frameloaded = o.t2.step_func(function() { + iframe.contentDocument.open(); + iframe.contentDocument.write("3<script>onpageshow = function() {alert('pageshow'); parent.frameloaded()}<\/script>"); + iframe.contentDocument.close(); + frameloaded = o.t2.step_func(function () { + o.assert_equals(history.length, 2); + o.t2.done(); + }); + }); + o.t1.done(); + }); + +} +</script> + +<iframe src="filler.html?id=1"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/002.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/002.html new file mode 100644 index 00000000000..b08c19e52db --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/002.html @@ -0,0 +1,18 @@ +<!doctype html> +<title>Joint session history with single iframe</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +setup({timeout:10000}); +var t = async_test("Session history length on initial load"); +var t1 = async_test("Session history length on adding new iframe"); +var t2 = async_test("Navigating second iframe"); +<!-- var t3 = async_test("Traversing history back (1)"); --> +<!-- var t4 = async_test("Navigating first iframe"); --> +<!-- var t5 = async_test("Traversing history back (2)"); --> +<!-- var t6 = async_test("Traversing history forward"); --> +var w = window.open("002-1.html"); +//add_completion_callback(function() {w.close()}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/filler.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/filler.html new file mode 100644 index 00000000000..93e3c7ccfc7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/joint_session_history/filler.html @@ -0,0 +1,5 @@ +<!doctype html> +<script> +document.write(location.search) +onpageshow = function() {if (parent.frameloaded) {parent.frameloaded()}} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/history.js b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/history.js new file mode 100644 index 00000000000..bb5ee6dde03 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/history.js @@ -0,0 +1,35 @@ +function parse_query() { + var query = location.search.slice(1); + var vars = query.split("&"); + var fields = {}; + vars.forEach( + function (x) { + var split = x.split("="); + return fields[split[0]] = split.slice(1).join("="); + }); + return fields; +} + +var query_parts = parse_query(); +var id = "id" in query_parts ? parseInt(query_parts.id) : 1; +var urls_to_load = query_parts.urls.split(","); + +document.write(id); + +onunload = function() {}; + +function queue_next() { + t = opener.t; + setTimeout(t.step_func( + function() { +// opener.assert_equals(history.length, id); + if (urls_to_load[0]) { + var next_page = urls_to_load[0]; + (next_page.indexOf("?") > -1) ? (next_page += "&") : (next_page += "?"); + next_page += "urls=" + urls_to_load.slice(1).join(","); + next_page += "&id=" + ++id; + location = next_page; + } + } + ), 100); +} diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/history_entry.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/history_entry.html new file mode 100644 index 00000000000..e5929ddbe84 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/history_entry.html @@ -0,0 +1,12 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onload = function() { + if (!opener.started) { + queue_next(); + } else { + opener.pages.push(id); + opener.start_test_wait(); + } +}; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-1.html new file mode 100644 index 00000000000..8c4401836af --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-1.html @@ -0,0 +1,18 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onbeforeunload = function() {opener.beforeunload_ran = true; return "Opt to stay on the page"}; + + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.back(); + }, 100); + } + } +</script> +<p>You should see/have seen a prompt asking if you want to leave the page.</p> +<p>Opt to stay on the page</p> +<button onclick="onbeforeunload = null; opener.start_test_wait(); document.getElementsByTagName('button')[0].disabled = true;">Click here</button> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html new file mode 100644 index 00000000000..b1d0aed52c7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html @@ -0,0 +1,31 @@ +<!doctype html> +<title>Traversing the history, prompt in before unload, navigation denied</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + setup({timeout:3600000}); + var t = async_test(undefined, {timeout:3600000}); + started = false; + pages = [] + timer = null; + beforeunload_ran = false; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_true(beforeunload_ran, "beforeunload event handler ran"); + assert_array_equals(pages, [2], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=traverse_the_history_unload_prompt_1-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-1.html new file mode 100644 index 00000000000..608a579e69f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-1.html @@ -0,0 +1,18 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onbeforeunload = function() {opener.beforeunload_ran = true; return "Opt to leave the page"}; + + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.back(); + }, 100); + } + } +</script> +<p>You should see/have seen a prompt asking if you want to leave the page.</p> +<p>Opt to leave the page</p> +<p>If you weren't navigated away after opting to leave the page, that's a FAIL</p> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html new file mode 100644 index 00000000000..d45a2afb168 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_2-manual.html @@ -0,0 +1,31 @@ +<!doctype html> +<title>Traversing the history, prompt in before unload, navigation allowed</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + setup({timeout:3600000}); + var t = async_test(undefined, {timeout:3600000}); + started = false; + pages = [] + timer = null; + beforeunload_ran = false; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_true(beforeunload_ran, "beforeunload event handler ran"); + assert_array_equals(pages, [2,1], "Pages opened during history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=traverse_the_history_unload_prompt_2-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-1.html new file mode 100644 index 00000000000..c0079b6bec0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function(e) {opener.unload_ran = true; return "Now refuse to leave the current page"} + + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.back(); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html new file mode 100644 index 00000000000..8154e8e4724 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1.html @@ -0,0 +1,30 @@ +<!doctype html> +<title>Traversing the history, unload event is fired on doucment</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + unload_ran = false; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [2], "Pages opened during history navigation"); + assert_true(unload_ran, "Unload event handler ran"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=traverse_the_history_unload_prompt_1-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_1-1.html new file mode 100644 index 00000000000..a11fcf2d2d2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_1-1.html @@ -0,0 +1,18 @@ +<!doctype html> +4 +<script> + onunload = function() {} + + opener.pages.push(4); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.go(-2); + history.go(-1); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_1.html new file mode 100644 index 00000000000..11715583dd4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_1.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>Multiple history traversals from the same task</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [4, 2], "Pages opened during history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html&urls=history_entry.html,history_entry.html,traverse_the_history_1-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_2-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_2-1.html new file mode 100644 index 00000000000..64920b4f4f5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_2-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.go(-3); + history.go(-2); + history.go(1); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_2.html new file mode 100644 index 00000000000..1d10033808c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_2.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>Multiple history traversals, last would be aborted</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [6, 3], "Pages opened during history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_entry.html,history_entry.html,history_entry.html,history_entry.html,traverse_the_history_2-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_3-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_3-1.html new file mode 100644 index 00000000000..c49bfd384a2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_3-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.go(-2); + history.go(-1); + history.go(3); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_3.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_3.html new file mode 100644 index 00000000000..51ed4eb399b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_3.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>Multiple history traversals, last would be aborted</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [6, 3], "Pages opened during history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_entry.html,history_entry.html,history_entry.html,history_entry.html,traverse_the_history_2-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_4-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_4-1.html new file mode 100644 index 00000000000..cf7f72379aa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_4-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.go(-10); //Outside the range + history.go(-1); + history.go(-2); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_4.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_4.html new file mode 100644 index 00000000000..651693011ae --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_4.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>Multiple history traversals, last would be aborted</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [6, 5], "Pages opened during history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_entry.html,history_entry.html,history_entry.html,history_entry.html,traverse_the_history_4-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_5-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_5-1.html new file mode 100644 index 00000000000..a3f2553fa01 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_5-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.go(10); //Outside the range + history.go(-1); + history.go(-2); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_5.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_5.html new file mode 100644 index 00000000000..837f265b508 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_5.html @@ -0,0 +1,28 @@ +<!doctype html> +<title>Multiple history traversals, last would be aborted</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [6, 5], "Pages opened during history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_entry.html,history_entry.html,history_entry.html,history_entry.html,traverse_the_history_5-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_unload_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_unload_1-1.html new file mode 100644 index 00000000000..d3f3f6d5d0b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_unload_1-1.html @@ -0,0 +1,17 @@ +<!doctype html> +<script src="history.js"></script> +<script> + onunload = function() {opener.unload_ran = true;} + + opener.pages.push(id); + if (!opener.started) { + onload = function() { + setTimeout(function() { + opener.started = true; + history.back(); + }, 100); + } + } else { + opener.start_test_wait(); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_unload_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_unload_1.html new file mode 100644 index 00000000000..5a72dd6350b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_unload_1.html @@ -0,0 +1,30 @@ +<!doctype html> +<title>Traversing the history, unload event is fired on doucment</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(undefined, {timeout:5000}); + started = false; + pages = [] + timer = null; + unload_ran = false; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + assert_array_equals(pages, [2, 1], "Pages opened during history navigation"); + assert_true(unload_ran, "Unload event handler ran"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=traverse_the_history_unload_1-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1-1.html new file mode 100644 index 00000000000..af0118a01e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1-1.html @@ -0,0 +1,15 @@ +<!doctype html> +2 +<script> + onunload = function() {} + opener.pages.push(2); + onload = function() { + setTimeout(function() { + document.write("<!doctype html>3<script>opener.pages.push(3); if(!opener.started) {opener.started = true; history.go(-1);} opener.start_test_wait();<\/script>"); + document.close(); + if (opener.started) { + opener.start_test_wait(); + } + }, 100); + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1.html new file mode 100644 index 00000000000..5f3d27a080a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_1.html @@ -0,0 +1,29 @@ +<!doctype html> +<title>Traverse the history after document.write after the load event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + //The pass condition here is based on the idea that the spec is wrong and browsers are right + assert_array_equals(pages, [2, 3, 2, 3], "Pages opened durning history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=traverse_the_history_write_after_load_1-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2-1.html new file mode 100644 index 00000000000..0e58cf573d4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2-1.html @@ -0,0 +1,12 @@ +<!doctype html> +3 +<script> + onunload = function() {} + opener.pages.push(3); + onload = function() { + document.write("<!doctype html>4<script>opener.pages.push(4); if(!opener.started) {opener.started = true; history.go(-2);} opener.start_test_wait();<\/script>"); + if (opener.started) { + opener.start_test_wait(); + } + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2.html new file mode 100644 index 00000000000..215a53b206b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_after_load_2.html @@ -0,0 +1,29 @@ +<!doctype html> +<title>Traverse the history back and forward when a history entry is written after the load event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + //The pass condition here is based on the idea that the spec is wrong and browsers are right + assert_array_equals(pages, [3, 4, 2, 3, 4], "Pages opened durning history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_forward-1.html,traverse_the_history_write_onload_2-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1-1.html new file mode 100644 index 00000000000..261955533de --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1-1.html @@ -0,0 +1,12 @@ +<!doctype html> +2 +<script> + onunload = function() {} + opener.pages.push(2); + onload = function() { + document.write("<!doctype html>3<script>opener.pages.push(3); if(!opener.started) {opener.started = true; history.go(-1);} opener.start_test_wait();<\/script>"); + if (opener.started) { + opener.start_test_wait(); + } + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html new file mode 100644 index 00000000000..ff2729c3cfd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_1.html @@ -0,0 +1,29 @@ +<!doctype html> +<title>Traverse the history when a history entry is written in the load event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + //The pass condition here is based on the idea that the spec is wrong and browsers are right + assert_array_equals(pages, [2, 3, 1], "Pages opened durning history navigation"); + t.done(); + } finally { + // win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=traverse_the_history_write_onload_1-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2-1.html new file mode 100644 index 00000000000..f32bee5e126 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2-1.html @@ -0,0 +1,12 @@ +<!doctype html> +3 +<script> + onunload = function() {} + opener.pages.push(3); + onload = function() { + document.write("<!doctype html>4<script>opener.pages.push(4); if(!opener.started) {opener.started = true; history.go(-1);} opener.start_test_wait();<\/script>"); + if (opener.started) { + opener.start_test_wait(); + } + } +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2.html new file mode 100644 index 00000000000..bc29174b0d5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/traverse_the_history_write_onload_2.html @@ -0,0 +1,29 @@ +<!doctype html> +<title>Traverse the history back and forward when a history entry is written in the load event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> + var t = async_test(); + started = false; + pages = [] + timer = null; + start_test_wait = t.step_func( + function() { + clearTimeout(timer); + timer = setTimeout(t.step_func( + function() { + try { + //The pass condition here is based on the idea that the spec is wrong and browsers are right + assert_array_equals(pages, [3, 4, 2, 3, 4], "Pages opened durning history navigation"); + t.done(); + } finally { + win.close(); + } + } + ), 500); + } + ); + t.step(function() {win = window.open("history_entry.html?urls=history_forward-1.html,traverse_the_history_write_onload_2-1.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load-1.html new file mode 100644 index 00000000000..3d2b897221a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load-1.html @@ -0,0 +1,9 @@ +<!doctype html> +1 +<script> +onload = parent.t.step_func(function() { + setTimeout(function() { + location = location.toString().replace("assign_after_load-1.html", "assign_after_load-2.html"); + }, 100); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load-2.html new file mode 100644 index 00000000000..94679571bec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +2 +<script> +onload = parent.t.step_func(function() { + setTimeout(function() {parent.do_test()}, 100); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load.html new file mode 100644 index 00000000000..00dc931d4e7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_after_load.html @@ -0,0 +1,23 @@ +<!doctype html> +<title>Assignment to location after document is completely loaded</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe></iframe> +<script> +var t = async_test(); +var history_length; + +onload = t.step_func(function() { + setTimeout(function() { + history_length = history.length; + document.getElementsByTagName("iframe")[0].src = "assign_after_load-1.html"; + }, 100); +}); + +do_test = t.step_func(function() { + assert_equals(history.length, history_length + 2); + t.done(); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load-1.html new file mode 100644 index 00000000000..2549867c8ff --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load-1.html @@ -0,0 +1,7 @@ +<!doctype html> +1 +<script> +onload = parent.t.step_func(function() { + location = location.toString().replace("assign_before_load-1.html", "assign_before_load-2.html"); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load-2.html new file mode 100644 index 00000000000..94679571bec --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +2 +<script> +onload = parent.t.step_func(function() { + setTimeout(function() {parent.do_test()}, 100); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load.html new file mode 100644 index 00000000000..62a2aa7c60d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/assign_before_load.html @@ -0,0 +1,23 @@ +<!doctype html> +<title>Assignment to location before document is completely loaded</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe></iframe> +<script> +var t = async_test(); +var history_length; + +onload = t.step_func(function() { + setTimeout(function() { + history_length = history.length; + document.getElementsByTagName("iframe")[0].src = "assign_before_load-1.html"; + }, 100); +}); + +do_test = t.step_func(function() { + assert_equals(history.length, history_length + 1); + t.done(); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/document_location.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/document_location.html new file mode 100644 index 00000000000..5ccc9c76b6c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/document_location.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>document.location</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +test(function() { + var doc = document.implementation.createHTMLDocument(""); + assert_equals(doc.location, null); +}, "document not in a browsing context"); + +test(function() { + assert_equals(document.location, location); +}, "document.location equals window.location"); + +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_assign_about_blank-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_assign_about_blank-1.html new file mode 100644 index 00000000000..b43598f2cd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_assign_about_blank-1.html @@ -0,0 +1,2 @@ +<!doctype html> +Filler text diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_assign_about_blank.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_assign_about_blank.html new file mode 100644 index 00000000000..f3f7cf26b85 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/location_assign_about_blank.html @@ -0,0 +1,24 @@ +<!doctype html> +<title>location.assign with initial about:blank browsing context</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<iframe></iframe> +<script> +var t = async_test(); +var history_length; +onload = t.step_func(function() { + setTimeout(t.step_func(function() { + var iframe = document.getElementsByTagName("iframe")[0]; + iframe.onload = t.step_func(function() { + setTimeout(t.step_func(function() { + assert_equals(history.length, history_length); + t.done(); + }), 100); + }); + history_length = history.length; + iframe.src = "location_assign_about_blank-1.html" + }), 100); +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-1.html new file mode 100644 index 00000000000..1a8fe9928f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-1.html @@ -0,0 +1,7 @@ +<!doctype html> +<script> +opener.history_length = history.length; +</script> +<a onclick="location = 'manual_click_assign_during_load-2.html'; return false;" href>Click Here</a> +<p>Filler image to keep the page loading:</p> +<img src="/media/2048x1360-random.jpg?pipe=trickle(d1:1:r2)"> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-2.html new file mode 100644 index 00000000000..1bf7f41e00f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +<p>This window should close itself and the test result appear in the original window +<script> +onload = function() { + setTimeout(function() {opener.do_test(history.length); window.close();}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html new file mode 100644 index 00000000000..4f2555c5eb5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_assign_during_load-manual.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Assignment to location with click during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +setup({timeout:3600000}); +var t = async_test(undefined, {timeout:3600000}); +var win = window.open("manual_click_assign_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length + 1); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-1.html new file mode 100644 index 00000000000..33f1bfca3e3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-1.html @@ -0,0 +1,10 @@ +<!doctype html> +<script> +opener.history_length = history.length; +</script> +<a onclick="location.replace('manual_click_location_replace_during_load-2.html'); return false;" href>Click Here</a> +<p>Filler image to keep the page loading:</p> +<img> +<script> +document.images[0].src = "/media/2048x1360-random.jpg?pipe=trickle(d1:1:r2)&random=" + Math.random(); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-2.html new file mode 100644 index 00000000000..1bf7f41e00f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +<p>This window should close itself and the test result appear in the original window +<script> +onload = function() { + setTimeout(function() {opener.do_test(history.length); window.close();}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html new file mode 100644 index 00000000000..43af1b1d3b8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_location_replace_during_load-manual.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>location.replace with click during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +setup({timeout:3600000}); +var t = async_test(undefined, {timeout:3600000}); +var win = window.open("manual_click_location_replace_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html new file mode 100644 index 00000000000..3507222caf7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_click_replace_during_load.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Assignment to location with click during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +setup({timeout:3600000}); +var t = async_test(undefined, {timeout:3600000}); +var win = window.open("manual_click_replace_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-1.html new file mode 100644 index 00000000000..ca8b4bfe823 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-1.html @@ -0,0 +1,9 @@ +<!doctype html> +<script> +opener.history_length = history.length; +</script> +<form onsubmit="location = 'manual_form_submit_assign_during_load-2.html'; return false;"> +<input type=submit value="Click Me"> +</form> +<p>Filler image to keep the page loading:</p> +<img src="/media/2048x1360-random.jpg?pipe=trickle(d1:1:r2)"> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-2.html new file mode 100644 index 00000000000..1bf7f41e00f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +<p>This window should close itself and the test result appear in the original window +<script> +onload = function() { + setTimeout(function() {opener.do_test(history.length); window.close();}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html new file mode 100644 index 00000000000..df6487407d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/manual_form_submit_assign_during_load-manual.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Assignment to location with form submit during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +setup({timeout:3600000}); +var t = async_test(undefined, {timeout:3600000}); +var win = window.open("manual_form_submit_assign_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length + 1); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/reload_in_resize-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/reload_in_resize-1.html new file mode 100644 index 00000000000..05b44f4c40c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/reload_in_resize-1.html @@ -0,0 +1,15 @@ +<!doctype html> +<p>Resize this window. FAIL if the window doesn't close shortly afterwards.</p> +<script> +onload = opener.t.step_func(function() { + opener.load_count++; + if (opener.load_count > 1) { + opener.do_test(); + } +}) + +onresize = opener.t.step_func(function() { + opener.flag_resized(); + location.reload(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html new file mode 100644 index 00000000000..1991cee8a16 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/non-automated/reload_in_resize-manual.html @@ -0,0 +1,26 @@ +<!doctype html> +<title>Reload called from resize event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>Resize the popup window. That window should then close and the result be presented here. If that window doesn't close after resize that's a FAIL.</p> +<div id="log"></div> +<script> +setup({timeout:3600000}) +var t = async_test(undefined, {timeout:3600000}); +var load_count = 0; +var resized = false; +var win = window.open("reload_in_resize-1.html") + +flag_resized = t.step_func(function() { + resized = true; + setTimeout(do_test, 1000); +}); + +do_test = t.step_func(function() { + win.close(); + assert_true(resized, "Resize event happened"); + assert_equals(load_count, 1, "Number of load events"); + t.done(); +}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_open_write-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_open_write-1.html new file mode 100644 index 00000000000..1c5a1db8ff8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_open_write-1.html @@ -0,0 +1,14 @@ +<!doctype html> +1 +<script> +function f() { + opener.postMessage("original", "*"); + setTimeout(function () { + document.open(); + document.write("<!doctype html>2<script>opener.postMessage('written', '*');<\/script>"); + document.close(); + }), 100; +} + +window.onload = f +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_open_write.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_open_write.html new file mode 100644 index 00000000000..0fc2a2c3d8e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_open_write.html @@ -0,0 +1,26 @@ +<!doctype html> +<title>Reload document with document.open and document.written content</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var win = window.open("reload_document_open_write-1.html"); +var t = async_test(); + +var data = []; + +window.onmessage = t.step_func(function(e) { + data.push(e.data); + if (data.length < 3) { + win.location.reload(); + } else { + setTimeout(t.step_func(function() { + assert_array_equals(data, ["original", "written", "written"]); + t.done(); + }), 500); + } +}); + +add_completion_callback(function() {win.close()}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write-1.html new file mode 100644 index 00000000000..9a084339200 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write-1.html @@ -0,0 +1,4 @@ +<script> +document.write(Math.random()); +opener.postMessage(document.body.innerHTML, "*"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write.html new file mode 100644 index 00000000000..dfbd436a47e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write.html @@ -0,0 +1,21 @@ +<!doctype html> +<title>Reload document with document.written content</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var win = window.open("reload_document_write-1.html"); +var t = async_test(); + +window.onmessage = t.step_func(function(e) { + var initial_value = e.data; + win.location.reload(); + window.onmessage = t.step_func(function(e) { + assert_true(e.data !== initial_value); + t.done(); + }); +}); + +add_completion_callback(function() {win.close()}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write_onload-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write_onload-1.html new file mode 100644 index 00000000000..36445af3c82 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write_onload-1.html @@ -0,0 +1,9 @@ +<script> +function f() { + opener.postMessage("original", "*"); + document.write("<!doctype html>2<script>opener.postMessage('written', '*');<\/script>"); + document.close(); +} + +window.onload = f +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write_onload.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write_onload.html new file mode 100644 index 00000000000..b2cf31147a1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_document_write_onload.html @@ -0,0 +1,26 @@ +<!doctype html> +<title>Reload document with document.written content written in load event</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var win = window.open("reload_document_write_onload-1.html"); +var t = async_test(); + +var data = []; + +window.onmessage = t.step_func(function(e) { + data.push(e.data); + if (data.length < 3) { + win.location.reload(); + } else { + setTimeout(t.step_func(function() { + assert_array_equals(data, ["original", "written", "written"]); + t.done(); + }), 500); + } +}); + +add_completion_callback(function() {win.close()}); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_post_1-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_post_1-1.html new file mode 100644 index 00000000000..69e48f77c01 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_post_1-1.html @@ -0,0 +1,10 @@ +<script> +onload = function() {opener.next()} +document.write(Math.random()); +</script> + +<form method="POST" action=""> +<input type=hidden name=test value=test> +<input type=submit> +</form> +<button onclick="location.reload()">Reload</button> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_post_1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_post_1.html new file mode 100644 index 00000000000..080545e23d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/reload_post_1.html @@ -0,0 +1,27 @@ +<!doctype html> +<title>Reload document with POST</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var win = window.open("reload_post_1-1.html"); +var t = async_test(); +var posted = false; +var reloaded = false; + +next = t.step_func(function() { + +if (posted && !reloaded) { + reloaded = true; + win.location.reload(); +} else if (posted && reloaded) { + t.done(); +} else { + posted = true; + win.document.forms[0].submit(); +} + +}); + +add_completion_callback(function() {win.close()}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load-1.html new file mode 100644 index 00000000000..d2ddb196caf --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load-1.html @@ -0,0 +1,10 @@ +<!doctype html> +<script> +opener.history_length = history.length; +</script> +<a onclick="location = 'scripted_click_assign_during_load-2.html'; return false;" href>Click Here</a> +<script> +document.links[0].click() +</script> +<p>Filler image to keep the page loading:</p> +<img src="/media/2048x1360-random.jpg?pipe=trickle(d1:1:r2)"> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load-2.html new file mode 100644 index 00000000000..1bf7f41e00f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +<p>This window should close itself and the test result appear in the original window +<script> +onload = function() { + setTimeout(function() {opener.do_test(history.length); window.close();}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html new file mode 100644 index 00000000000..4d7352f4cfd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_assign_during_load.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Assignment to location with click during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +setup({timeout:3600000}); +var t = async_test(undefined, {timeout:3600000}); +var win = window.open("scripted_click_assign_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-1.html new file mode 100644 index 00000000000..e8f7171f199 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-1.html @@ -0,0 +1,13 @@ +<!doctype html> +<script> +opener.history_length = history.length; +</script> +<a onclick="location.assign('scripted_click_location_assign_during_load-2.html'); return false;" href>Click Here</a> +<script> +document.links[0].click() +</script> +<p>Filler image to keep the page loading:</p> +<img> +<script> +document.images[0].src = "/media/2048x1360-random.jpg?pipe=trickle(d1:1:r2)&random=" + Math.random() +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-2.html new file mode 100644 index 00000000000..1bf7f41e00f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +<p>This window should close itself and the test result appear in the original window +<script> +onload = function() { + setTimeout(function() {opener.do_test(history.length); window.close();}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html new file mode 100644 index 00000000000..64f3ff942fc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html @@ -0,0 +1,16 @@ +<!doctype html> +<title>location.assign with click during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +var t = async_test(); +var win = window.open("scripted_click_location_assign_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length + 1); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-1.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-1.html new file mode 100644 index 00000000000..1fedeade39b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-1.html @@ -0,0 +1,12 @@ +<!doctype html> +<script> +opener.history_length = history.length; +</script> +<form onsubmit="location = 'scripted_form_submit_assign_during_load-2.html'; return false;"> +<input type=submit value="Click Me"> +</form> +<script> +document.forms[0].elements[0].click() +</script> +<p>Filler image to keep the page loading:</p> +<img src="/media/2048x1360-random.jpg?pipe=trickle(d1:1:r2)"> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-2.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-2.html new file mode 100644 index 00000000000..1bf7f41e00f --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load-2.html @@ -0,0 +1,7 @@ +<!doctype html> +<p>This window should close itself and the test result appear in the original window +<script> +onload = function() { + setTimeout(function() {opener.do_test(history.length); window.close();}, 100); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html new file mode 100644 index 00000000000..981b9c9a36c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/history/the-location-interface/scripted_form_submit_assign_during_load.html @@ -0,0 +1,17 @@ +<!doctype html> +<title>Assignment to location with form submit during load</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<p>The popup blocker must be disabled for this test</p> +<div id="log"></div> +<script> +setup({timeout:3600000}); +var t = async_test(undefined, {timeout:3600000}); +var win = window.open("scripted_form_submit_assign_during_load-1.html"); + +var history_length; +do_test = t.step_func(function(new_length) { + assert_equals(new_length, history_length); + t.done(); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html new file mode 100644 index 00000000000..c9559b531ae --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/accessing-other-browsing-contexts/window_length.html @@ -0,0 +1,51 @@ +<!doctype html> +<title>window.length</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +var iframe; +var subframe; +var other_window; +test(function() {assert_equals(window.length, 0)}, "No child browsing contexts"); +test(function() { + iframe = document.createElement("iframe"); + assert_equals(window.length, 0) +}, "iframe not inserted into the document"); + +test(function() { + document.body.appendChild(iframe); + assert_equals(window.length, 1) +}, "One iframe inserted into the document"); + +test(function() { + subframe = document.createElement("iframe"); + iframe.contentDocument.body.appendChild(subframe); + assert_equals(window.length, 1); +}, "Child browsing context has a child browsing context"); + +test(function() { + try { + assert_equals(iframe.contentWindow.length, 1); + } finally { + subframe.parentNode.removeChild(subframe); + } +}, "window.length in child frame"); + +test(function() { + iframe.parentNode.removeChild(iframe); + other_window = window.open(); + assert_equals(window.length, 0); + assert_equals(other_window.length, 0); +}, "Opened window") + +test(function() { + other_window.document.body.appendChild(iframe); + try { + assert_equals(other_window.length, 1); + } finally { + other_window.close(); + } +}, "Iframe in opened window") + +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/callback.js b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/callback.js new file mode 100644 index 00000000000..ae51265a213 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/callback.js @@ -0,0 +1 @@ +opener.callback()
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload-1.html new file mode 100644 index 00000000000..ff577f8de46 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload-1.html @@ -0,0 +1,6 @@ +<!doctype html> +<script> +onbeforeunload = function() { + opener.callback(); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html new file mode 100644 index 00000000000..7ff9fcc0559 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_beforeunload.html @@ -0,0 +1,13 @@ +<!doctype html> +<title>Running beforeunload handler in window.close()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var w = window.open("close_beforeunload-1.html"); +setTimeout(function() { + w.close(); +}, 1000); +callback = function() {t.done()} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer-1.html new file mode 100644 index 00000000000..c50eddd41fa --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer-1.html @@ -0,0 +1 @@ +<!doctype html> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html new file mode 100644 index 00000000000..874f5be9da3 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html @@ -0,0 +1,18 @@ +<!doctype html> +<title>Running defer script in window.close()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(undefined, {timeout:4000}); +t.step(function() { + var w = window.open("close_script_defer-1.html"); + w.document.open() + w.document.write("<script defer src='callback.js'><\/script>") + setTimeout(function() { + w.close(); + }, 1000); +}) +setTimeout(function() {t.done();}, 1000) +callback = t.step(function() {assert_unreached()}) +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload-1.html new file mode 100644 index 00000000000..0c8f2f5749a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload-1.html @@ -0,0 +1,6 @@ +<!doctype html> +<script> +onunload = function() { + opener.callback(); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html new file mode 100644 index 00000000000..d442c6278a4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_unload.html @@ -0,0 +1,13 @@ +<!doctype html> +<title>Running unload handler in window.close()</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var w = window.open("close_unload-1.html"); +setTimeout(function() { + w.close(); +}, 1000); +callback = function() {t.done()} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001-1.html new file mode 100644 index 00000000000..7dd48b41c23 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001-1.html @@ -0,0 +1,2 @@ +<!doctype html> +<p>Now open a new tab and navigate to <a href="001-2.html">001-2</a></p> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001-2.html new file mode 100644 index 00000000000..b1413861a35 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001-2.html @@ -0,0 +1,16 @@ +<!doctype html> +<script> +var result = "FAIL"; +if (opener != null) { + result = "FAIL (did you open this page in a new tab?)"; +} else { + var w = window.open("", "test_name"); + if (w.location.href !== "about:blank") { + result = "FAIL (didn't open an about:blank browsing context)"; + } else { + w.close(); + result = "PASS"; + } + document.write(result); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001.html new file mode 100644 index 00000000000..7b0f21ec046 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/001.html @@ -0,0 +1,3 @@ +<!doctype html> +<title>Accessing named windows from outside the unit of related browsing contexts</title> +<a href="001-1.html" target="test_name">Click here</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002-1.html new file mode 100644 index 00000000000..0e210f351b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002-1.html @@ -0,0 +1,8 @@ +<!doctype html> +<p>Now open a new tab and navigate to <a></a></p> +<script> +href = window.location.href.replace("http://", "http://www.").replace("002-1.html", "002-2.html"); +var a = document.getElementsByTagName("a")[0]; +a.href = href; +a.textContent = href; +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002-2.html new file mode 100644 index 00000000000..b1413861a35 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002-2.html @@ -0,0 +1,16 @@ +<!doctype html> +<script> +var result = "FAIL"; +if (opener != null) { + result = "FAIL (did you open this page in a new tab?)"; +} else { + var w = window.open("", "test_name"); + if (w.location.href !== "about:blank") { + result = "FAIL (didn't open an about:blank browsing context)"; + } else { + w.close(); + result = "PASS"; + } + document.write(result); +} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002.html new file mode 100644 index 00000000000..b568ae8d48a --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/non_automated/002.html @@ -0,0 +1,3 @@ +<!doctype html> +<title>Accessing different-origin named windows from outside the unit of related browsing contexts</title> +<a href="002-1.html" target="test_name">Click here</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-1.html new file mode 100644 index 00000000000..217608e46ef --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-1.html @@ -0,0 +1,20 @@ +<!doctype html> +<iframe></iframe> +<script> +var t = opener.t; + +onload = t.step_func(function() { + setTimeout(t.step_func(function() { + var history_length = history.length; + var iframe = document.getElementsByTagName("iframe")[0]; + iframe.onload = t.step_func(function() { + opener.assert_equals(history.length, history_length + 1); + iframe.parentNode.removeChild(iframe); + opener.assert_equals(history.length, history_length); + t.done(); + window.close(); + }); + iframe.src = "discard_iframe_history_1-2.html;"; + }), 100); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-2.html new file mode 100644 index 00000000000..b43598f2cd8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-2.html @@ -0,0 +1,2 @@ +<!doctype html> +Filler text diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html new file mode 100644 index 00000000000..4d1e473fc08 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>Removing iframe from document removes it from history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var w = window.open("discard_iframe_history_1-1.html"); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2-1.html new file mode 100644 index 00000000000..61e5891ebd6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2-1.html @@ -0,0 +1,22 @@ +<!doctype html> +<iframe></iframe> +<script> +var t = opener.t; + +onload = t.step_func(function() { + setTimeout(t.step_func(function() { + var history_length = history.length; + var iframe = document.getElementsByTagName("iframe")[0]; + iframe.onload = t.step_func(function() { + setTimeout(t.step_func(function() { + opener.assert_equals(history.length, history_length + 1, "History length before iframe removal"); + document.body.innerHTML = ""; + opener.assert_equals(history.length, history_length, "History length after iframe removal"); + t.done(); + window.close(); + }), 100); + }); + iframe.src = "discard_iframe_history_1-2.html"; + }), 100); +}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html new file mode 100644 index 00000000000..89d0fb4c647 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>Removing iframe from document via innerHTML removes it from history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var w = window.open("discard_iframe_history_2-1.html"); +</script> + diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-1.html new file mode 100644 index 00000000000..de3f075d64c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-1.html @@ -0,0 +1,21 @@ +<script> +history_lengths = []; + +var t = opener.t; + +push_length = t.step_func(function () { + history_lengths.push(history.length) +}); + +do_test = t.step_func(function () { + try { + var start_length = history_lengths[0]; + expected = [start_length, start_length + 1, start_length]; + opener.assert_array_equals(history_lengths, expected); + t.done(); + } finally { + window.close(); + } +}); +</script> +<iframe src="discard_iframe_history_3-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-2.html new file mode 100644 index 00000000000..95f9fce5d88 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-2.html @@ -0,0 +1,4 @@ +<a href="discard_iframe_history_3-3.html" onclick="parent.push_length()">Click me</a> +<script> +onload = function() {setTimeout(parent.t.step_func(function() {document.links[0].click()}), 100)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-3.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-3.html new file mode 100644 index 00000000000..4672b0ec303 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-3.html @@ -0,0 +1,4 @@ +<button onclick="var p = parent; p.push_length(); frameElement.parentNode.removeChild(frameElement); p.push_length(); p.do_test();">Click me</button> +<script> +onload = function() {setTimeout(parent.t.step_func(function() {document.getElementsByTagName("button")[0].click()}), 100)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html new file mode 100644 index 00000000000..3046f854f20 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>Removing iframe from document removes it from history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(undefined); +var w = window.open("discard_iframe_history_3-1.html"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-1.html new file mode 100644 index 00000000000..1b5726cdcdc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-1.html @@ -0,0 +1,21 @@ +<script> +history_lengths = []; + +var t = opener.t; + +push_length = t.step_func(function () { + history_lengths.push(history.length) +}); + +do_test = t.step_func(function () { + try { + var start_length = history_lengths[0]; + expected = [start_length, start_length + 1, start_length]; + opener.assert_array_equals(history_lengths, expected); + t.done(); + } finally { + window.close(); + } +}); +</script> +<iframe src="discard_iframe_history_4-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-2.html new file mode 100644 index 00000000000..979b2b28e48 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-2.html @@ -0,0 +1,4 @@ +<a href="discard_iframe_history_4-3.html" onclick="parent.push_length()">Click me</a> +<script> +onload = function() {setTimeout(parent.t.step_func(function() {document.links[0].click()}), 100)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-3.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-3.html new file mode 100644 index 00000000000..b4308f439a5 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-3.html @@ -0,0 +1,4 @@ +<button onclick="var p = parent; p.push_length(); frameElement.parentNode.innerHTML = ''; p.push_length(); p.do_test();">Click me</button> +<script> +onload = function() {setTimeout(parent.t.step_func(function() {document.getElementsByTagName("button")[0].click()}), 100)} +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html new file mode 100644 index 00000000000..ffd444e3bfd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html @@ -0,0 +1,9 @@ +<!doctype html> +<title>Removing iframe from document removes it from history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +var t = async_test(); +var w = window.open("discard_iframe_history_4-1.html"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-1.html new file mode 100644 index 00000000000..99694279891 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-1.html @@ -0,0 +1,27 @@ +<!doctype html> +<iframe></iframe> +<script> +var t = opener.t; +var iframe = document.getElementsByTagName("iframe")[0]; +var history_length; + +function load_frame(src) { + history_length = history.length; + iframe.src = src; + var button = document.getElementsByTagName("button")[0]; + button.parentNode.removeChild(button); +} + +remove_frame = t.step_func(function() { + try { + opener.assert_equals(history.length, history_length + 1, "History length after loading page in iframe"); + iframe.parentNode.removeChild(iframe); + opener.assert_equals(history.length, history_length, "History length after removing iframe"); + t.done(); + } finally { + window.close(); + } +}); + +</script> +<button onclick="load_frame('discard_iframe_history_1-2.html')">Click here</button> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-2.html new file mode 100644 index 00000000000..8c3d1a9dad7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-2.html @@ -0,0 +1,2 @@ +<!doctype html> +<button onclick="parent.remove_frame()">Click here</button> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-manual.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-manual.html new file mode 100644 index 00000000000..d69d7d7a823 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_1-manual.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>Removing iframe from document removes it from history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +setup({timeout:3600000}) +var t = async_test(undefined, {timeout:3600000}); +var w = window.open("discard_iframe_history_1-1.html"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-1.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-1.html new file mode 100644 index 00000000000..bc01cae88c1 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-1.html @@ -0,0 +1,19 @@ +<script> +history_lengths = []; + +function push_length() { + history_lengths.push(history.length) +} + +do_test = opener.t.step_func(function () { + try { + var start_length = history_lengths[0]; + expected = [start_length, start_length + 1, start_length]; + opener.assert_array_equals(history_lengths, expected); + opener.t.done(); + } finally { + window.close(); + } +}); +</script> +<iframe src="discard_iframe_history_2-2.html"></iframe> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-2.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-2.html new file mode 100644 index 00000000000..b25bf5f0019 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-2.html @@ -0,0 +1 @@ +<a href="discard_iframe_history_2-3.html" onclick="parent.push_length()">Click me</a> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-3.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-3.html new file mode 100644 index 00000000000..68847e9a7c9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-3.html @@ -0,0 +1 @@ +<button onclick="var p = parent; p.push_length(); frameElement.parentNode.removeChild(frameElement); p.push_length(); p.do_test();">Click me</button> diff --git a/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-manual.html b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-manual.html new file mode 100644 index 00000000000..27d395d22c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/the-window-object/garbage-collection-and-browsing-contexts/non-automated/discard_iframe_history_2-manual.html @@ -0,0 +1,10 @@ +<!doctype html> +<title>Removing iframe from document removes it from history</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +setup({timeout:3600000}) +var t = async_test(undefined, {timeout:3600000}); +var w = window.open("discard_iframe_history_2-1.html"); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/001-1.html b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/001-1.html new file mode 100644 index 00000000000..d413c3019ff --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/001-1.html @@ -0,0 +1,8 @@ +<!doctype html> +001-1 +<script> +if (window.opener !== null) { + window.opener.postMessage("FAIL", "*"); +} +window.close(); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/001.html b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/001.html new file mode 100644 index 00000000000..2478cdc8fac --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/001.html @@ -0,0 +1,22 @@ +<!doctype html> +<title>Link with target=_blank, rel=noreferrer</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<a href="001-1.html" rel="noreferrer" target="_blank">Link</a> +<script> +var t = async_test(); +var a; +t.step(function() { + a = document.getElementsByTagName("a")[0]; + a.click(); + //This is a bit hacky; if the test passes there isn't a link back to the parent + //window so we have to pass on a timeout. But opening the link could be slow in + //some cases, so there is some possibility of false passes + setTimeout(t.step_func(function() { + t.done(); + }), 1000); +}); + +onmessage = t.step_func(function() {assert_unreached("Opened window had a reference to opener")}); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/002-1.html b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/002-1.html new file mode 100644 index 00000000000..ca8a485de61 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/002-1.html @@ -0,0 +1,8 @@ +<!doctype html> +002-1 +<script> +if (window.opener !== null) { + window.opener.postMessage("PASS", "*"); +} +window.close(); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/002.html b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/002.html new file mode 100644 index 00000000000..e4ef8418900 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/002.html @@ -0,0 +1,26 @@ +<!doctype html> +<title>Link with target=_blank, no rel</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<a href="002-1.html" target="_blank">Link</a> +<script> +var t = async_test(); +var a; +t.step(function() { + a = document.getElementsByTagName("a")[0]; + a.click(); + //This is a bit hacky; if the test fails there isn't a link back to the parent + //window so we have to pass on a timeout. But opening the link could be slow in + //some cases, so there is some possibility of false fails + setTimeout(t.step_func(function() { + assert_unreached("Failed to get callback from opened window"); + }), 1000); +}); + +onmessage = t.step_func(function(e) { + assert_equals(e.data, "PASS"); + t.done() +} +); +</script> diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/MANIFEST new file mode 100644 index 00000000000..efecf51e3c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/browsing-context-names/MANIFEST @@ -0,0 +1,4 @@ +001.html +support 001-1.html +002.html +support 002-1.html diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/MANIFEST b/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/MANIFEST new file mode 100644 index 00000000000..3bc8c0f3f80 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/MANIFEST @@ -0,0 +1 @@ +window-top-001.html diff --git a/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/window-top-001.html b/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/window-top-001.html new file mode 100644 index 00000000000..9dbccfc7cf9 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/browsers/windows/nested-browsing-contexts/window-top-001.html @@ -0,0 +1,63 @@ +<!doctype html> +<meta charset="utf-8"> +<title>window.top</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> +test(function() { + assert_equals(window, top) +}, "Top level browsing context"); + +function step_func(test) { + return function (top_pointer) { + test.step(function() {assert_equals(top_pointer, window);}) + test.done(); + } +} + +var t1 = async_test("One nested iframe"); +t1.step(function() { + var iframe = document.createElement("iframe"); + //iframe.src = "data:text/html," + + iframe.onload = t1.step_func( + function() { + var doc = iframe.contentDocument; + iframe.contentWindow.test_func = step_func(t1); + + var script = doc.createElement("script") + script.textContent = "test_func(top);" + doc.body.appendChild(script); + }); + document.body.appendChild(iframe); +}); + +var t2 = async_test("Two nested iframes"); +t2.step(function() { + var iframe = document.createElement("iframe"); + //iframe.src = "data:text/html," + + iframe.onload = t2.step_func( + function() { + var doc = iframe.contentDocument; + iframe2 = document.createElement("iframe"); + //iframe2.src = "data:text/html," + + iframe2.onload = t2.step_func( + function() { + var doc2 = iframe2.contentDocument; + + iframe2.contentWindow.test_func = step_func(t2); + + var script = doc2.createElement("script") + script.textContent = "test_func(top);" + doc2.body.appendChild(script); + }); + doc.body.appendChild(iframe2); + }); + + document.body.appendChild(iframe); +}); + +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/relevant-mutations.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/relevant-mutations.html index 2b543812c08..a30ae6e89ad 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/relevant-mutations.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/relevant-mutations.html @@ -127,7 +127,7 @@ onload = function() { t('src removed', function(img) { img.removeAttribute('src'); - }, 'error'); + }, 'timeout'); t('srcset set', function(img) { img.srcset = '/images/green-2x2.png'; @@ -139,19 +139,19 @@ onload = function() { t('srcset removed', function(img) { img.removeAttribute('srcset'); - }, 'error'); + }, 'timeout'); t('sizes set', function(img) { img.sizes = ''; - }, 'error'); + }, 'timeout'); t('sizes changed', function(img) { img.sizes = ' '; - }, 'error'); + }, 'timeout'); t('sizes removed', function(img) { img.removeAttribute('sizes'); - }, 'error'); + }, 'timeout'); t('src set to same value', function(img) { img.src = '/images/green-2x2.png'; @@ -159,43 +159,43 @@ onload = function() { t('crossorigin absent to empty', function(img) { img.crossOrigin = ''; - }, 'error'); + }, 'timeout'); t('crossorigin absent to anonymous', function(img) { img.crossOrigin = 'anonymous'; - }, 'error'); + }, 'timeout'); t('crossorigin absent to use-credentials', function(img) { img.crossOrigin = 'use-credentials'; - }, 'error'); + }, 'timeout'); t('crossorigin empty to absent', function(img) { img.removeAttribute('crossorigin'); - }, 'error'); + }, 'timeout'); t('crossorigin empty to use-credentials', function(img) { img.crossOrigin = 'use-credentials'; - }, 'error'); + }, 'timeout'); t('crossorigin anonymous to absent', function(img) { img.removeAttribute('crossorigin'); - }, 'error'); + }, 'timeout'); t('crossorigin anonymous to use-credentials', function(img) { img.crossOrigin = 'use-credentials'; - }, 'error'); + }, 'timeout'); t('crossorigin use-credentials to absent', function(img) { img.removeAttribute('crossorigin'); - }, 'error'); + }, 'timeout'); t('crossorigin use-credentials to empty', function(img) { img.crossOrigin = ''; - }); + }, 'timeout'); t('crossorigin use-credentials to anonymous', function(img) { img.crossOrigin = 'anonymous'; - }); + }, 'timeout'); t('inserted into picture', function(img) { img.nextSibling.appendChild(img); diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/sizes-iframed.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/sizes-iframed.sub.html index c0f3c43f97c..0419da1c0d2 100644 --- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/sizes-iframed.sub.html +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/sizes-iframed.sub.html @@ -59,15 +59,15 @@ <img srcset='/images/green-1x1.png?e41 50w, /images/green-16x16.png?e41 51w' sizes='(min-width:0) 1px'> <img srcset='/images/green-1x1.png?e42 50w, /images/green-16x16.png?e42 51w' sizes='not (min-width:0) 100vw, 1px'> <img srcset='/images/green-1x1.png?e43 50w, /images/green-16x16.png?e43 51w' sizes='(min-width:unknown-mf-value) 100vw, 1px'> -<img srcset='/images/green-1x1.png?e44 50w, /images/green-16x16.png?e44 51w' sizes='not (min-width:unknown-mf-value) 1px'> +<img srcset='/images/green-1x1.png?e44 50w, /images/green-16x16.png?e44 51w' sizes='not (min-width:unknown-mf-value) 100vw, 1px'> <img srcset='/images/green-1x1.png?e45 50w, /images/green-16x16.png?e45 51w' sizes='(min-width:-1px) 100vw, 1px'> -<img srcset='/images/green-1x1.png?e46 50w, /images/green-16x16.png?e46 51w' sizes='not (min-width:-1px) 1px'> +<img srcset='/images/green-1x1.png?e46 50w, /images/green-16x16.png?e46 51w' sizes='not (min-width:-1px) 100vw, 1px'> <img srcset='/images/green-1x1.png?e47 50w, /images/green-16x16.png?e47 51w' sizes='(unknown-mf-name) 100vw, 1px'> -<img srcset='/images/green-1x1.png?e48 50w, /images/green-16x16.png?e48 51w' sizes='not (unknown-mf-name) 1px'> -<img srcset='/images/green-1x1.png?e49 50w, /images/green-16x16.png?e49 51w' sizes='("unknown-general-enclosed") 100vw, 1px'> -<img srcset='/images/green-1x1.png?e50 50w, /images/green-16x16.png?e50 51w' sizes='not ("unknown-general-enclosed") 1px'> +<img srcset='/images/green-1x1.png?e48 50w, /images/green-16x16.png?e48 51w' sizes='not (unknown-mf-name) 100vw, 1px'> +<img srcset='/images/green-1x1.png?e49 50w, /images/green-16x16.png?e49 51w' sizes='(unknown "general-enclosed") 100vw, 1px'> +<img srcset='/images/green-1x1.png?e50 50w, /images/green-16x16.png?e50 51w' sizes='not (unknown "general-enclosed") 100vw, 1px'> <img srcset='/images/green-1x1.png?e51 50w, /images/green-16x16.png?e51 51w' sizes='unknown-general-enclosed(foo) 100vw, 1px'> -<img srcset='/images/green-1x1.png?e52 50w, /images/green-16x16.png?e52 51w' sizes='not unknown-general-enclosed(foo) 1px'> +<img srcset='/images/green-1x1.png?e52 50w, /images/green-16x16.png?e52 51w' sizes='not unknown-general-enclosed(foo) 100vw, 1px'> <img srcset='/images/green-1x1.png?e53 50w, /images/green-16x16.png?e53 51w' sizes='print 100vw, 1px'> <img srcset='/images/green-1x1.png?e54 50w, /images/green-16x16.png?e54 51w' sizes='not print 100vw, 1px'> <img srcset='/images/green-1x1.png?e55 50w, /images/green-16x16.png?e55 51w' sizes='unknown-media-type 100vw, 1px'> @@ -76,12 +76,12 @@ <img srcset='/images/green-1x1.png?e58 50w, /images/green-16x16.png?e58 51w' sizes='(min-width:0) or (unknown-mf-name) 1px'> <img srcset='/images/green-1x1.png?e59 50w, /images/green-16x16.png?e59 51w' sizes='(min-width:0) or (min-width:unknown-mf-value) 1px'> <img srcset='/images/green-1x1.png?e60 50w, /images/green-16x16.png?e60 51w' sizes='(min-width:0) or (min-width:-1px) 1px'> -<img srcset='/images/green-1x1.png?e61 50w, /images/green-16x16.png?e61 51w' sizes='(min-width:0) or ("unknown-general-enclosed") 1px'> +<img srcset='/images/green-1x1.png?e61 50w, /images/green-16x16.png?e61 51w' sizes='(min-width:0) or (unknown "general-enclosed") 1px'> <img srcset='/images/green-1x1.png?e62 50w, /images/green-16x16.png?e62 51w' sizes='(min-width:0) or unknown-general-enclosed(foo) 1px'> <img srcset='/images/green-1x1.png?e63 50w, /images/green-16x16.png?e63 51w' sizes='(min-width:0) or (!) 100vw, 1px'> <img srcset='/images/green-1x1.png?e64 50w, /images/green-16x16.png?e64 51w' sizes='(min-width:0) or unknown-media-type 100vw, 1px'> <img srcset='/images/green-1x1.png?e65 50w, /images/green-16x16.png?e65 51w' sizes='(123) 100vw, 1px'> -<img srcset='/images/green-1x1.png?e66 50w, /images/green-16x16.png?e66 51w' sizes='not (123) 1px'> +<img srcset='/images/green-1x1.png?e66 50w, /images/green-16x16.png?e66 51w' sizes='not (123) 100vw, 1px'> <img srcset='/images/green-1x1.png?e67 50w, /images/green-16x16.png?e67 51w' sizes='(!) 100vw, 1px'> <img srcset='/images/green-1x1.png?e68 50w, /images/green-16x16.png?e68 51w' sizes='not (!) 100vw, 1px'> <img srcset='/images/green-1x1.png?e69 50w, /images/green-16x16.png?e69 51w' sizes='! 100vw, 1px'> @@ -99,7 +99,7 @@ <img srcset='/images/green-1x1.png?e81 50w, /images/green-16x16.png?e81 51w' sizes='(;) 100vw, 1px'> <img srcset='/images/green-1x1.png?e82 50w, /images/green-16x16.png?e82 51w' sizes='not (;) 100vw, 1px'> <img srcset='/images/green-1x1.png?e83 50w, /images/green-16x16.png?e83 51w' sizes='(.) 100vw, 1px'> -<img srcset='/images/green-1x1.png?e84 50w, /images/green-16x16.png?e84 51w' sizes='not (.) 1px'> +<img srcset='/images/green-1x1.png?e84 50w, /images/green-16x16.png?e84 51w' sizes='not (.) 100vw, 1px'> <img srcset='/images/green-1x1.png?e85 50w, /images/green-16x16.png?e85 51w' sizes='; 100vw, 1px'> <img srcset='/images/green-1x1.png?e86 50w, /images/green-16x16.png?e86 51w' sizes='not ; 100vw, 1px'> <img srcset='/images/green-1x1.png?e87 50w, /images/green-16x16.png?e87 51w' sizes=', 1px'> @@ -117,6 +117,14 @@ <img srcset='/images/green-1x1.png?e99 50w, /images/green-16x16.png?e99 51w' sizes='1px, (min-width:0) 100vw'> <img srcset='/images/green-1x1.png?e100 50w, /images/green-16x16.png?e100 51w' sizes='1px, foo bar'> <img srcset='/images/green-1x1.png?e101 50w, /images/green-16x16.png?e101 51w' sizes='(min-width:0) 1px, foo bar'> +<img srcset='/images/green-1x1.png?e102 50w, /images/green-16x16.png?e102 51w' sizes='("grammar does not match") 100vw, 1px'> +<img srcset='/images/green-1x1.png?e103 50w, /images/green-16x16.png?e103 51w' sizes='not ("grammar does not match") 100vw, 1px'> +<img srcset='/images/green-1x1.png?e104 50w, /images/green-16x16.png?e104 51w' sizes='(unknown-general-enclosed !) 100vw, 1px'> +<img srcset='/images/green-1x1.png?e105 50w, /images/green-16x16.png?e105 51w' sizes='not (unknown-general-enclosed !) 100vw, 1px'> +<img srcset='/images/green-1x1.png?e106 50w, /images/green-16x16.png?e106 51w' sizes='(min-width:0) or (unknown-general-enclosed !) 1px'> +<img srcset='/images/green-1x1.png?e107 50w, /images/green-16x16.png?e107 51w' sizes='not ((min-width:0) or (unknown "general-enclosed")) 100vw, 1px'> +<img srcset='/images/green-1x1.png?e108 50w, /images/green-16x16.png?e108 51w' sizes='(max-width:0) or (unknown-general-enclosed !) 100vw, 1px'> +<img srcset='/images/green-1x1.png?e109 50w, /images/green-16x16.png?e109 51w' sizes='not ((max-width:0) or (unknown "general-enclosed")) 100vw, 1px'> <p> <img srcset='/images/green-1x1.png?f1 50w, /images/green-16x16.png?f1 51w' sizes='100vw'> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html index 8b2c01d9b39..97894a11536 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html @@ -120,11 +120,20 @@ }, { tag: "input", - types: ["checkbox", "radio"], + types: ["checkbox"], testData: [ {conditions: {required: false, checked: false, name: "test1"}, expected: false, name: "[target] The required attribute is not set"}, - {conditions: {required: true, checked: true, name: "test1"}, expected: false, name: "[target] The checked attribute is true"}, - {conditions: {required: true, checked: false, name: "test1"}, expected: true, name: "[target] The checked attribute is false"} + {conditions: {required: true, checked: true, name: "test2"}, expected: false, name: "[target] The checked attribute is true"}, + {conditions: {required: true, checked: false, name: "test3"}, expected: true, name: "[target] The checked attribute is false"} + ] + }, + { + tag: "input", + types: ["radio"], + testData: [ + {conditions: {required: false, checked: false, name: "test4"}, expected: false, name: "[target] The required attribute is not set"}, + {conditions: {required: true, checked: true, name: "test5"}, expected: false, name: "[target] The checked attribute is true"}, + {conditions: {required: true, checked: false, name: "test6"}, expected: true, name: "[target] The checked attribute is false"} ] }, { diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js index dfd0d08f17c..1d6ffa37495 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js @@ -290,10 +290,24 @@ var validator = { var old_value = ctl.value; ctl.value = "a"; ctl.value = old_value; - if (ctl.type !== 'email') { - ctl.setSelectionRange(ctl.value.length, ctl.value.length); + if ( + // See https://html.spec.whatwg.org/multipage/#input-type-attr-summary + // and https://html.spec.whatwg.org/multipage/#textFieldSelection + ( + ctl.tagName === "INPUT" && ( + ctl.type === "text" || + ctl.type === "search" || + ctl.type === "tel" || + ctl.type === "url" || + ctl.type === "password" + ) + ) || + ctl.tagName === "TEXTAREA" + ) { + ctl.value += "1"; + ctl.setSelectionRange(ctl.value.length - 1, ctl.value.length); + document.execCommand("Delete"); } - document.execCommand("Delete"); document.designMode = "off"; }, diff --git a/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-readyState.html b/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-readyState.html index 515031687ae..159ee60a2d0 100644 --- a/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-readyState.html +++ b/tests/wpt/web-platform-tests/media-source/SourceBuffer-abort-readyState.html @@ -3,6 +3,7 @@ <head> <meta charset='utf-8'> <title>SourceBuffer#abort() when readyState attribute is not in the "open"</title> + <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> diff --git a/tests/wpt/web-platform-tests/media/2048x1360-random.jpg b/tests/wpt/web-platform-tests/media/2048x1360-random.jpg Binary files differnew file mode 100644 index 00000000000..e985d5c9032 --- /dev/null +++ b/tests/wpt/web-platform-tests/media/2048x1360-random.jpg diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/deny.html b/tests/wpt/web-platform-tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/deny.html index 0cc3f93cf93..3c22591a9fe 100644 --- a/tests/wpt/web-platform-tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/deny.html +++ b/tests/wpt/web-platform-tests/mediacapture-streams/obtaining-local-multimedia-content/navigatorusermedia/deny.html @@ -26,7 +26,7 @@ t.step(function() { t.done(); }), t.step_func(function (error) { - assert_equals(error.name, "PermissionDeniedError", "Permission denied error returned"); + assert_equals(error.name, "SecurityError", "SecurityError returned"); assert_equals(error.constraintName, null, "constraintName attribute not set for permission denied"); t.done(); })); diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html new file mode 100644 index 00000000000..8bade63554d --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_pointermove-on-chorded-mouse-button.html @@ -0,0 +1,76 @@ +<!doctype html> +<html> + <head> + <title>Pointermove on button state changes</title> + <meta name="viewport" content="width=device-width"> + <meta name="assert" content="When a pointer changes button state and does not produce a different event, the pointermove event must be dispatched."/> + <link rel="stylesheet" type="text/css" href="pointerevent_styles.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- Additional helper script for common checks across event types --> + <script type="text/javascript" src="pointerevent_support.js"></script> + </head> + <body onload="run()"> + <h2>PointerMove</h2> + <h4>Test Description: This test checks if pointermove event are triggered by button state changes + <ol> + <li>Put your mouse over the black rectangle</li> + <li>Press a button and hold it</li> + <li>Press a second button</li> + <li>Release the second button</li> + <li>Release the first button to complete the test</li> + </ol> + </h4> + <div id="target0" style="background:black"></div> + <script> + var eventTested = false; + var detected_pointertypes = {}; + var test_pointermove = async_test("pointermove events received for button state changes"); + add_completion_callback(showPointerTypes); + + var step = 0; + var firstButton = 0; + + function run() { + var target0 = document.getElementById("target0"); + + // When a pointer changes button state and the circumstances produce no other pointer event, the pointermove event must be dispatched. + // 5.2.6 + + on_event(target0, "pointerdown", function (event) { + detected_pointertypes[event.pointerType] = true; + test_pointermove.step(function() {assert_true(step === 0, "There must not be more than one pointer down event.");}); + if (step == 0) { + step = 1; + firstButton = event.buttons; + } + }); + on_event(target0, "pointermove", function (event) { + detected_pointertypes[event.pointerType] = true; + + if (step == 1 && event.button != -1) { // second button pressed + test_pointermove.step(function() {assert_true(event.buttons !== firstButton, "The pointermove event must be triggered by pressing a second button.");}); + test_pointermove.step(function() {assert_true((event.buttons & firstButton) != 0, "The first button must still be reported pressed.");}); + step = 2; + } else if (step == 2 && event.button != -1) { // second button released + test_pointermove.step(function() {assert_true(event.buttons === firstButton, "The pointermove event must be triggered by releasing the second button.");}); + step = 3; + } + }); + on_event(target0, "pointerup", function (event) { + detected_pointertypes[event.pointerType] = true; + test_pointermove.step(function() {assert_true(step === 3, "The pointerup event must be triggered after pressing and releasing the second button.");}); + test_pointermove.step(function() {assert_true(event.buttons === 0, "The pointerup event must be triggered by releasing the last pressed button.");}); + test_pointermove.done(); + eventTested = true; + }); + } + </script> + <h1>Pointer Events pointermove on button state changes Tests</h1> + <div id="complete-notice"> + <p>The following pointer types were detected: <span id="pointertype-log"></span>.</p> + <p>Refresh the page to run the tests again.</p> + </div> + <div id="log"></div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/resources/docs/api.md b/tests/wpt/web-platform-tests/resources/docs/api.md index f3540c80e24..d3ac4169d45 100644 --- a/tests/wpt/web-platform-tests/resources/docs/api.md +++ b/tests/wpt/web-platform-tests/resources/docs/api.md @@ -13,8 +13,10 @@ scripts. From an HTML or SVG document, start by importing both `testharness.js` and `testharnessreport.js` scripts into the document: - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> +```html +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +``` Refer to the [Web Workers](#web-workers) section for details and an example on testing within a web worker. @@ -37,12 +39,16 @@ are complete", below. To create a synchronous test use the test() function: - test(test_function, name, properties) +```js +test(test_function, name, properties) +``` `test_function` is a function that contains the code to test. For example a trivial passing test would be: - test(function() {assert_true(true)}, "assert_true with true") +```js +test(function() {assert_true(true)}, "assert_true with true") +``` The function passed in is run in the `test()` call. @@ -59,7 +65,9 @@ applicable to many situations. To create a test, one starts by getting a Test object using async_test: - async_test(name, properties) +```js +async_test(name, properties) +``` e.g. var t = async_test("Simple async test") @@ -67,21 +75,27 @@ e.g. Assertions can be added to the test by calling the step method of the test object with a function containing the test assertions: - t.step(function() {assert_true(true)}); +```js +t.step(function() {assert_true(true)}); +``` When all the steps are complete, the done() method must be called: - t.done(); +```js +t.done(); +``` As a convenience, async_test can also takes a function as first argument. This function is called with the test object as both its `this` object and first argument. The above example can be rewritten as: - async_test(function(t) { - object.some_event = function() { - t.step(function (){assert_true(true); t.done();}); - }; - }, "Simple async test"); +```js +async_test(function(t) { + object.some_event = function() { + t.step(function (){assert_true(true); t.done();}); + }; +}, "Simple async test"); +``` which avoids cluttering the global scope with references to async tests instances. @@ -92,12 +106,16 @@ In many cases it is convenient to run a step in response to an event or a callback. A convenient method of doing this is through the step_func method which returns a function that, when called runs a test step. For example - object.some_event = t.step_func(function(e) {assert_true(e.a)}); +```js +object.some_event = t.step_func(function(e) {assert_true(e.a)}); +``` For asynchronous callbacks that should never execute, `unreached_func` can be used. For example: - object.some_event = t.unreached_func("some_event should not fire"); +```js +object.some_event = t.unreached_func("some_event should not fire"); +``` Keep in mind that other tests could start executing before an Asynchronous Test is finished. @@ -106,7 +124,9 @@ Test is finished. `promise_test` can be used to test APIs that are based on Promises: - promise_test(test_function, name, properties) +```js +promise_test(test_function, name, properties) +``` `test_function` is a function that receives a test as an argument and returns a promise. The test completes when the returned promise resolves. The test fails @@ -114,16 +134,18 @@ if the returned promise rejects. E.g.: - function foo() { - return Promise.resolve("foo"); - } +```js +function foo() { + return Promise.resolve("foo"); +} - promise_test(function() { - return foo() - .then(function(result) { - assert_equals(result, "foo", "foo should return 'foo'"); - }); - }, "Simple example"); +promise_test(function() { + return foo() + .then(function(result) { + assert_equals(result, "foo", "foo should return 'foo'"); + }); +}, "Simple example"); +``` In the example above, `foo()` returns a Promise that resolves with the string "foo". The `test_function` passed into `promise_test` invokes `foo` and attaches @@ -137,7 +159,9 @@ previous Promise Test finishes. `promise_rejects` can be used to test Promises that need to reject: - promise_rejects(test_object, code, promise) +```js +promise_rejects(test_object, code, promise) +``` The `code` argument is equivalent to the same argument to the `assert_throws` function. @@ -145,13 +169,15 @@ function. Here's an example where the `bar()` function returns a Promise that rejects with a TypeError: - function bar() { - return Promise.reject(new TypeError()); - } +```js +function bar() { + return Promise.reject(new TypeError()); +} - promise_test(function(t) { - return promise_rejects(t, new TypeError(), bar); - }, "Another example"); +promise_test(function(t) { + return promise_rejects(t, new TypeError(), bar); +}, "Another example"); +``` `EventWatcher` is a constructor function that allows DOM events to be handled using Promises, which can make it a lot easier to test a very specific series @@ -159,25 +185,27 @@ of events, including ensuring that unexpected events are not fired at any point. Here's an example of how to use `EventWatcher`: - var t = async_test("Event order on animation start"); - - var animation = watchedNode.getAnimations()[0]; - var eventWatcher = new EventWatcher(watchedNode, ['animationstart', - 'animationiteration', - 'animationend']); - - eventWatcher.wait_for(t, 'animationstart').then(t.step_func(function() { - assertExpectedStateAtStartOfAnimation(); - animation.currentTime = END_TIME; // skip to end - // We expect two animationiteration events then an animationend event on - // skipping to the end of the animation. - return eventWatcher.wait_for(['animationiteration', - 'animationiteration', - 'animationend']); - })).then(t.step_func(function() { - assertExpectedStateAtEndOfAnimation(); - test.done(); - })); +```js +var t = async_test("Event order on animation start"); + +var animation = watchedNode.getAnimations()[0]; +var eventWatcher = new EventWatcher(watchedNode, ['animationstart', + 'animationiteration', + 'animationend']); + +eventWatcher.wait_for(t, 'animationstart').then(t.step_func(function() { + assertExpectedStateAtStartOfAnimation(); + animation.currentTime = END_TIME; // skip to end + // We expect two animationiteration events then an animationend event on + // skipping to the end of the animation. + return eventWatcher.wait_for(['animationiteration', + 'animationiteration', + 'animationend']); +})).then(t.step_func(function() { + assertExpectedStateAtEndOfAnimation(); + test.done(); +})); +``` `wait_for` either takes the name of a single event and returns a Promise that will resolve after that event is fired at the watched node, or else it takes an @@ -203,25 +231,29 @@ must call the `done()` function to indicate that the test is complete. All the `assert_*` functions are avaliable as normal, but are called without the normal step function wrapper. For example: - <!doctype html> - <title>Example single-page test</title> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <body> - <script> - assert_equals(document.body, document.getElementsByTagName("body")[0]) - done() - </script> +```html +<!doctype html> +<title>Example single-page test</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> + <script> + assert_equals(document.body, document.getElementsByTagName("body")[0]) + done() + </script> +``` The test title for sinple page tests is always taken from `document.title`. ## Making assertions ## Functions for making assertions start `assert_`. The full list of -asserts avaliable is documented in the [asserts](#asserts) section -below.. The general signature is +asserts avaliable is documented in the [asserts](#list-of-assertions) section +below. The general signature is - assert_something(actual, expected, description) +```js +assert_something(actual, expected, description) +``` although not all assertions precisely match this pattern e.g. `assert_true` only takes `actual` and `description` as arguments. @@ -243,11 +275,13 @@ callbacks to the test. Such callbacks are registered using the `add_cleanup` function on the test object. All registered callbacks will be run as soon as the test result is known. For example - test(function() { - window.some_global = "example"; - this.add_cleanup(function() {delete window.some_global}); - assert_true(false); - }); +```js +test(function() { + window.some_global = "example"; + this.add_cleanup(function() {delete window.some_global}); + assert_true(false); + }); +``` ## Timeouts in Tests ## @@ -263,9 +297,11 @@ that only passes if some event is *not* fired). In this case it is *not* permitted to use the standard `setTimeout` function. Instead one must use the `step_timeout` function: - var t = async_test("Some test that does something after a timeout"); +```js +var t = async_test("Some test that does something after a timeout"); - t.step_timeout(function() {assert_true(true); this.done()}, 2000); +t.step_timeout(function() {assert_true(true); this.done()}, 2000); +``` The difference between `setTimeout` and `step_timeout` is that the latter takes account of the timeout multiplier when computing the @@ -287,7 +323,9 @@ when the test is run on hardware with different performance characteristics to a common desktop computer. In order to opt-in to the longer test timeout, the test must specify a meta element: - <meta name="timeout" content="long"> +```html +<meta name="timeout" content="long"> +``` Occasionally tests may have a race between the harness timing out and a particular test failing; typically when the test waits for some event @@ -302,7 +340,9 @@ Sometimes tests require non-trivial setup that may fail. For this purpose there is a `setup()` function, that may be called with one or two arguments. The two argument version is: - setup(func, properties) +```js +setup(func, properties) +``` The one argument versions may omit either argument. func is a function to be run synchronously. `setup()` becomes a no-op once @@ -352,19 +392,25 @@ There are scenarios in which is is desirable to create a large number of used. To make this easier, the `generate_tests` function allows a single function to be called with each set of parameters in a list: - generate_tests(test_function, parameter_lists, properties) +```js +generate_tests(test_function, parameter_lists, properties) +``` For example: - generate_tests(assert_equals, [ - ["Sum one and one", 1+1, 2], - ["Sum one and zero", 1+0, 1] - ]) +```js +generate_tests(assert_equals, [ + ["Sum one and one", 1+1, 2], + ["Sum one and zero", 1+0, 1] + ]) +``` Is equivalent to: - test(function() {assert_equals(1+1, 2)}, "Sum one and one") - test(function() {assert_equals(1+0, 1)}, "Sum one and zero") +```js +test(function() {assert_equals(1+1, 2)}, "Sum one and one") +test(function() {assert_equals(1+0, 1)}, "Sum one and zero") +``` Note that the first item in each parameter list corresponds to the name of the test. @@ -477,28 +523,32 @@ Here's an example that uses a dedicated worker. `worker.js`: - importScripts("/resources/testharness.js"); +```js +importScripts("/resources/testharness.js"); - test(function(t) { - assert_true(true, "true is true"); - }, "Simple test"); +test(function(t) { + assert_true(true, "true is true"); +}, "Simple test"); - // done() is needed because the testharness is running as if explicit_done - // was specified. - done(); +// done() is needed because the testharness is running as if explicit_done +// was specified. +done(); +``` `test.html`: - <!DOCTYPE html> - <title>Simple test</title> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <div id="log"></div> - <script> +```html +<!DOCTYPE html> +<title>Simple test</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id="log"></div> +<script> - fetch_tests_from_worker(new Worker("worker.js")); +fetch_tests_from_worker(new Worker("worker.js")); - </script> +</script> +``` The argument to the `fetch_tests_from_worker` function can be a [`Worker`](https://html.spec.whatwg.org/multipage/workers.html#dedicated-workers-and-the-worker-interface), diff --git a/tests/wpt/web-platform-tests/resources/docs/idlharness.md b/tests/wpt/web-platform-tests/resources/docs/idlharness.md index 52f590070cd..141077b3a72 100644 --- a/tests/wpt/web-platform-tests/resources/docs/idlharness.md +++ b/tests/wpt/web-platform-tests/resources/docs/idlharness.md @@ -3,36 +3,42 @@ `idlharness.js` automatically generates browser tests for WebIDL interfaces, using the testharness.js framework. To use, first include the following: - <script src=/resources/testharness.js></script> - <script src=/resources/testharnessreport.js></script> - <script src=/resources/WebIDLParser.js></script> - <script src=/resources/idlharness.js></script> +```html +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/WebIDLParser.js></script> +<script src=/resources/idlharness.js></script> +``` Then you'll need some type of IDLs. Here's some script that can be run on a spec written in HTML, which will grab all the elements with `class="idl"`, concatenate them, and replace the body so you can copy-paste: - var s = ""; - [].forEach.call(document.getElementsByClassName("idl"), function(idl) { - //https://www.w3.org/Bugs/Public/show_bug.cgi?id=14914 - if (!idl.classList.contains("extract")) - { - s += idl.textContent + "\n\n"; - } - }); - document.body.innerHTML = '<pre></pre>'; - document.body.firstChild.textContent = s; +```js +var s = ""; +[].forEach.call(document.getElementsByClassName("idl"), function(idl) { + //https://www.w3.org/Bugs/Public/show_bug.cgi?id=14914 + if (!idl.classList.contains("extract")) + { + s += idl.textContent + "\n\n"; + } +}); +document.body.innerHTML = '<pre></pre>'; +document.body.firstChild.textContent = s; +``` Once you have that, put it in your script somehow. The easiest way is to embed it literally in an HTML file with `<script type=text/plain>` or similar, so that you don't have to do any escaping. Another possibility is to put it in a separate .idl file that's fetched via XHR or similar. Sample usage: - var idl_array = new IdlArray(); - idl_array.add_untested_idls("interface Node { readonly attribute DOMString nodeName; };"); - idl_array.add_idls("interface Document : Node { readonly attribute DOMString URL; };"); - idl_array.add_objects({Document: ["document"]}); - idl_array.test(); +```js +var idl_array = new IdlArray(); +idl_array.add_untested_idls("interface Node { readonly attribute DOMString nodeName; };"); +idl_array.add_idls("interface Document : Node { readonly attribute DOMString URL; };"); +idl_array.add_objects({Document: ["document"]}); +idl_array.test(); +``` This tests that `window.Document` exists and meets all the requirements of WebIDL. It also tests that window.document (the result of evaluating the @@ -96,12 +102,16 @@ and outside callers should not use it. interfaces every single time. For instance, HTML defines many interfaces that all inherit from `HTMLElement`, so the HTML test suite has something like - `.add_objects({ - HTMLHtmlElement: ['document.documentElement'], - HTMLHeadElement: ['document.head'], - HTMLBodyElement: ['document.body'], - ... - })` + +```js +.add_objects({ + HTMLHtmlElement: ['document.documentElement'], + HTMLHeadElement: ['document.head'], + HTMLBodyElement: ['document.body'], + ... +}) +``` + and so on for dozens of element types. This would mean that it would retest that each and every one of those elements implements `HTMLElement`, `Element`, and `Node`, which would be thousands of basically redundant tests. diff --git a/tests/wpt/web-platform-tests/resources/idlharness.js b/tests/wpt/web-platform-tests/resources/idlharness.js index 8e41703e658..9f324e089eb 100644 --- a/tests/wpt/web-platform-tests/resources/idlharness.js +++ b/tests/wpt/web-platform-tests/resources/idlharness.js @@ -1286,15 +1286,10 @@ IdlInterface.prototype.test_object = function(desc) exception = e; } - // TODO: WebIDLParser doesn't currently support named legacycallers, so I'm - // not sure what those would look like in the AST - var expected_typeof = this.members.some(function(member) - { - return member.legacycaller - || ("idlType" in member && member.idlType.legacycaller) - || ("idlType" in member && typeof member.idlType == "object" - && "idlType" in member.idlType && member.idlType.idlType == "legacycaller"); - }) ? "function" : "object"; + var expected_typeof = + this.members.some(function(member) { return member.legacycaller; }) + ? "function" + : "object"; this.test_primary_interface_of(desc, obj, exception, expected_typeof); var current_interface = this; diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js index f4c66aae621..4e203c4863a 100644 --- a/tests/wpt/web-platform-tests/resources/testharness.js +++ b/tests/wpt/web-platform-tests/resources/testharness.js @@ -1106,7 +1106,7 @@ policies and contribution forms [3]. function _assert_inherits(name) { return function (object, property_name, description) { - assert(typeof object === "object", + assert(typeof object === "object" || typeof object === "function", name, description, "provided value is not an object"); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/LICENSE b/tests/wpt/web-platform-tests/resources/webidl2/LICENSE new file mode 100644 index 00000000000..fd21d439b09 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Robin Berjon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tests/wpt/web-platform-tests/resources/webidl2/README.md b/tests/wpt/web-platform-tests/resources/webidl2/README.md index 83aa27d71c7..f7d03fcdef3 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/README.md +++ b/tests/wpt/web-platform-tests/resources/webidl2/README.md @@ -61,6 +61,22 @@ In the browser: var tree = WebIDL2.parse("string of WebIDL"); </script> +Advanced Parsing +---------------- + +`parse()` can optionally accept a second parameter, an options object, which can be used to +modify parsing behavior. + +The following options are recognized: +```javascript +{ + allowNestedTypedefs: false # +} +``` +And their meanings are as follows: + +* `allowNestedTypedefs`: Boolean indicating whether the parser should accept `typedef`s as valid members of `interface`s. This is non-standard syntax and therefore the default is `false`. + Errors ------ When there is a syntax error in the WebIDL, it throws an exception object with the following @@ -223,6 +239,7 @@ A dictionary looks like this: { "type": "field", "name": "fillPattern", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -255,6 +272,7 @@ All the members are fields as follows: * `type`: Always "field". * `name`: The name of the field. +* `required`: Boolean indicating whether this is a [required](https://heycam.github.io/webidl/#required-dictionary-member) field. * `idlType`: An [IDL Type](#idl-type) describing what field's type. * `extAttrs`: A list of [extended attributes](#extended-attributes). * `default`: A [default value](#default-and-const-values), absent if there is none. @@ -658,9 +676,8 @@ The fields are as follows: whereas the lack thereof will yield a `null`. If there is an `rhs` field then they are the right-hand side's arguments, otherwise they apply to the extended attribute directly. -* `rhs`: If there is a right-hand side, this will capture its `type` (always - "identifier" in practice, though it may be extended in the future) and its - `value`. +* `rhs`: If there is a right-hand side, this will capture its `type` (which can be + "identifier" or "identifier-list") and its `value`. * `typePair`: If the extended attribute is a `MapClass` this will capture the map's key type and value type respectively. @@ -669,16 +686,34 @@ The fields are as follows: Dictionary fields and operation arguments can take default values, and constants take values, all of which have the following fields: -* `type`: One of string, number, boolean, null, Infinity, or NaN. +* `type`: One of string, number, boolean, null, Infinity, NaN, or sequence. -For string, number, and boolean: +For string, number, boolean, and sequence: -* `value`: The value of the given type. +* `value`: The value of the given type. For sequence, the only possible value is `[]`. For Infinity: * `negative`: Boolean indicating whether this is negative Infinity or not. +### `iterable<>`, `legacyiterable<>`, `maplike<>`, `setlike<>` declarations + +These appear as members of interfaces that look like this: + + { + "type": "maplike", // or "legacyiterable" / "iterable" / "setlike" + "idlType": /* One or two types */, + "readonly": false, // only for maplike and setlike + "extAttrs": [] + } + +The fields are as follows: + +* `type`: Always one of "iterable", "legacyiterable", "maplike" or "setlike". +* `idlType`: An [IDL Type](#idl-type) (or an array of two types) representing the declared type arguments. +* `readonly`: Whether the maplike or setlike is declared as read only. +* `extAttrs`: A list of [extended attributes](#extended-attributes). + Testing ======= diff --git a/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js b/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js index 103a7f48bd8..9e504fc6e1f 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/lib/webidl2.js @@ -214,8 +214,7 @@ ret.idlType = type() || error("Error parsing generic type " + value); all_ws(); if (!consume(OTHER, ">")) error("Unterminated generic type " + value); - all_ws(); - if (consume(OTHER, "?")) ret.nullable = true; + type_suffix(ret); return ret; } else { @@ -331,8 +330,25 @@ all_ws(); var eq = consume(OTHER, "="); if (eq) { + var rhs; all_ws(); - ret.rhs = consume(ID); + if (rhs = consume(ID)) { + ret.rhs = rhs + } + else if (consume(OTHER, "(")) { + // [Exposed=(Window,Worker)] + rhs = []; + var id = consume(ID); + if (id) { + rhs = [id.value]; + } + identifiers(rhs); + consume(OTHER, ")") || error("Unexpected token in extended attribute argument list or type pair"); + ret.rhs = { + type: "identifier-list", + value: rhs + }; + } if (!ret.rhs) return error("No right hand side to extended attribute assignment"); } all_ws(); @@ -380,6 +396,10 @@ if (def) { return def; } + else if (consume(OTHER, "[")) { + if (!consume(OTHER, "]")) error("Default sequence value must be empty"); + return { type: "sequence", value: [] }; + } else { var str = consume(STR) || error("No value for default"); str.value = str.value.replace(/^"/, "").replace(/"$/, ""); @@ -562,7 +582,7 @@ return ret; } else if (consume(ID, "stringifier")) { - ret.stringifier = true; + ret.stringifier = true;- all_ws(); if (consume(OTHER, ";")) return ret; ret.idlType = return_type(); @@ -667,6 +687,69 @@ } return ret; }; + + var iterable_type = function() { + if (consume(ID, "iterable")) return "iterable"; + else if (consume(ID, "legacyiterable")) return "legacyiterable"; + else if (consume(ID, "maplike")) return "maplike"; + else if (consume(ID, "setlike")) return "setlike"; + else return; + } + + var readonly_iterable_type = function() { + if (consume(ID, "maplike")) return "maplike"; + else if (consume(ID, "setlike")) return "setlike"; + else return; + } + + var iterable = function (store) { + all_ws(store, "pea"); + var grabbed = [], + ret = {type: null, idlType: null, readonly: false}; + if (consume(ID, "readonly")) { + ret.readonly = true; + grabbed.push(last_token); + var w = all_ws(); + if (w) grabbed.push(w); + } + var consumeItType = ret.readonly ? readonly_iterable_type : iterable_type; + + var ittype = consumeItType(); + if (!ittype) { + tokens = grabbed.concat(tokens); + return; + } + + var secondTypeRequired = ittype === "maplike"; + var secondTypeAllowed = secondTypeRequired || ittype === "iterable"; + ret.type = ittype; + if (ret.type !== 'maplike' && ret.type !== 'setlike') + delete ret.readonly; + all_ws(); + if (consume(OTHER, "<")) { + ret.idlType = type() || error("Error parsing " + ittype + " declaration"); + all_ws(); + if (secondTypeAllowed) { + var type2 = null; + if (consume(OTHER, ",")) { + all_ws(); + type2 = type(); + all_ws(); + } + if (type2) + ret.idlType = [ret.idlType, type2]; + else if (secondTypeRequired) + error("Missing second type argument in " + ittype + " declaration"); + } + if (!consume(OTHER, ">")) error("Unterminated " + ittype + " declaration"); + all_ws(); + if (!consume(OTHER, ";")) error("Missing semicolon after " + ittype + " declaration"); + } + else + error("Error parsing " + ittype + " declaration"); + + return ret; + } var interface_ = function (isPartial, store) { all_ws(isPartial ? null : store, "pea"); @@ -698,7 +781,9 @@ ret.members.push(cnt); continue; } - var mem = serialiser(store ? mems : null) || + var mem = (opt.allowNestedTypedefs && typedef(store ? mems : null)) || + iterable(store ? mems : null) || + serialiser(store ? mems : null) || attribute(store ? mems : null) || operation(store ? mems : null) || error("Unknown member"); @@ -741,15 +826,19 @@ } var ea = extended_attrs(store ? mems : null); all_ws(store ? mems : null, "pea"); + var required = consume(ID, "required"); var typ = type() || error("No type for dictionary member"); all_ws(); var name = consume(ID) || error("No name for dictionary member"); + var dflt = default_(); + if (required && dflt) error("Required member must not have a default"); ret.members.push({ type: "field" , name: name.value + , required: !!required , idlType: typ , extAttrs: ea - , "default": default_() + , "default": dflt }); all_ws(); consume(OTHER, ";") || error("Unterminated dictionary member"); @@ -818,7 +907,6 @@ all_ws(store ? vals : null); if (consume(OTHER, "}")) { all_ws(); - if (saw_comma) error("Trailing comma in enum"); consume(OTHER, ";") || error("No semicolon after enum"); return ret; } diff --git a/tests/wpt/web-platform-tests/resources/webidl2/package.json b/tests/wpt/web-platform-tests/resources/webidl2/package.json index 5a0637ee110..c5ae7da2d59 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/package.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/package.json @@ -1,22 +1,21 @@ { - "name": "webidl2" -, "description": "A WebIDL Parser" -, "version": "2.0.4" -, "author": "Robin Berjon <robin@berjon.com>" -, "license": "MIT" -, "dependencies": { - } -, "devDependencies": { - "mocha": "1.7.4" - , "expect.js": "0.2.0" - , "underscore": "1.4.3" - , "jsondiffpatch": "0.0.5" - , "benchmark": "*" - , "microtime": "*" - } -, "scripts": { - "test": "mocha" - } -, "repository": "git://github.com/darobin/webidl2.js" -, "main": "index" + "name": "webidl2", + "description": "A WebIDL Parser", + "version": "2.0.11", + "author": "Robin Berjon <robin@berjon.com>", + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "mocha": "2.2.5", + "expect.js": "0.3.1", + "underscore": "1.8.3", + "jsondiffpatch": "0.1.31", + "benchmark": "*", + "microtime": "1.4.2" + }, + "scripts": { + "test": "mocha" + }, + "repository": "git://github.com/darobin/webidl2.js", + "main": "index" } diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/dict-required-default.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/dict-required-default.widl new file mode 100644 index 00000000000..412448d2261 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/dict-required-default.widl @@ -0,0 +1,5 @@ +// https://heycam.github.io/webidl/#required-dictionary-member +// "A required dictionary member must not have a default value." +dictionary Dict { + required long member = 0; +}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/maplike-1type.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/maplike-1type.widl new file mode 100644 index 00000000000..33c274b8b9a --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/maplike-1type.widl @@ -0,0 +1,3 @@ +interface MapLikeOneType { + maplike<long>; +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/readonly-iterable.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/readonly-iterable.widl new file mode 100644 index 00000000000..fc4ae2be908 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/readonly-iterable.widl @@ -0,0 +1,3 @@ +interface ReadonlyIterable { + readonly iterable<long>; +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/setlike-2types.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/setlike-2types.widl new file mode 100644 index 00000000000..1ecae22c010 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/setlike-2types.widl @@ -0,0 +1,3 @@ +interface SetLikeTwoTypes { + setlike<long, long>; +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/typedef-nested.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/typedef-nested.widl new file mode 100644 index 00000000000..106f30b8f72 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/idl/typedef-nested.widl @@ -0,0 +1,22 @@ + + interface Point { + attribute float x; + attribute float y; + }; + + + interface Rect { + attribute Point topleft; + attribute Point bottomright; + }; + + interface Widget { + typedef sequence<Point> PointSequence; + + readonly attribute Rect bounds; + + boolean pointWithinBounds(Point p); + boolean allPointsWithinBounds(PointSequence ps); + }; + + typedef [Clamp] octet value;
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/dict-required-default.json b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/dict-required-default.json new file mode 100644 index 00000000000..c5afeca85c0 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/dict-required-default.json @@ -0,0 +1,4 @@ +{ + "message": "Required member must not have a default" +, "line": 4 +} diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/maplike-1type.json b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/maplike-1type.json new file mode 100644 index 00000000000..859a820a491 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/maplike-1type.json @@ -0,0 +1,4 @@ +{ + "message": "Missing second type argument in maplike declaration", + "line": 2 +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/readonly-iterable.json b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/readonly-iterable.json new file mode 100644 index 00000000000..c6f52a24615 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/readonly-iterable.json @@ -0,0 +1,4 @@ +{ + "message": "Invalid operation", + "line": 2 +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/setlike-2types.json b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/setlike-2types.json new file mode 100644 index 00000000000..c9e49b6756d --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/setlike-2types.json @@ -0,0 +1,4 @@ +{ + "message": "Unterminated setlike declaration", + "line": 2 +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/typedef-nested.json b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/typedef-nested.json new file mode 100644 index 00000000000..d7fb9182f86 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/invalid/json/typedef-nested.json @@ -0,0 +1,4 @@ +{ + "message": "Invalid operation" +, "line": 14 +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js index 6f9de3637d1..712542a6be8 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax.js @@ -17,11 +17,16 @@ describe("Parses all of the IDLs to produce the correct ASTs", function () { for (var i = 0, n = idls.length; i < n; i++) { var idl = idls[i], json = jsons[i]; + var func = (function (idl, json) { return function () { try { + var optFile = pth.join(__dirname, "syntax/opt", pth.basename(json)); + var opt = undefined; + if (fs.existsSync(optFile)) + opt = JSON.parse(fs.readFileSync(optFile, "utf8")); var diff = jdp.diff(JSON.parse(fs.readFileSync(json, "utf8")), - wp.parse(fs.readFileSync(idl, "utf8"))); + wp.parse(fs.readFileSync(idl, "utf8"), opt)); if (diff && debug) console.log(JSON.stringify(diff, null, 4)); expect(diff).to.be(undefined); } diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/callback.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/callback.widl index d92f6a18c0a..adaf75e049c 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/callback.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/callback.widl @@ -2,4 +2,6 @@ callback AsyncOperationCallback = void (DOMString status); callback interface EventHandler { void eventOccurred(DOMString details); -};
\ No newline at end of file +}; + +callback SortCallback = boolean (any a, any b); diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/dictionary.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/dictionary.widl index f46b7ba7806..c64a14c8590 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/dictionary.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/dictionary.widl @@ -3,6 +3,10 @@ dictionary PaintOptions { DOMString? fillPattern = "black"; DOMString? strokePattern = null; Point position; + // https://heycam.github.io/webidl/#dfn-optional-argument-default-value allows sequences to default to "[]". + sequence<long> seq = []; + // https://heycam.github.io/webidl/#required-dictionary-member + required long reqSeq; }; partial dictionary A { diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/enum.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/enum.widl index 851fca2e6f6..37c4ffddee3 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/enum.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/enum.widl @@ -5,4 +5,6 @@ interface Meal { attribute float size; // in grams void initialize(MealType type, float size); -};
\ No newline at end of file +}; + +enum AltMealType { "rice", "noodles", "other", };
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl new file mode 100644 index 00000000000..f769c2559cc --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/extended-attributes.widl @@ -0,0 +1,6 @@ +// Extracted from http://www.w3.org/TR/2015/WD-service-workers-20150205/ + +[Global=(Worker,ServiceWorker), Exposed=ServiceWorker] +interface ServiceWorkerGlobalScope : WorkerGlobalScope { + +};
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl index 18c79a50d8d..02b64572a42 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/generic.widl @@ -1,5 +1,6 @@ interface Foo { Promise<ResponsePromise<sequence<DOMString?>>> bar(); + readonly attribute Promise<DOMString>[] baz; }; // Extracted from https://slightlyoff.github.io/ServiceWorker/spec/service_worker/ on 2014-05-08 @@ -14,4 +15,3 @@ interface ServiceWorkerClients { interface FetchEvent : Event { ResponsePromise<any> default(); }; - diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/iterable.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/iterable.widl new file mode 100644 index 00000000000..c7dfafa4daa --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/iterable.widl @@ -0,0 +1,7 @@ +interface IterableOne { + iterable<long>; +}; + +interface IterableTwo { + iterable<short, double?>; +};
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/legacyiterable.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/legacyiterable.widl new file mode 100644 index 00000000000..eafa7cf0445 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/legacyiterable.widl @@ -0,0 +1,3 @@ +interface LegacyIterable { + legacyiterable<long>; +}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/maplike.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/maplike.widl new file mode 100644 index 00000000000..7b79b388802 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/maplike.widl @@ -0,0 +1,7 @@ +interface MapLike { + maplike<long, float>; +}; + +interface ReadOnlyMapLike { + readonly maplike<long, float>; +}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/setlike.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/setlike.widl new file mode 100644 index 00000000000..890e8e5a759 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/setlike.widl @@ -0,0 +1,7 @@ +interface SetLike { + setlike<long>; +}; + +interface ReadOnlySetLike { + readonly setlike<long>; +}; diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl new file mode 100644 index 00000000000..106f30b8f72 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/idl/typedef-nested.widl @@ -0,0 +1,22 @@ + + interface Point { + attribute float x; + attribute float y; + }; + + + interface Rect { + attribute Point topleft; + attribute Point bottomright; + }; + + interface Widget { + typedef sequence<Point> PointSequence; + + readonly attribute Rect bounds; + + boolean pointWithinBounds(Point p); + boolean allPointsWithinBounds(PointSequence ps); + }; + + typedef [Clamp] octet value;
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/callback.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/callback.json index 19ef4a6fa4e..43a51751046 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/callback.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/callback.json @@ -72,5 +72,48 @@ ], "inheritance": null, "extAttrs": [] + }, + { + "type": "callback", + "name": "SortCallback", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "boolean" + }, + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "any" + }, + "name": "a" + }, + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "any" + }, + "name": "b" + } + ], + "extAttrs": [] } ]
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary-inherits.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary-inherits.json index 367d7b1b4f3..fbb2338a8df 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary-inherits.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary-inherits.json @@ -7,6 +7,7 @@ { "type": "field", "name": "fillPattern", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -24,6 +25,7 @@ { "type": "field", "name": "strokePattern", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -40,6 +42,7 @@ { "type": "field", "name": "position", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -62,6 +65,7 @@ { "type": "field", "name": "hydrometry", + "required": false, "idlType": { "sequence": false, "generic": null, diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary.json index 7396cabae09..a7c89caab23 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/dictionary.json @@ -7,6 +7,7 @@ { "type": "field", "name": "fillPattern", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -24,6 +25,7 @@ { "type": "field", "name": "strokePattern", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -40,6 +42,7 @@ { "type": "field", "name": "position", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -49,6 +52,45 @@ "idlType": "Point" }, "extAttrs": [] + }, + { + "type": "field", + "name": "seq", + "required": false, + "idlType": { + "sequence": true, + "generic": "sequence", + "nullable": false, + "array": false, + "union": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + } + }, + "extAttrs": [], + "default": { + "type": "sequence", + "value": [] + } + }, + { + "type": "field", + "name": "reqSeq", + "required": true, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "extAttrs": [] } ], "inheritance": null, @@ -62,6 +104,7 @@ { "type": "field", "name": "h", + "required": false, "idlType": { "sequence": false, "generic": null, @@ -75,6 +118,7 @@ { "type": "field", "name": "d", + "required": false, "idlType": { "sequence": false, "generic": null, diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/enum.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/enum.json index bd9058c594f..196ee4e6405 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/enum.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/enum.json @@ -101,5 +101,15 @@ ], "inheritance": null, "extAttrs": [] + }, + { + "type": "enum", + "name": "AltMealType", + "values": [ + "rice", + "noodles", + "other" + ], + "extAttrs": [] } ]
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json new file mode 100644 index 00000000000..228c4b824be --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/extended-attributes.json @@ -0,0 +1,30 @@ +[ + { + "type": "interface", + "name": "ServiceWorkerGlobalScope", + "partial": false, + "members": [], + "inheritance": "WorkerGlobalScope", + "extAttrs": [ + { + "name": "Global", + "arguments": null, + "rhs": { + "type": "identifier-list", + "value": [ + "Worker", + "ServiceWorker" + ] + } + }, + { + "name": "Exposed", + "arguments": null, + "rhs": { + "type": "identifier", + "value": "ServiceWorker" + } + } + ] + } +]
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/generic.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/generic.json index 70eafdedef8..e39654ffdb2 100644 --- a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/generic.json +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/generic.json @@ -45,6 +45,31 @@ "name": "bar", "arguments": [], "extAttrs": [] + }, + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": true, + "idlType": { + "sequence": false, + "generic": "Promise", + "nullable": false, + "array": 1, + "nullableArray": [false], + "union": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "DOMString" + } + }, + "name": "baz", + "extAttrs": [] } ], "inheritance": null, diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/iterable.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/iterable.json new file mode 100644 index 00000000000..3e38991dd9d --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/iterable.json @@ -0,0 +1,55 @@ +[ + { + "type": "interface", + "name": "IterableOne", + "partial": false, + "members": [ + { + "type": "iterable", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + }, + { + "type": "interface", + "name": "IterableTwo", + "partial": false, + "members": [ + { + "type": "iterable", + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "short" + }, + { + "sequence": false, + "generic": null, + "nullable": true, + "array": false, + "union": false, + "idlType": "double" + } + ], + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + } +] + diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/legacyiterable.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/legacyiterable.json new file mode 100644 index 00000000000..e63f99de43f --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/legacyiterable.json @@ -0,0 +1,24 @@ +[ + { + "type": "interface", + "name": "LegacyIterable", + "partial": false, + "members": [ + { + "type": "legacyiterable", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + } +] + diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/maplike.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/maplike.json new file mode 100644 index 00000000000..017d8b3f3ec --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/maplike.json @@ -0,0 +1,67 @@ +[ + { + "type": "interface", + "name": "MapLike", + "partial": false, + "members": [ + { + "type": "maplike", + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "float" + } + ], + "readonly": false, + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + }, + { + "type": "interface", + "name": "ReadOnlyMapLike", + "partial": false, + "members": [ + { + "type": "maplike", + "idlType": [ + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "float" + } + ], + "readonly": true, + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + } +] + diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/setlike.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/setlike.json new file mode 100644 index 00000000000..d44043a944a --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/setlike.json @@ -0,0 +1,47 @@ +[ + { + "type": "interface", + "name": "SetLike", + "partial": false, + "members": [ + { + "type": "setlike", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "readonly": false, + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + }, + { + "type": "interface", + "name": "ReadOnlySetLike", + "partial": false, + "members": [ + { + "type": "setlike", + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "long" + }, + "readonly": true, + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + } +] + diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json new file mode 100644 index 00000000000..76d138408dd --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/json/typedef-nested.json @@ -0,0 +1,226 @@ +[ + { + "type": "interface", + "name": "Point", + "partial": false, + "members": [ + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "float" + }, + "name": "x", + "extAttrs": [] + }, + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "float" + }, + "name": "y", + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + }, + { + "type": "interface", + "name": "Rect", + "partial": false, + "members": [ + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Point" + }, + "name": "topleft", + "extAttrs": [] + }, + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Point" + }, + "name": "bottomright", + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + }, + { + "type": "interface", + "name": "Widget", + "partial": false, + "members": [ + { + "type": "typedef", + "typeExtAttrs": [], + "idlType": { + "sequence": true, + "generic": "sequence", + "nullable": false, + "array": false, + "union": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Point" + } + }, + "name": "PointSequence", + "extAttrs": [] + }, + { + "type": "attribute", + "static": false, + "stringifier": false, + "inherit": false, + "readonly": true, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Rect" + }, + "name": "bounds", + "extAttrs": [] + }, + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "boolean" + }, + "name": "pointWithinBounds", + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "Point" + }, + "name": "p" + } + ], + "extAttrs": [] + }, + { + "type": "operation", + "getter": false, + "setter": false, + "creator": false, + "deleter": false, + "legacycaller": false, + "static": false, + "stringifier": false, + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "boolean" + }, + "name": "allPointsWithinBounds", + "arguments": [ + { + "optional": false, + "variadic": false, + "extAttrs": [], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "PointSequence" + }, + "name": "ps" + } + ], + "extAttrs": [] + } + ], + "inheritance": null, + "extAttrs": [] + }, + { + "type": "typedef", + "typeExtAttrs": [ + { + "name": "Clamp", + "arguments": null + } + ], + "idlType": { + "sequence": false, + "generic": null, + "nullable": false, + "array": false, + "union": false, + "idlType": "octet" + }, + "name": "value", + "extAttrs": [] + } +]
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/opt/typedef-nested.json b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/opt/typedef-nested.json new file mode 100644 index 00000000000..f0794e74e07 --- /dev/null +++ b/tests/wpt/web-platform-tests/resources/webidl2/test/syntax/opt/typedef-nested.json @@ -0,0 +1,3 @@ +{ + "allowNestedTypedefs": true +}
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/service-workers/cache-storage/resources/iframe.html b/tests/wpt/web-platform-tests/service-workers/cache-storage/resources/iframe.html index f4f418b8ddb..a2f1e502bb3 100644 --- a/tests/wpt/web-platform-tests/service-workers/cache-storage/resources/iframe.html +++ b/tests/wpt/web-platform-tests/service-workers/cache-storage/resources/iframe.html @@ -4,10 +4,15 @@ window.onmessage = function(e) { var id = e.data.id; try { - self.caches; - window.parent.postMessage({id: id, result: 'allowed'}, '*'); + var name = 'checkallowed'; + self.caches.open(name).then(function (cache) { + self.caches.delete(name); + window.parent.postMessage({id: id, result: 'allowed'}, '*'); + }).catch(function(e) { + window.parent.postMessage({id: id, result: 'denied', name: e.name, message: e.message}, '*'); + }); } catch (e) { - window.parent.postMessage({id: id, result: 'denied', name: e.name, message: e.message}, '*'); + window.parent.postMessage({id: id, result: 'unexpecteddenied', name: e.name, message: e.message}, '*'); } }; </script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/Element-interface-attachShadow.html b/tests/wpt/web-platform-tests/shadow-dom/Element-interface-attachShadow.html new file mode 100644 index 00000000000..adc51633cf5 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/Element-interface-attachShadow.html @@ -0,0 +1,95 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: Attaching a ShadowRoot</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="Element.prototype.attachShadow should create an instance of ShadowRoot"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#widl-Element-attachShadow-ShadowRoot-ShadowRootInit-shadowRootInitDict"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel='stylesheet' href='/resources/testharness.css'> +</head> +<body> +<div id="log"></div> +<script> + +test(function () { + assert_true('attachShadow' in Element.prototype, 'Element.prototype.attachShadow must exist'); + assert_equals(typeof(document.createElement('div').attachShadow), 'function', 'An instance of div must have attachShadow which is a function'); +}, 'Check the existence of Element.attachShadow'); + +test(function () { + assert_false('attachShadow' in Node.prototype, 'Node.prototype.attachShadow must not exist'); + assert_false('attachShadow' in CharacterData.prototype, 'CharacterData.prototype.attachShadow must not exist'); + assert_false('attachShadow' in Comment.prototype, 'Comment.prototype.attachShadow must not exist'); + assert_equals(typeof(document.createComment('').attachShadow), 'undefined', 'An instance of comment must not have attachShadow'); + assert_false('attachShadow' in Document.prototype, 'Document.prototype.attachShadow must not exist'); + assert_equals(typeof(document.attachShadow), 'undefined', 'An instance of document must not have attachShadow which is a function'); + assert_false('attachShadow' in DocumentFragment.prototype, 'DocumentFragment.prototype.attachShadow must not exist'); + assert_equals(typeof((new DOMParser()).parseFromString('', 'text/html').attachShadow), 'undefined', 'An instance of document must not have attachShadow which is a function'); + assert_false('attachShadow' in Text.prototype, 'Text.prototype.attachShadow must not exist'); + assert_equals(typeof(document.createTextNode('').attachShadow), 'undefined', 'An instance of text node must not have attachShadow'); +}, 'Nodes other than Element should not have attachShadow'); + +test(function () { + assert_throws({'name': 'TypeError'}, function () { + document.createElement('div').attachShadow({}) + }, 'attachShadow must throw a TypeError when mode is omitted'); + + assert_throws({'name': 'TypeError'}, function () { + document.createElement('div').attachShadow({mode: true}) + }, 'attachShadow must throw a TypeError when mode is a boolean'); + + assert_throws({'name': 'TypeError'}, function () { + document.createElement('div').attachShadow({mode: 1}) + }, 'attachShadow must throw a TypeError when mode is 1'); +}, 'Element.attachShadow must throw a TypeError if mode is not "open" or "closed"'); + +test(function () { + assert_true(document.createElement('div').attachShadow({mode: "open"}) instanceof ShadowRoot, + 'attachShadow({mode: "open"}) should create an instance of ShadowRoot'); + assert_true(document.createElement('div').attachShadow({mode: "closed"}) instanceof ShadowRoot, + 'attachShadow({mode: "closed"}) should create an instance of ShadowRoot'); +}, 'Element.attachShadow must create an instance of ShadowRoot'); + +test(function () { + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "open"}); + div.attachShadow({mode: "open"}); + }, 'Calling attachShadow({mode: "open"}) twice on the same element must throw'); + + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "closed"}); + div.attachShadow({mode: "closed"}); + }, 'Calling attachShadow({mode: "closed"}) twice on the same element must throw'); + + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "open"}); + div.attachShadow({mode: "closed"}); + }, 'Calling attachShadow({mode: "closed"}) after attachShadow({mode: "open"}) on the same element must throw'); + + assert_throws({'name': 'InvalidStateError'}, function () { + var div = document.createElement('div'); + div.attachShadow({mode: "closed"}); + div.attachShadow({mode: "open"}); + }, 'Calling attachShadow({mode: "open"}) after attachShadow({mode: "closed"}) on the same element must throw'); +}, 'Element.attachShadow must throw a InvalidStateError if the context object already hosts a shadow tree'); + +test(function () { + for (var elementName of ['button', 'details', 'input', 'marquee', 'meter', 'progress', 'select', 'textarea', 'keygen']) { + assert_throws({'name': 'NotSupportedError'}, function () { + document.createElement(elementName).attachShadow({mode: "open"}); + }, 'Calling attachShadow({mode: "open"}) on ' + elementName + ' element must throw'); + + assert_throws({'name': 'NotSupportedError'}, function () { + document.createElement(elementName).attachShadow({mode: "closed"}); + }, 'Calling attachShadow({mode: "closed"}) on ' + elementName + ' element must throw'); + } +}, 'Element.attachShadow must throw a NotSupportedError for button, details, input, marquee, meter, progress, select, textarea, and keygen elements'); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html b/tests/wpt/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html new file mode 100644 index 00000000000..d9ca83e3a25 --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/Element-interface-shadowRoot-attribute.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: Element interface shadowRoot attribute</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="shadowRoot attribute on Element interface must return the associated open shadow tree if there is one"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#the-shadowroot-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel='stylesheet' href='/resources/testharness.css'> +</head> +<body> +<div id="log"></div> +<script> + +test(function () { + assert_true('shadowRoot' in Element.prototype, 'shadowRoot must be defined on Element prototype'); + assert_true('shadowRoot' in document.createElement('div'), 'shadowRoot must be defined on an instance of div element'); + assert_false('shadowRoot' in Node.prototype, 'shadowRoot must not be defined on Node prototype'); + assert_false('shadowRoot' in Text.prototype, 'shadowRoot must not be defined on Text prototype'); + assert_false('shadowRoot' in document.createTextNode(''), 'shadowRoot must not be defined on an instance of Text node'); + assert_false('shadowRoot' in Comment.prototype, 'shadowRoot must not be defined on Comment prototype'); + assert_false('shadowRoot' in document.createComment(''), 'shadowRoot must not be defined on an instance of Comment node'); + assert_false('shadowRoot' in Document.prototype, 'shadowRoot must not be defined on Document prototype'); + assert_false('shadowRoot' in document, 'shadowRoot must not be defined on an instance of Document'); + assert_false('shadowRoot' in DocumentFragment.prototype, 'shadowRoot must not be defined on DocumentFragment prototype'); + assert_false('shadowRoot' in (new DOMParser).parseFromString('', 'text/html'), 'shadowRoot must not be defined on an instance of DocumentFragment node'); +}, 'shadowRoot must be defined on Element prototype'); + +test(function () { + var host = document.createElement('div'); + assert_equals(host.shadowRoot, null, 'shadowRoot must return null when the host does not have a shadow tree attached to it'); + + var openShadowRoot = host.attachShadow({mode: 'open'}); + assert_equals(host.shadowRoot, openShadowRoot, 'shadowRoot must return the open shadow root attachShadow attached'); +}, 'shadowRoot attribute must return the open shadow root associated with the element'); + +test(function () { + var host = document.createElement('div'); + host.attachShadow({mode: 'closed'}); + assert_equals(host.shadowRoot, null); +}, 'shadowRoot attribute must return null if the shadow root attached to the element is closed'); + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/shadow-dom/ShadowRoot-interface.html b/tests/wpt/web-platform-tests/shadow-dom/ShadowRoot-interface.html new file mode 100644 index 00000000000..61a9861edda --- /dev/null +++ b/tests/wpt/web-platform-tests/shadow-dom/ShadowRoot-interface.html @@ -0,0 +1,112 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: ShadowRoot interface</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="ShadowRoot interface and its attributes must be defined"> +<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#the-shadowroot-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<link rel='stylesheet' href='/resources/testharness.css'> +</head> +<body> +<div id="log"></div> +<script> + +test(function () { + assert_true('ShadowRoot' in window, '"ShadowRoot" exists on window'); +}, 'Check the existence of ShadowRoot interface'); + +test(function () { + assert_equals(ShadowRoot.prototype.__proto__, DocumentFragment.prototype, 'ShadowRoot must inherit from DocumentFragment'); +}, 'ShadowRoot must inherit from DocumentFragment'); + +test(function () { + assert_throws({'name': 'TypeError'}, function () { new ShadowRoot(); }, 'new ShadowRoot() must throw a TypeError'); +}, 'ShadowRoot must not be a constructor'); + +function testActiveElement(mode) { + test(function () { + var host = document.createElement('div'); + document.body.appendChild(host); + var shadowRoot = host.attachShadow({'mode': mode}); + shadowRoot.appendChild(document.createElement('input')); + assert_equals(shadowRoot.activeElement, null, 'ShadowRoot.host must return null if an ' + mode + ' shadow tree does not have a focused element'); + shadowRoot.firstChild.focus(); + assert_equals(shadowRoot.activeElement, shadowRoot.firstChild, 'ShadowRoot.host must return the focused element of an ' + mode + ' shadow tree'); + host.remove(); + assert_equals(shadowRoot.activeElement, null, 'ShadowRoot.host must return null if an ' + mode + ' shadow tree lost focus'); + }, 'ShadowRoot.activeElement must return the focused element of the context object when shadow root is ' + mode + '.'); +} + +testActiveElement('open'); +testActiveElement('closed'); + +test(function () { + var host1 = document.createElement('div'); + assert_equals(host1.attachShadow({'mode': 'open'}).host, host1, 'ShadowRoot.host must return the shadow host of an open shadow tree') + + var host2 = document.createElement('div'); + assert_equals(host2.attachShadow({'mode': 'closed'}).host, host2, 'ShadowRoot.host must return the shadow host of a closed shadow tree'); +}, 'ShadowRoot.host must return the shadow host of the context object.'); + +function testInnerHTML(mode) { + test(function () { + var host = document.createElement('div'); + var shadowRoot = host.attachShadow({'mode': mode}); + assert_equals(shadowRoot.innerHTML, '', 'ShadowRoot.innerHTML must be an empty string when the shadow root does not have any children'); + + shadowRoot.appendChild(document.createTextNode('hello')); + assert_equals(shadowRoot.innerHTML, 'hello', 'ShadowRoot.innerHTML must serialize a text node child'); + + shadowRoot.appendChild(document.createElement('span')); + assert_equals(shadowRoot.innerHTML, 'hello<span></span>', 'ShadowRoot.innerHTML must serialize a HTML element child'); + }, 'ShadowRoot.innerHTML must return the result of the HTML fragment serialization algorithm when shadow root is ' + mode + '.'); +} + +testInnerHTML('open'); +testInnerHTML('closed'); + +function testSetInnerHTML(mode) { + test(function () { + var host = document.createElement('div'); + var shadowRoot = host.attachShadow({'mode': mode}); + shadowRoot.innerHTML = 'hello'; + assert_equals(shadowRoot.childNodes.length, 1, 'ShadowRoot.innerHTML = "hello" must insert a single child (text node)'); + assert_true(shadowRoot.firstChild instanceof Text, 'The first child of the shadow root after ShadowRoot.innerHTML = "hello" must be a Text node'); + assert_equals(shadowRoot.firstChild.data, 'hello', 'The first Text node should contain the string "hello" after ShadowRoot.innerHTML = "hello"'); + + shadowRoot.innerHTML = '<b>hello</b>'; + assert_equals(shadowRoot.childNodes.length, 1, 'ShadowRoot.innerHTML = "<b>hello</b>" must insert a single child (b)'); + assert_true(shadowRoot.firstChild instanceof HTMLElement, 'The first child of the shadow root after ShadowRoot.innerHTML = "<b>hello</b>" must be a HTML element'); + assert_equals(shadowRoot.firstChild.localName, 'b', 'The local name of the shadow root\'s first child after ShadowRoot.innerHTML = "<b>hello</b>" must be "b"'); + assert_equals(shadowRoot.innerHTML, '<b>hello</b>', 'ShadowRoot.innerHTML must be "<b>hello</b>" after ShadowRoot.innerHTML = "<b>hello</b>"'); + + shadowRoot.innerHTML = ''; + assert_equals(shadowRoot.childNodes.length, 0, 'ShadowRoot.innerHTML = "" must remove all its children'); + }, 'ShadowRoot.innerHTML must replace all with the result of invoking the fragment parsing algorithm when shadow root is ' + mode + '.'); +} + +testSetInnerHTML('open'); +testSetInnerHTML('closed'); + +function testStyleSheets(mode) { + test(function () { + var host = document.createElement('div'); + var shadowRoot = host.attachShadow({'mode': mode}); + + assert_equals(shadowRoot.styleSheets.length, 0, 'shadowRoot.styleSheets must be empty when the shadow root does not contain any stylesheets'); + shadowRoot.innerHTML = '<span></span><style> a.rule {} </style><style> b.rule {} </style>'; + assert_equals(shadowRoot.styleSheets.length, 2, 'shadowRoot.styleSheets must contain two items when the shadow root has two style elements'); + var styles = shadowRoot.querySelectorAll('style'); + assert_equals(shadowRoot.styleSheets[0], styles[0].sheet, 'shadowRoot.styleSheets[0] must be the first style element in the shadow root'); + assert_equals(shadowRoot.styleSheets[1], styles[1].sheet, 'shadowRoot.styleSheets[1] must be the second style element in the shadow root'); + }, 'ShadowRoot.styleSheets must return a StyleSheetList sequence containing the shadow root style sheets when shadow root is ' + mode + '.'); +} + +testStyleSheets('open'); +testStyleSheets('closed'); + +</script> +</body> +</html> |