code: def passageLoop(parent, new_tree, xpath1, xpath2=None, preceding_siblings=False, following_siblings=False):
      current_1, queue_1 = __formatXpath__(xpath1)
      if xpath2 is None:
          result_1, loop = performXpath(parent, current_1)
          if loop is True:
              queue_1 = xpath1
          central = None
          has_no_queue = len(queue_1) == 0
          if preceding_siblings or following_siblings:
              for sibling in xmliter(parent):
                  if sibling == result_1:
                      central = True
                      child = copyNode(result_1, children=has_no_queue, parent=new_tree)
                      if not has_no_queue:
                          passageLoop(
                              result_1,
                              child,
                              queue_1,
                              None,
                              preceding_siblings=preceding_siblings,
                              following_siblings=following_siblings
                          )
                      if preceding_siblings:
                          break
                  elif not central and preceding_siblings:
                      copyNode(sibling, parent=new_tree, children=True)
                  elif central and following_siblings:
                      copyNode(sibling, parent=new_tree, children=True)
      else:
          result_1, loop = performXpath(parent, current_1)
          if loop is True:
              queue_1 = xpath1
              if xpath2 == xpath1:
                  current_2, queue_2 = current_1, queue_1
              else:
                  current_2, queue_2 = __formatXpath__(xpath2)
          else:
              current_2, queue_2 = __formatXpath__(xpath2)
          if xpath1 != xpath2:
              result_2, loop = performXpath(parent, current_2)
              if loop is True:
                  queue_2 = xpath2
          else:
              result_2 = result_1
          if result_1 == result_2:
              has_no_queue = len(queue_1) == 0
              child = copyNode(result_1, children=has_no_queue, parent=new_tree)
              if not has_no_queue:
                  passageLoop(
                      result_1,
                      child,
                      queue_1,
                      queue_2
                  )
          else:
              start = False
              for sibling in xmliter(parent):
                  if start:
                      if sibling == result_2:
                          break
                      else:
                          copyNode(sibling, parent=new_tree, children=True)
                  elif sibling == result_1:
                      start = True
                      has_no_queue_1 = len(queue_1) == 0
                      node = copyNode(sibling, children=has_no_queue_1, parent=new_tree)
                      if not has_no_queue_1:
                          passageLoop(sibling, node, queue_1, None, following_siblings=True)
              continue_loop = len(queue_2) == 0
              node = copyNode(result_2, children=continue_loop, parent=new_tree)
              if not continue_loop:
                  passageLoop(result_2, node, queue_2, None, preceding_siblings=True)
      return new_tree