You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ca...@apache.org on 2005/07/28 20:55:18 UTC

svn commit: r225848 - /xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp

Author: cargilld
Date: Thu Jul 28 11:55:15 2005
New Revision: 225848

URL: http://svn.apache.org/viewcvs?rev=225848&view=rev
Log:
Synthetic generation fix to get namespaces from all enclosing elements.

Modified:
    xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp

Modified: xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp?rev=225848&r1=225847&r2=225848&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp Thu Jul 28 11:55:15 2005
@@ -8764,7 +8764,7 @@
                                              , ValueVectorOf<DOMNode*>* nonXSAttList)
 {      
     const XMLCh* prefix = elem->getPrefix();
-    ValueVectorOf<unsigned int>* listOfURIs = new (fMemoryManager) ValueVectorOf<unsigned int>(16, fMemoryManager);
+    ValueHashTableOf<unsigned int>* listOfURIs = new (fMemoryManager) ValueHashTableOf<unsigned int>(29, fMemoryManager);
     bool sawXMLNS = false;
 
     fBuffer.reset();
@@ -8792,76 +8792,43 @@
     }
 
     // next is the namespaces on the elem
-    DOMNamedNodeMap* eltAttrs = elem->getAttributes();
-    int              attrCount = eltAttrs->getLength();
-    int j;
-    for (j = 0; j < attrCount; j++) 
-    {
-        DOMNode*     attribute = eltAttrs->item(j);
-        const XMLCh* attName = attribute->getNodeName();
-        
-        if (XMLString::startsWith(attName, XMLUni::fgXMLNSColonString))
-        {
-            fBuffer.append(chSpace);
-            fBuffer.append(attName);
-            fBuffer.append(chEqual);
-            fBuffer.append(chDoubleQuote);
-            processAttValue(attribute->getNodeValue(), fBuffer);
-            fBuffer.append(chDoubleQuote);
-
-            int offsetIndex = XMLString::indexOf(attName, chColon); 
-            int prefixId = fNamespaceScope->getNamespaceForPrefix(attName + offsetIndex + 1, fSchemaInfo->getNamespaceScopeLevel());
-            if (prefixId)
-                listOfURIs->addElement(prefixId);
-        }
-        else if (XMLString::equals(attName, XMLUni::fgXMLNSString))
+    DOMElement* currentElem = (DOMElement*) elem;
+    DOMNamedNodeMap* eltAttrs;
+    int              attrCount;
+    do {    
+        eltAttrs = currentElem->getAttributes();
+        attrCount = eltAttrs->getLength();        
+        for (int j = 0; j < attrCount; j++) 
         {
-            fBuffer.append(chSpace);
-            fBuffer.append(attName);
-            fBuffer.append(chEqual);
-            fBuffer.append(chDoubleQuote);
-            processAttValue(attribute->getNodeValue(), fBuffer);
-            fBuffer.append(chDoubleQuote);
-            sawXMLNS = true;
-        }
-    }
-
-    // next is the namespaces on the fSchemaRoot
-    eltAttrs = fSchemaInfo->getRoot()->getAttributes();
-    attrCount = eltAttrs->getLength();
-
-    for (j = 0; j < attrCount; j++) 
-    {
-        DOMNode*     attribute = eltAttrs->item(j);
-        if (!attribute) {
-            break;
-        }
-        const XMLCh* attName = attribute->getNodeName();
+            DOMNode*     attribute = eltAttrs->item(j);
+            const XMLCh* attName = attribute->getNodeName();
         
-        if (XMLString::startsWith(attName, XMLUni::fgXMLNSColonString))
-        {
-            int offsetIndex = XMLString::indexOf(attName, chColon); 
-            int prefixId = fNamespaceScope->getNamespaceForPrefix(attName + offsetIndex + 1, fSchemaInfo->getNamespaceScopeLevel());
-            
-            if (!listOfURIs->containsElement(prefixId)) {
+            if (XMLString::startsWith(attName, XMLUni::fgXMLNSColonString))
+            {
+                if (!listOfURIs->containsKey((void*) attName)) {
+                    listOfURIs->put((void*) attName, 0);   
+                    fBuffer.append(chSpace);
+                    fBuffer.append(attName);
+                    fBuffer.append(chEqual);
+                    fBuffer.append(chDoubleQuote);
+                    processAttValue(attribute->getNodeValue(), fBuffer);
+                    fBuffer.append(chDoubleQuote);
+                }                                            
+            }
+            else if (!sawXMLNS && XMLString::equals(attName, XMLUni::fgXMLNSString))
+            {
                 fBuffer.append(chSpace);
                 fBuffer.append(attName);
                 fBuffer.append(chEqual);
                 fBuffer.append(chDoubleQuote);
                 processAttValue(attribute->getNodeValue(), fBuffer);
-                fBuffer.append(chDoubleQuote);                
+                fBuffer.append(chDoubleQuote);
+                sawXMLNS = true;
             }
-        }
-        else if (!sawXMLNS && XMLString::equals(attName, XMLUni::fgXMLNSString))
-        {
-            fBuffer.append(chSpace);
-            fBuffer.append(attName);
-            fBuffer.append(chEqual);
-            fBuffer.append(chDoubleQuote);
-            processAttValue(attribute->getNodeValue(), fBuffer);
-            fBuffer.append(chDoubleQuote);            
-        }
+        }       
+        currentElem = (DOMElement*) currentElem->getParentNode();               
     }
+    while (currentElem != fSchemaInfo->getRoot()->getParentNode());
     delete listOfURIs;
 
     fBuffer.append(chCloseAngle);



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