You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2004/05/07 23:35:35 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/parsers AbstractDOMParser.java DOMParserImpl.java

mrglavas    2004/05/07 14:35:35

  Modified:    java/src/org/apache/xerces/dom DOMNormalizer.java
                        DOMConfigurationImpl.java
               java/src/org/apache/xml/serialize XMLSerializer.java
                        DOMSerializerImpl.java
               java/src/org/apache/xerces/parsers AbstractDOMParser.java
                        DOMParserImpl.java
  Log:
  Contributed by Neil Delima:
  
  Implementation of the namespace-declarations parameter for
  DOM Level 3 Core, LSParser and LSSerializer.  This discards
  namespace declaration attributes when it is set to false.
  Updating each DOMConfiguration and including the
  namespace-declarations parameter in the computaiton of infoset.
  
  See: http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMConfiguration
  
  Revision  Changes    Path
  1.55      +13 -1     xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java
  
  Index: DOMNormalizer.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- DOMNormalizer.java	22 Apr 2004 20:39:03 -0000	1.54
  +++ DOMNormalizer.java	7 May 2004 21:35:35 -0000	1.55
  @@ -297,6 +297,18 @@
                       // normalize attribute values
                       // remove default attributes
                       namespaceFixUp(elem, attributes);
  +                    
  +                    if ((fConfiguration.features & DOMConfigurationImpl.NSDECL) == 0 && attributes != null ) {
  +                        for (int i = 0; i < attributes.getLength(); ++i) {
  +                            Attr att = (Attr)attributes.getItem(i);
  +                            if (XMLSymbols.PREFIX_XMLNS.equals(att.getPrefix()) ||
  +                                XMLSymbols.PREFIX_XMLNS.equals(att.getName())) {
  +                                elem.removeAttributeNode(att);
  +                                --i;
  +                            }
  +                        }
  +                    }  
  +                    
                   } else {
                       if ( attributes!=null ) {
                           for ( int i=0; i<attributes.getLength(); ++i ) {
  
  
  
  1.29      +17 -13    xml-xerces/java/src/org/apache/xerces/dom/DOMConfigurationImpl.java
  
  Index: DOMConfigurationImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMConfigurationImpl.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- DOMConfigurationImpl.java	14 Apr 2004 15:54:06 -0000	1.28
  +++ DOMConfigurationImpl.java	7 May 2004 21:35:35 -0000	1.29
  @@ -148,8 +148,9 @@
       protected final static short VALIDATE            = 0x1<<6;
       protected final static short PSVI                = 0x1<<7;
       protected final static short WELLFORMED          = 0x1<<8;
  +    protected final static short NSDECL              = 0x1<<9;
   
  -    protected final static short INFOSET_TRUE_PARAMS = NAMESPACES | COMMENTS | WELLFORMED;
  +    protected final static short INFOSET_TRUE_PARAMS = NAMESPACES | COMMENTS | WELLFORMED | NSDECL;
       protected final static short INFOSET_FALSE_PARAMS = ENTITIES | DTNORMALIZATION | CDATA;
       protected final static short INFOSET_MASK = INFOSET_TRUE_PARAMS | INFOSET_FALSE_PARAMS;
   
  @@ -254,7 +255,8 @@
           features |= COMMENTS;
           features |= CDATA;
           features |= SPLITCDATA;
  -        features |=  WELLFORMED;
  +        features |= WELLFORMED;
  +        features |= NSDECL;
   
           if (symbolTable == null) {
               symbolTable = new SymbolTable();
  @@ -544,6 +546,9 @@
               else if (name.equalsIgnoreCase(Constants.DOM_WELLFORMED)) {
                   features = (short) (state ? features | WELLFORMED : features & ~WELLFORMED );
               }
  +            else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {
  +                features = (short) (state ? features | NSDECL : features & ~NSDECL);
  +            }
               else if (name.equalsIgnoreCase(Constants.DOM_INFOSET)) {
                   // Setting to false has no effect.
                   if (state) {
  @@ -566,8 +571,7 @@
                       throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
                   }
               }
  -            else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
  -                    || name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {
  +			else if ( name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {
                   if (!state) { // false is not supported
                       String msg =
                           DOMMessageFormatter.formatMessage(
  @@ -576,7 +580,6 @@
                               new Object[] { name });
                      throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
                   }
  -
               }
               else if (name.equalsIgnoreCase(SEND_PSVI) ){
                   // REVISIT: turning augmentation of PSVI is not support,
  @@ -788,6 +791,9 @@
   		else if (name.equalsIgnoreCase(Constants.DOM_WELLFORMED)) {
   			return (features & WELLFORMED) != 0 ? Boolean.TRUE : Boolean.FALSE;
   		}
  +		else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {
  +		    return (features & NSDECL) != 0 ? Boolean.TRUE : Boolean.FALSE;
  +		} 
   		else if (name.equalsIgnoreCase(Constants.DOM_INFOSET)) {
   			return (features & INFOSET_MASK) == INFOSET_TRUE_PARAMS ? Boolean.TRUE : Boolean.FALSE;
   		}
  @@ -803,10 +809,8 @@
           }
           else if (name.equalsIgnoreCase(Constants.DOM_PSVI)) {
               return (features & PSVI) != 0 ? Boolean.TRUE : Boolean.FALSE;
  -        }
  -		else if (
  -			name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
  -				|| name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {
  +        }		
  +        else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {
   			return Boolean.TRUE;
   		}
   		else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {
  @@ -879,8 +883,9 @@
                   || name.equalsIgnoreCase(Constants.DOM_VALIDATE)
                   || name.equalsIgnoreCase(Constants.DOM_WELLFORMED)
                   || name.equalsIgnoreCase(Constants.DOM_INFOSET)
  +                || name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
                   ) {
  -                return true ;
  +                return true;
               }//features whose parameter value can not be set to 'true'
               else if (
                   name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)
  @@ -890,8 +895,7 @@
                       ) {
                       return (value.equals(Boolean.TRUE)) ? false : true;
               }//features whose parameter value can not be set to 'false'
  -            else if( name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
  -                    || name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
  +            else if( name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
                       || name.equalsIgnoreCase(SEND_PSVI)
                       ) {
                       return (value.equals(Boolean.TRUE)) ? true : false;
  
  
  
  1.61      +26 -7     xml-xerces/java/src/org/apache/xml/serialize/XMLSerializer.java
  
  Index: XMLSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/XMLSerializer.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- XMLSerializer.java	13 Apr 2004 17:30:01 -0000	1.60
  +++ XMLSerializer.java	7 May 2004 21:35:35 -0000	1.61
  @@ -124,6 +124,11 @@
        */
       protected boolean fNamespaces = false;
   
  +    /**
  +     * Controls whether namespace prefixes will be printed out during serialization
  +     */
  +    protected boolean fNamespacePrefixes = true;
  +	
   
       private boolean fPreserveSpace;
   
  @@ -841,7 +846,9 @@
                       // the prefix is either undeclared 
                       // or
                       // conflict: the prefix is bound to another URI
  -                    printNamespaceAttr(prefix, uri);
  +                    if (fNamespacePrefixes) {
  +                        printNamespaceAttr(prefix, uri);
  +                    }
                       fLocalNSBinder.declarePrefix(prefix, uri);
                       fNSBinder.declarePrefix(prefix, uri);
                   }
  @@ -868,7 +875,9 @@
                       if (uri !=null && uri.length() > 0) {
                           // there is a default namespace decl that is bound to
                           // non-zero length uri, output xmlns=""
  -                        printNamespaceAttr(XMLSymbols.EMPTY_STRING, XMLSymbols.EMPTY_STRING);
  +                        if (fNamespacePrefixes) {
  +                            printNamespaceAttr(XMLSymbols.EMPTY_STRING, XMLSymbols.EMPTY_STRING);
  +                        }
                           fLocalNSBinder.declarePrefix(XMLSymbols.EMPTY_STRING, XMLSymbols.EMPTY_STRING);
                           fNSBinder.declarePrefix(XMLSymbols.EMPTY_STRING, XMLSymbols.EMPTY_STRING);
                       }
  @@ -918,7 +927,7 @@
                           // check if we need to output this declaration
                           prefix = attr.getPrefix();
                           prefix = (prefix == null || 
  -                                  prefix.length() == 0) ? XMLSymbols.EMPTY_STRING :fSymbolTable.addSymbol(prefix);
  +                                  prefix.length() == 0) ? XMLSymbols.EMPTY_STRING : fSymbolTable.addSymbol(prefix);
                           localpart = fSymbolTable.addSymbol( attr.getLocalName());
                           if (prefix == XMLSymbols.PREFIX_XMLNS) { //xmlns:prefix
                               localUri = fLocalNSBinder.getURI(localpart);  // local prefix mapping
  @@ -926,7 +935,13 @@
                               if (value.length() != 0 ) {
                                   if (localUri == null) {
                                       // declaration was not printed while fixing element namespace binding
  -                                    printNamespaceAttr(localpart, value);
  +                                    
  +                                    // If the DOM Level 3 namespace-prefixes feature is set to false
  +                                    // do not print xmlns attributes
  +                                    if (fNamespacePrefixes) {
  +                                        printNamespaceAttr(localpart, value);
  +                                    }
  +                                    	
                                       // case 4: <elem xmlns:xx="foo" xx:attr=""/>
                                       // where attribute is bound to "bar". 
                                       // If the xmlns:xx is output here first, later we should not
  @@ -948,7 +963,9 @@
                               value = fSymbolTable.addSymbol(value);
                               if (localUri == null ){
                                   // declaration was not printed while fixing element namespace binding
  -                                printNamespaceAttr(XMLSymbols.EMPTY_STRING, value);
  +                                if (fNamespacePrefixes) {
  +                                    printNamespaceAttr(XMLSymbols.EMPTY_STRING, value);
  +                                }
                                   // case 4 does not apply here since attributes can't use
                                   // default namespace
                               }
  @@ -997,7 +1014,9 @@
                                   name=prefix+":"+localpart;
                               }
                               // add declaration for the new prefix
  -                            printNamespaceAttr(prefix, uri);
  +                            if (fNamespacePrefixes) {
  +                                printNamespaceAttr(prefix, uri);
  +                            }
                               value = fSymbolTable.addSymbol(value);
                               fLocalNSBinder.declarePrefix(prefix, value);
                               fNSBinder.declarePrefix(prefix, uri);
  
  
  
  1.22      +29 -19    xml-xerces/java/src/org/apache/xml/serialize/DOMSerializerImpl.java
  
  Index: DOMSerializerImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xml/serialize/DOMSerializerImpl.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- DOMSerializerImpl.java	22 Apr 2004 20:39:04 -0000	1.21
  +++ DOMSerializerImpl.java	7 May 2004 21:35:35 -0000	1.22
  @@ -156,11 +156,12 @@
               boolean state = ((Boolean) value).booleanValue();
               if (name.equalsIgnoreCase(Constants.DOM_INFOSET)){
                   if (state){
  -                    features &=~ENTITIES;
  -                    features &=~CDATA;
  -                    features |=NAMESPACES;
  -                    features |=WELLFORMED;
  -                    features |=COMMENTS;                 
  +                    features &= ~ENTITIES;
  +                    features &= ~CDATA;
  +                    features |= NAMESPACES;
  +                    features |= NSDECL;
  +                    features |= WELLFORMED;
  +                    features |= COMMENTS;                 
                   }
                   // false does not have any effect
               } else if (name.equalsIgnoreCase(Constants.DOM_XMLDECL)) {
  @@ -221,9 +222,15 @@
                               new Object[] { name });
                       throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
                   }
  -            } else if (
  -                name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
  -                    || name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
  +            }else if (
  +			name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {
  +				//namespace-declaration has effect only if namespaces is true
  +				features =
  +					(short) (state
  +						? features | NSDECL
  +						: features & ~NSDECL);
  +				serializer.fNamespacePrefixes = state;							
  +            } else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
                       || name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
                   // false is not supported
                   if (!state) {
  @@ -289,7 +296,8 @@
               || name.equalsIgnoreCase(Constants.DOM_INFOSET)
               || name.equalsIgnoreCase(Constants.DOM_ENTITIES)
               || name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)
  -            || name.equalsIgnoreCase(Constants.DOM_COMMENTS)){
  +            || name.equalsIgnoreCase(Constants.DOM_COMMENTS)
  +            || name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)){
   	            // both values supported
   				return true;
   			}
  @@ -303,8 +311,7 @@
   				// true is not supported
   				return !value;
   			}
  -			else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)
  -			        || name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
  +			else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
   			        || name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
   				// false is not supported
   				return value;
  @@ -383,18 +390,20 @@
               return (features & SPLITCDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;
           } else if (name.equalsIgnoreCase(Constants.DOM_WELLFORMED)) {
               return (features & WELLFORMED) != 0 ? Boolean.TRUE : Boolean.FALSE;
  +        } else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {
  +            return (features & NSDECL) != 0 ? Boolean.TRUE : Boolean.FALSE;            
           } else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE) ||
  -                   name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)
  -                    || name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {
  +                   name.equalsIgnoreCase(Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
               return Boolean.TRUE;
           }else if (name.equalsIgnoreCase(Constants.DOM_DISCARD_DEFAULT_CONTENT)){
               return ((features & DISCARDDEFAULT)!=0)?Boolean.TRUE:Boolean.FALSE;
           }else if (name.equalsIgnoreCase(Constants.DOM_INFOSET)){
               if ((features & ENTITIES) == 0 &&
  -                 (features & CDATA) ==0 &&
  -                 (features & NAMESPACES) !=0 &&
  -                 (features & WELLFORMED) !=0 &&
  -                 (features & COMMENTS) !=0){
  +                 (features & CDATA) == 0 &&
  +                 (features & NAMESPACES) != 0 &&
  +                 (features & NSDECL) != 0 &&
  +                 (features & WELLFORMED) != 0 &&
  +                 (features & COMMENTS) != 0) {
                        return Boolean.TRUE;
                    }                 
                    return Boolean.FALSE;
  @@ -954,7 +963,8 @@
           ser.reset();
           ser.features = features;
           ser.fDOMErrorHandler = fErrorHandler;
  -        ser.fNamespaces = (features & NAMESPACES) !=0;
  +        ser.fNamespaces = (features & NAMESPACES) != 0;
  +        ser.fNamespacePrefixes = (features & NSDECL) != 0;
           ser._format.setOmitComments((features & COMMENTS)==0);
           ser._format.setOmitXMLDeclaration((features & XMLDECL) == 0);   
    
  
  
  
  1.111     +3 -3      xml-xerces/java/src/org/apache/xerces/parsers/AbstractDOMParser.java
  
  Index: AbstractDOMParser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/AbstractDOMParser.java,v
  retrieving revision 1.110
  retrieving revision 1.111
  diff -u -r1.110 -r1.111
  --- AbstractDOMParser.java	6 May 2004 16:02:05 -0000	1.110
  +++ AbstractDOMParser.java	7 May 2004 21:35:35 -0000	1.111
  @@ -161,8 +161,8 @@
   
       // debugging
   
  -    private static final boolean DEBUG_EVENTS = false;
  -    private static final boolean DEBUG_BASEURI = false;
  +    private static final boolean DEBUG_EVENTS = true;
  +    private static final boolean DEBUG_BASEURI = true;
   
       //
       // Data
  
  
  
  1.26      +62 -13    xml-xerces/java/src/org/apache/xerces/parsers/DOMParserImpl.java
  
  Index: DOMParserImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/DOMParserImpl.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- DOMParserImpl.java	23 Apr 2004 16:06:10 -0000	1.25
  +++ DOMParserImpl.java	7 May 2004 21:35:35 -0000	1.26
  @@ -33,7 +33,11 @@
   import org.apache.xerces.util.DOMEntityResolverWrapper;
   import org.apache.xerces.util.DOMErrorHandlerWrapper;
   import org.apache.xerces.util.SymbolTable;
  +import org.apache.xerces.util.XMLSymbols;
   import org.apache.xerces.xni.grammars.XMLGrammarPool;
  +import org.apache.xerces.xni.Augmentations;
  +import org.apache.xerces.xni.QName;
  +import org.apache.xerces.xni.XMLAttributes;
   import org.apache.xerces.xni.parser.XMLConfigurationException;
   import org.apache.xerces.xni.parser.XMLEntityResolver;
   import org.apache.xerces.xni.parser.XMLInputSource;
  @@ -103,7 +107,9 @@
       // Data
       //
   
  -
  +    /** Include namespace declaration attributes in the document. **/
  +    protected boolean fNamespaceDeclarations = true;
  +    
       // REVISIT: this value should be null by default and should be set during creation of
       //          LSParser
       protected String fSchemaType = null;
  @@ -130,9 +136,11 @@
           configuration));
           if (schemaType != null) {
               if (schemaType.equals (Constants.NS_DTD)) {
  -                fConfiguration.setFeature (
  -                Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_VALIDATION_FEATURE,
  -                false);
  +                //Schema validation is false by default and hence there is no
  +                //need to set it to false here.  Also, schema validation is  
  +                //not a recognized feature for DTDConfiguration's and so 
  +                //setting this feature here would result in a Configuration 
  +                //Exception.            
                   fConfiguration.setProperty (
                   Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE,
                   Constants.NS_DTD);
  @@ -187,10 +195,9 @@
           fConfiguration.setFeature(INCLUDE_COMMENTS_FEATURE, true);
           fConfiguration.setFeature(INCLUDE_IGNORABLE_WHITESPACE, true);
           fConfiguration.setFeature(NAMESPACES, true);
  -
  +		
           fConfiguration.setFeature(DYNAMIC_VALIDATION, false);
           fConfiguration.setFeature(CREATE_ENTITY_REF_NODES, false);
  -        fConfiguration.setFeature(NORMALIZE_DATA, false);
           fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, false);
   
           // set other default values
  @@ -205,7 +212,13 @@
           fConfiguration.setFeature (Constants.DOM_CERTIFIED, true);
   
           // Xerces datatype-normalization feature is on by default
  -        fConfiguration.setFeature ( NORMALIZE_DATA, false );
  +        // This is a recognized feature only for XML Schemas. If the
  +        // configuration doesn't support this feature, ignore it.
  +        try {
  +            fConfiguration.setFeature ( NORMALIZE_DATA, false );
  +        }
  +        catch (XMLConfigurationException exc) {}
  +    
       } // <init>(XMLParserConfiguration)
   
       /**
  @@ -247,6 +260,11 @@
        */
       public void reset () {
           super.reset ();
  +        
  +        // get state of namespace-declarations parameter.
  +        fNamespaceDeclarations = 
  +            fConfiguration.getFeature(Constants.DOM_NAMESPACE_DECLARATIONS);
  +                
           // DOM Filter
           if (fSkippedElemStack!=null) {
               fSkippedElemStack.removeAllElements ();
  @@ -336,8 +354,10 @@
                   else if (name.equalsIgnoreCase (Constants.DOM_INFOSET)) {
                       // Setting false has no effect.
                       if (state) {
  -                        // true: namespaces, comments, element-content-whitespace
  +                        // true: namespaces, namespace-declarations, 
  +                        // comments, element-content-whitespace
                           fConfiguration.setFeature(NAMESPACES, true);
  +                        fConfiguration.setFeature(Constants.DOM_NAMESPACE_DECLARATIONS, true);
                           fConfiguration.setFeature(INCLUDE_COMMENTS_FEATURE, true);
                           fConfiguration.setFeature(INCLUDE_IGNORABLE_WHITESPACE, true);
   
  @@ -352,8 +372,10 @@
                   else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {
                       fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, state);
                   }
  -                else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)
  -                || name.equalsIgnoreCase (Constants.DOM_WELLFORMED)
  +                else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)) {
  +                    fConfiguration.setFeature(Constants.DOM_NAMESPACE_DECLARATIONS, state);
  +                }
  +                else if (name.equalsIgnoreCase (Constants.DOM_WELLFORMED)
                   || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
                       if (!state) { // false is not supported
                           String msg =
  @@ -616,6 +638,7 @@
               // to the configuration and is changing the values
               // of these features directly on it.
               boolean infoset = fConfiguration.getFeature(NAMESPACES) &&
  +                fConfiguration.getFeature(Constants.DOM_NAMESPACE_DECLARATIONS) &&
                   fConfiguration.getFeature(INCLUDE_COMMENTS_FEATURE) &&
                   fConfiguration.getFeature(INCLUDE_IGNORABLE_WHITESPACE) &&
                   !fConfiguration.getFeature(DYNAMIC_VALIDATION) &&
  @@ -695,8 +718,7 @@
                   // true is not supported
                   return (state) ? false : true;
               }
  -            else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)
  -            || name.equalsIgnoreCase (Constants.DOM_WELLFORMED)
  +            else if (name.equalsIgnoreCase (Constants.DOM_WELLFORMED)
               || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {
                   // false is not supported
                   return (state) ? true : false;
  @@ -709,6 +731,7 @@
               || name.equalsIgnoreCase (Constants.DOM_ENTITIES)
               || name.equalsIgnoreCase (Constants.DOM_INFOSET)
               || name.equalsIgnoreCase (Constants.DOM_NAMESPACES)
  +            || name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)
               || name.equalsIgnoreCase (Constants.DOM_VALIDATE)
               || name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)
               || name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)
  @@ -991,4 +1014,30 @@
           return; // If not busy then this is noop
       }
   
  +    /**
  +     * The start of an element. If the document specifies the start element
  +     * by using an empty tag, then the startElement method will immediately
  +     * be followed by the endElement method, with no intervening methods.
  +     * Overriding the parent to handle DOM_NAMESPACE_DECLARATIONS=false.
  +     *
  +     * @param element    The name of the element.
  +     * @param attributes The element attributes.
  +     * @param augs     Additional information that may include infoset augmentations
  +     *
  +     * @throws XNIException Thrown by handler to signal an error.
  +     */
  +    public void startElement (QName element, XMLAttributes attributes, Augmentations augs) {
  +        // namespace declarations parameter has no effect if namespaces is false.
  +        if (!fNamespaceDeclarations && fNamespaceAware) {
  +            int len = attributes.getLength();
  +            for (int i = len - 1; i >= 0; --i) {
  +                if (XMLSymbols.PREFIX_XMLNS == attributes.getPrefix(i) ||
  +                    XMLSymbols.PREFIX_XMLNS == attributes.getQName(i)) {
  +                    attributes.removeAttributeAt(i);
  +                }
  +            }
  +        }
  +        super.startElement(element, attributes, augs);
  +    }
  +	
   } // class DOMParserImpl
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org