diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp
index 49611d59113d5dc30ca2c3332f230fcf2bb93faf..843754378fffabfefca097d3d75027c67d1840b0 100644
--- a/src/xercesc/parsers/AbstractDOMParser.cpp
+++ b/src/xercesc/parsers/AbstractDOMParser.cpp
@@ -836,8 +836,11 @@ void AbstractDOMParser::startElement(const  XMLElementDecl&         elemDecl
             const XMLAttr* oneAttrib = attrList.elementAt(index);
             unsigned int attrURIId = oneAttrib -> getURIId();
             namespaceURI = 0;
-            if (XMLString::equals(oneAttrib -> getName(), XMLNS))    //for xmlns=...
+            bool foundXMLNS = false;
+            if (XMLString::equals(oneAttrib -> getName(), XMLNS)) {   //for xmlns=...
                 attrURIId = fScanner->getXMLNSNamespaceId();
+                foundXMLNS = true;
+            }
             if (attrURIId != fScanner->getEmptyNamespaceId()) {  //TagName has a prefix
                 namespaceURI = fScanner->getURIText(attrURIId);   //get namespaceURI
             }
@@ -887,10 +890,13 @@ void AbstractDOMParser::startElement(const  XMLElementDecl&         elemDecl
                         attr->setTypeInfo(SchemaSymbols::fgDT_ANYURI, SchemaSymbols::fgURI_SCHEMAFORSCHEMA);
                     }
                 }
-                else {
+                else if(foundXMLNS || XMLString::equals(oneAttrib->getPrefix(), XMLUni::fgXMLNSString)){
                     //for normal ns attrs
                     attr->setTypeInfo(SchemaSymbols::fgDT_ANYURI, SchemaSymbols::fgURI_SCHEMAFORSCHEMA);
                 }
+                else {
+                    attr->setTypeInfo(SchemaSymbols::fgDT_ANYSIMPLETYPE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA);
+                }
             }
         }
     }