@Override
  public P parse(final InputStream stream) throws IOException {
    final SAXReader reader = new SAXReader();

    // Remove nodes generated by indentation.
    reader.setStripWhitespaceText(true);
    reader.setMergeAdjacentText(true);

    final Document domdoc;
    try {
      domdoc = reader.read(stream);
    } catch (DocumentException e) {
      throw new IOException("Failed to parse XML, probably malformed input.");
    }
    return this.parse(domdoc.getRootElement());
  }