docs: private Node getNode(Node nodeStart, String key, CreateMode createMode, boolean bReturnTextNode)
      {
          if (key.indexOf('/') != -1)
          {
              String strKeyParent = key.substring(0, key.indexOf('/'));
              CreateMode createModeParent = createMode;
              if (createModeParent == CreateMode.CREATE_NEW_NODE)
                  createModeParent = CreateMode.CREATE_IF_NOT_FOUND;  // Only create a duplicate node at the leaf level.
              nodeStart = this.getNode(nodeStart, strKeyParent, createModeParent, false);
              if (nodeStart == null)
                  return null;
              key = key.substring(key.indexOf('/') + 1);
              return this.getNode(nodeStart, key, createMode, bReturnTextNode);
          }
          if (nodeStart == null)
              nodeStart = this.getNode(true);
  
          int iIndex = Integer.MAX_VALUE;
          if (key.indexOf('[') != -1)
          {
              iIndex = Integer.parseInt(key.substring(key.indexOf('[') + 1, key.indexOf(']')));
              key = key.substring(0, key.indexOf('['));
          }
          key = Util.fixDOMElementName(key);
          Node node = null;
          NodeList nodeList = ((Element)nodeStart).getElementsByTagName(key);
          if (nodeList != null)
          {
              for (int i = 0; i < nodeList.getLength(); i++)
              {
                  if (nodeList.item(i).getParentNode() == nodeStart)
                  {
                      node = nodeList.item(i);    // Get the last child.
                      if (iIndex != Integer.MAX_VALUE)
                      {
                          if (--iIndex == 0)
                              break;  // This is the correct node
                          node = null;    // If you are looking for a specific node, and it doesn't exist, return null.
                      }
                  }
              }
          }
          if (((node == null) && (createMode != CreateMode.DONT_CREATE))
                  || (createMode == CreateMode.CREATE_NEW_NODE))
          {
          	Document doc = null;
          	if (m_data instanceof Document)
          		doc = (Document)m_data;
          	if (doc == null)
          		doc = ((Node)m_data).getOwnerDocument();
              node = doc.createElement(key);
              if (bReturnTextNode)
              {
                  if (createMode != CreateMode.CREATE_CDATA_NODE)
                      node.appendChild(doc.createTextNode(Constant.BLANK));
                  else
                      node.appendChild(doc.createCDATASection(Constant.BLANK));
              }
              nodeStart.appendChild(node);
          }
          if (node != null)
              if (bReturnTextNode)
                  node = node.getFirstChild();
          return node;    // Return new node or null.
      }