code: public LDIFChangeRecord nextRecord() {
          if (entryIterator.hasNext()) {
              try {
                  final Node entryNode = entryIterator.next();
                  final String dn = entryNode.valueOf("@dn");
                  final List<Attribute> attributes = new ArrayList<Attribute>();
  
                  final List<Node> objectClassList = (List<Node>) objectClassXPath.selectNodes(entryNode);
                  final String[] objectClasses = new String[objectClassList.size()];
                  for (int j = 0; j < objectClasses.length; ++j) {
                      objectClasses[j] = objectClassList.get(j).getStringValue();
                  }
                  attributes.add(new Attribute("objectclass", objectClasses));
                  for (final Node attributeNode : (List<Node>) attrXPath.selectNodes(entryNode)) {
                      final String attributeName = attributeNode.valueOf("@name");
                      final List<Node> attributeValueNodes = (List<Node>) attrValueXPath.selectNodes(attributeNode);
                      switch (attributeValueNodes.size()) {
                          case 0:
                              break;
                          case 1: {
                              final String attributeValue = attributeValueNodes.get(0).getStringValue();
                              attributes.add(new Attribute(attributeName, attributeValue));
                              break;
                          }
                          default: {
                              final String[] attributeValues = new String[attributeValueNodes.size()];
                              for (int j = 0; j < attributeValueNodes.size(); ++j) {
                                  attributeValues[j] = attributeValueNodes.get(j).getStringValue();
                              }
                              attributes.add(new Attribute(attributeName, attributeValues));
                              break;
                          }
                      }
                  }
                  return new LDIFAddChangeRecord(dn, attributes);
              } catch (final JaxenException e) {
                  return null;
              }
          } else {
              return null;
          }
      }
docs: Read the next change record from the underlying input stream.
  
  @return The next change record or {@code null} if the end of the input stream has been reached.