private void processSectionNode(Element node)
   {
	  String id = node.getAttribute("id");
	  String level = node.getAttribute("level");
	  if(hasSectionIdsGenerated() && level.isEmpty()) {
		  throw new IllegalStateException("Section id generation is enabled and node is missing a level info");
	  }

      String sectionId = (sectionIdGenerator != null ? sectionIdGenerator.nextId(Integer.valueOf(level)) : id);

      titles.put(sectionId, node.getAttribute("title"));
      sectionItems.put(sectionId, new ArrayList<SectionItem>());
      if(sectionIdGenerator != null) {
    	  generatedToOriginalIdMap.put(sectionId, id);
    	  originalToGeneratedIdMap.put(id, sectionId);
      }

      NodeList assertionNodes = node.getChildNodes();

      for (int i = 0; i < assertionNodes.getLength(); i++)
      {
         if (assertionNodes.item(i) instanceof Element &&
             "assertion".equals(assertionNodes.item(i).getNodeName()))
         {
            processAssertionNode(sectionId, (Element) assertionNodes.item(i), null);
         }
         else if (assertionNodes.item(i) instanceof Element &&
               "group".equals(assertionNodes.item(i).getNodeName()))
         {
              processGroupNode(sectionId, (Element) assertionNodes.item(i));
         }
      }
   }