docs: private void parseEntSubAttributes(final Entity ent, final Node node) throws ResourceXMLParserException {
          final Element node1 = (Element) node;
          //load all sub elements called "attribute" as properties
          for (final Object attribute : node1.selectNodes(ATTRIBUTE_TAG)) {
              Element attr=(Element) attribute;
              if(null==attr.selectSingleNode("@" + ATTRIBUTE_NAME_ATTR)) {
                  throw new ResourceXMLParserException(
                      ATTRIBUTE_TAG + " element has no '" + ATTRIBUTE_NAME_ATTR + "' attribute: "
                      + reportNodeErrorLocation(attr));
              }
              String attrname = attr.selectSingleNode("@" + ATTRIBUTE_NAME_ATTR).getStringValue();
  
              String attrvalue;
              //look for "value" attribute
              if(null!=attr.selectSingleNode("@"+ATTRIBUTE_VALUE_ATTR)) {
                  attrvalue = attr.selectSingleNode("@" + ATTRIBUTE_VALUE_ATTR).getStringValue();
              }else if(null!= attr.getText()) {
                  //look for text content
                  attrvalue = attr.getText();
              }else {
                  throw new ResourceXMLParserException(
                      ATTRIBUTE_TAG + " element has no '" + ATTRIBUTE_VALUE_ATTR + "' attribute or text content: "
                      + reportNodeErrorLocation(attr));
              }
  
              ent.properties.setProperty(attrname, attrvalue);
          }
      }