docs: @Override
      public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
          final Opml opml = new Opml();
          opml.setFeedType("opml_1.0");
  
          final Element root = document.getRootElement();
          final Element head = root.getChild("head");
  
          if (head != null) {
              opml.setTitle(head.getChildText("title"));
  
              if (head.getChildText("dateCreated") != null) {
                  opml.setCreated(DateParser.parseRFC822(head.getChildText("dateCreated"), Locale.US));
              }
  
              if (head.getChildText("dateModified") != null) {
                  opml.setModified(DateParser.parseRFC822(head.getChildText("dateModified"), Locale.US));
              }
  
              opml.setOwnerName(head.getChildTextTrim("ownerName"));
              opml.setOwnerEmail(head.getChildTextTrim("ownerEmail"));
              opml.setVerticalScrollState(readInteger(head.getChildText("vertScrollState")));
  
              try {
                  opml.setWindowBottom(readInteger(head.getChildText("windowBottom")));
              } catch (final NumberFormatException nfe) {
                  LOG.warn("Unable to parse windowBottom", nfe);
                  if (validate) {
                      throw new FeedException("Unable to parse windowBottom", nfe);
                  }
              }
  
              try {
                  opml.setWindowLeft(readInteger(head.getChildText("windowLeft")));
              } catch (final NumberFormatException nfe) {
                  LOG.warn("Unable to parse windowLeft", nfe);
                  if (validate) {
                      throw new FeedException("Unable to parse windowLeft", nfe);
                  }
              }
  
              try {
                  opml.setWindowRight(readInteger(head.getChildText("windowRight")));
              } catch (final NumberFormatException nfe) {
                  LOG.warn("Unable to parse windowRight", nfe);
                  if (validate) {
                      throw new FeedException("Unable to parse windowRight", nfe);
                  }
              }
  
              try {
                  opml.setWindowLeft(readInteger(head.getChildText("windowLeft")));
              } catch (final NumberFormatException nfe) {
                  LOG.warn("Unable to parse windowLeft", nfe);
                  if (validate) {
                      throw new FeedException("Unable to parse windowLeft", nfe);
                  }
              }
  
              try {
                  opml.setWindowTop(readInteger(head.getChildText("windowTop")));
              } catch (final NumberFormatException nfe) {
                  LOG.warn("Unable to parse windowTop", nfe);
                  if (validate) {
                      throw new FeedException("Unable to parse windowTop", nfe);
                  }
              }
  
              try {
                  opml.setExpansionState(readIntArray(head.getChildText("expansionState")));
              } catch (final NumberFormatException nfe) {
                  LOG.warn("Unable to parse expansionState", nfe);
                  if (validate) {
                      throw new FeedException("Unable to parse expansionState", nfe);
                  }
              }
          }
  
          opml.setOutlines(parseOutlines(root.getChild("body").getChildren("outline"), validate, locale));
          opml.setModules(parseFeedModules(root, locale));
  
          return opml;
      }