code: private MultiValueMap<String> readMultiMap(XMLEventReader reader, String mapName)
              throws JournalException, XMLStreamException {
          MultiValueMap<String> map = new MultiValueMap<String>();
  
          // must start with a multi-map tag
          XMLEvent event = reader.nextTag();
          if (!isStartTagEvent(event, QNAME_TAG_MULTI_VALUE_MAP)) {
              throw getNotStartTagException(QNAME_TAG_MULTI_VALUE_MAP, event);
          }
  
          // the map name must match the expected name
          String value =
                  getRequiredAttributeValue(event.asStartElement(),
                                            QNAME_ATTR_NAME);
          if (!mapName.equals(value)) {
              throw new JournalException("Expecting a '" + mapName
                      + "' multi-map, but found a '" + value
                      + "' multi-map instead");
          }
  
          // populate the map
          readMultiMapKeys(reader, map);
  
          return map;
      }
docs: Read a multi-map, with its nested tags.