code: private void parseAttribute(String name) throws Exception {
          String aname;
          String type;
          String value;
          int flags = LIT_ATTRIBUTE | LIT_ENTITY_REF;
  
          // Read the attribute name.
          aname = readNmtoken(true);
          type = getAttributeType(name, aname);
  
          // Parse '='
          parseEq();
  
          // Read the value, normalizing whitespace
          // unless it is CDATA.
          if (handler.stringInterning) {
              if ((type == "CDATA") || (type == null)) {
                  value = readLiteral(flags);
              } else {
                  value = readLiteral(flags | LIT_NORMALIZE);
              }
          } else {
              if ((type == null) || type.equals("CDATA")) {
                  value = readLiteral(flags);
              } else {
                  value = readLiteral(flags | LIT_NORMALIZE);
              }
          }
  
          // WFC: no duplicate attributes
          for (int i = 0; i < tagAttributePos; i++) {
              if (aname.equals(tagAttributes[i])) {
                  fatal("duplicate attribute", aname, null);
              }
          }
  
          // Inform the handler about the
          // attribute.
          handler.attribute(aname, value, true);
          dataBufferPos = 0;
  
          // Note that the attribute has been
          // specified.
          if (tagAttributePos == tagAttributes.length) {
              String newAttrib[] = new String[tagAttributes.length * 2];
              System.arraycopy(tagAttributes, 0, newAttrib, 0, tagAttributePos);
              tagAttributes = newAttrib;
          }
          tagAttributes[tagAttributePos++] = aname;
      }
docs: Parse an attribute assignment.
  
  <pre>
  [41] Attribute ::= Name Eq AttValue
  </pre>
  
  @param name
  The name of the attribute's element.
  @see SAXDriver#attribute