docs: protected void processSchemaNode(Element root, String rootPath, Locale locale, CmsXmlContentDefinition definition) {
  
          // iterate all XML nodes
          List<Node> content = CmsXmlGenericWrapper.content(root);
          for (int i = content.size() - 1; i >= 0; i--) {
              Node node = content.get(i);
              if (!(node instanceof Element)) {
                  // this node is not an element, so it must be a white space text node, remove it
                  node.detach();
              } else {
                  // node must be an element
                  Element element = (Element)node;
                  String name = element.getName();
                  int xpathIndex = CmsXmlUtils.getXpathIndexInt(element.getUniquePath(root));
  
                  // build the Xpath expression for the current node
                  String path;
                  if (rootPath != null) {
                      StringBuffer b = new StringBuffer(rootPath.length() + name.length() + 6);
                      b.append(rootPath);
                      b.append('/');
                      b.append(CmsXmlUtils.createXpathElement(name, xpathIndex));
                      path = b.toString();
                  } else {
                      path = CmsXmlUtils.createXpathElement(name, xpathIndex);
                  }
  
                  // create a XML content value element
                  I_CmsXmlSchemaType schemaType = definition.getSchemaType(name);
  
                  if (schemaType != null) {
                      // directly add simple type to schema
                      I_CmsXmlContentValue value = schemaType.createValue(this, element, locale);
                      addBookmark(path, locale, true, value);
  
                      if (!schemaType.isSimpleType()) {
                          // recurse for nested schema
                          CmsXmlNestedContentDefinition nestedSchema = (CmsXmlNestedContentDefinition)schemaType;
                          processSchemaNode(element, path, locale, nestedSchema.getNestedContentDefinition());
                      }
                  } else {
                      // unknown XML node name according to schema
                      if (LOG.isWarnEnabled()) {
                          LOG.warn(
                              Messages.get().getBundle().key(
                                  Messages.LOG_XMLCONTENT_INVALID_ELEM_2,
                                  name,
                                  definition.getSchemaLocation()));
                      }
                  }
              }
          }
      }