docs: public IndexEntry[] processIndexDitaNode(final Node theNode, final String theParentValue) {
  
          final NodeList childNodes = theNode.getChildNodes();
          final StringBuffer textValueBuffer = new StringBuffer();
          final List<Node> contents = new ArrayList<Node>();
          final StringBuffer sortStringBuffer = new StringBuffer();
          final boolean startRange = theNode.getAttributes().getNamedItem(elIndexRangeStartName) != null;
          final boolean endRange = theNode.getAttributes().getNamedItem(elIndexRangeEndName) != null;
          final ArrayList<IndexEntry> childEntrys = new ArrayList<IndexEntry>();
          final ArrayList<IndexEntry> seeEntry = new ArrayList<IndexEntry>();
          final ArrayList<IndexEntry> seeAlsoEntry = new ArrayList<IndexEntry>();
  
          for (int i = 0; i < childNodes.getLength(); i++) { //Go through child nodes to find text nodes
              final Node child = childNodes.item(i);
              if (child.getNodeType() == Node.TEXT_NODE) {
                  contents.add(child);
                  final String val = child.getNodeValue();
                  if (null != val) {
                      textValueBuffer.append(val);
                  }
              } else if (TOPIC_INDEXTERM.matches(child)) {
  
                  final String currentTextValue = normalizeTextValue(textValueBuffer.toString());
                  String currentRefId;
                  if (currentTextValue.equals("")) {
                      currentRefId="";
                  } else {
                      currentRefId = currentTextValue + VALUE_SEPARATOR;
                  }
                  final IndexEntry[] childs = processIndexDitaNode(child,theParentValue+currentRefId);
                  for (final IndexEntry child2 : childs) {
                      childEntrys.add(child2);
                  }
  
              } else if (INDEXING_D_INDEX_SORT_AS.matches(child)) {
  
                  for (int j = 0; j < child.getChildNodes().getLength(); j++) {
                      final Node sortChildNode = child.getChildNodes().item(j);
                      if (sortChildNode.getNodeType() == Node.TEXT_NODE) {
                          final String text = sortChildNode.getNodeValue();
                          if (text != null) {
                              sortStringBuffer.append(text);
                          }
                      }
                  }
              } else if (INDEXING_D_INDEX_SEE.matches(child)) {
                  final IndexEntry[] childs = processIndexDitaNode(child,"");
                  for (final IndexEntry child2 : childs) {
                      seeEntry.add(child2);
                  }
              } else if (INDEXING_D_INDEX_SEE_ALSO.matches(child)) {
                  final IndexEntry[] childs = processIndexDitaNode(child,"");
                  for (final IndexEntry child2 : childs) {
                      seeAlsoEntry.add(child2);
                  }
              } else if (child.getNodeType() == Node.ELEMENT_NODE) {
                  contents.add(child);
                  textValueBuffer.append(XMLUtils.getStringValue((Element) child));
              }
  
          }
          /*
          if (normalizeTextValue(textValueBuffer.toString()).length() == 0) {
              if (startRange) {
                  textValueBuffer.append(theNode.getAttributes().getNamedItem(elIndexRangeStartName).getNodeValue());
              } else if (endRange) {
                  textValueBuffer.append(theNode.getAttributes().getNamedItem(elIndexRangeEndName).getNodeValue());
              }
          }
           */
          String textValue = normalizeTextValue(textValueBuffer.toString());
          String sortString = sortStringBuffer.toString();
          if (textValue.indexOf(sortStart) > -1 && textValue.indexOf(sortEnd) > -1 && sortString.length() == 0) {
              if (textValue.indexOf(sortStart) < textValue.indexOf(sortEnd)) {
                  sortString = textValue.substring(textValue.indexOf(sortStart)+1,textValue.indexOf(sortEnd));
                  textValue = textValue.substring(0,textValue.indexOf(sortStart));
              }
          }
  
          if (!childEntrys.isEmpty() && !seeEntry.isEmpty()) {
              for (final IndexEntry e: seeEntry) {
                  logger.warn(MessageUtils.getMessage("DOTA067W", e.getFormattedString(), textValue).toString());
              }
              seeEntry.clear();
          }
          if (!childEntrys.isEmpty() && !seeAlsoEntry.isEmpty()) {
              for (final IndexEntry e: seeAlsoEntry) {
                  logger.warn(MessageUtils.getMessage("DOTA068W", e.getFormattedString(), textValue).toString());
              }
              seeAlsoEntry.clear();
          }
          
          final IndexEntry result = createIndexEntry(contents, textValue,sortString);
          if (result.getValue().length() > 0 || endRange || startRange) {
              result.setStartRange(startRange);
              result.setEndsRange(endRange);
              if (startRange) {
                  result.addRefID(theNode.getAttributes().getNamedItem(elIndexRangeStartName).getNodeValue());
              } else if (endRange) {
                  result.addRefID(theNode.getAttributes().getNamedItem(elIndexRangeEndName).getNodeValue());
              } else {
                  result.addRefID(normalizeTextValue(theParentValue + textValue + VALUE_SEPARATOR));
              }
              if (!seeEntry.isEmpty()) {
                  for (int j = 0; j < seeEntry.size(); j++) {
                      final IndexEntry seeIndexEntry = seeEntry.get(j);
                      result.addSeeChild(seeIndexEntry);
                  }
                  result.setSuppressesThePageNumber(true);
              }
              if (!seeAlsoEntry.isEmpty()) {
                  for (int j = 0; j < seeAlsoEntry.size(); j++) {
                      final IndexEntry seeAlsoIndexEntry = seeAlsoEntry.get(j);
                      result.addSeeAlsoChild(seeAlsoIndexEntry);
                  }
              }
              for (int i = 0; i < childEntrys.size(); i++) {
                  final IndexEntry child = childEntrys.get(i);
                  result.addChild(child);
              }
              final IndexEntry[] resultArray = new IndexEntry[1];
              resultArray[0] = result;
              return resultArray;
          } else {
              return (IndexEntry[]) childEntrys.toArray(new IndexEntry[childEntrys.size()]);
          }
      }