Ignore:
Timestamp:
Dec 12, 2012, 6:10:33 PM (6 years ago)
Author:
cameron
Message:

Various fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icXML/icXML-devel/src/icxercesc/parsers/AbstractDOMParser.cpp

    r2732 r2774  
    973973                                                         , const bool                    isRoot)
    974974{
    975     DEBUG_MESSAGE("AbstractDOMParser::startElement(" << elemDecl << ',' << urlId << ',' << elemPrefix << ',' << attrList << ',' << attrCount << ',' << isEmpty << ',' << isRoot << ')');
    976 
    977975        DOMElement     *elem;
    978976        DOMElementImpl *elemImpl;
    979977        const XMLCh* namespaceURI = 0;
    980         bool doNamespaces = fScanner->getDoNamespaces();
     978    const bool doNamespaces = fScanner->getDoNamespaces();
    981979
    982980        // Create the element name. Here we are going to bypass the
     
    995993                        namespaceURI = fScanner->getURIText(urlId); //get namespaceURI
    996994
    997                         //                      if (elemPrefix && *elemPrefix)
    998                         //                      {
    999                         //                              XMLBufBid elemQName(&fBufMgr);
    1000 
    1001                         //                              elemQName.set(elemPrefix);
    1002                         //                              elemQName.append(chColon);
    1003                         //                              elemQName.append(localName);
    1004 
    1005                         //                              elem = createElementNS (
    1006                         //                                namespaceURI, elemPrefix, localName, elemQName.getRawBuffer());
    1007                         //                      }
    1008                         //                      else
    1009                         //                        elem = createElementNS (namespaceURI, 0, localName, localName);
    1010 
    1011995                        elem = createElementNS (namespaceURI, 0, localName, elemDecl.getFullName());
    1012996                }
     
    10251009        if (attrCount)
    10261010        {
    1027                 const unsigned int xmlnsNSId = XMLNamespaceResolver::fXMLNSUriId;
    1028                 const unsigned int emptyNSId = XMLNamespaceResolver::fEmptyUriId;
    1029 
    10301011                DOMAttrMapImpl* map = elemImpl->fAttributes;
    10311012                map->reserve (attrCount);
     
    10421023                                unsigned int attrURIId = attribute->getURIId();
    10431024                                const XMLCh* localName = attribute->getName();
    1044                                 const XMLCh* prefix = attribute->getPrefix();
    1045                                 namespaceURI = 0;
    1046 
    1047                                 if ((prefix==0 || *prefix==0) && XMLString::equals(localName, XMLUni::fgXMLNSString))
     1025                                const XMLCh* prefix = attribute->getPrefix();                           
     1026
     1027                if (attrURIId == XMLNamespaceResolver::fEmptyUriId)
     1028                {
     1029                    namespaceURI = 0;
     1030                    if (XMLString::equals(localName, XMLUni::fgXMLNSString))
     1031                    {
     1032                        // xmlns=...
     1033                        namespaceURI = fScanner->getURIText(XMLNamespaceResolver::fXMLNSUriId);
     1034                    }
     1035                }
     1036                else // if (attrURIId != XMLNamespaceResolver::fEmptyUriId)
    10481037                                {
    1049                                         // xmlns=...
    1050                                         attrURIId = xmlnsNSId;
    1051                                 }
    1052 
    1053                                 if (attrURIId != emptyNSId)
    1054                                 {
    1055                                         //TagName has a prefix
    10561038                                        namespaceURI = fScanner->getURIText(attrURIId);
    10571039                                }
    10581040
    1059                                 attr = (DOMAttrImpl*) createAttrNS (namespaceURI,
    1060                                                                                                         prefix,
    1061                                                                                                         localName,
    1062                                                                                                         attribute->getQName());
     1041                attr = (DOMAttrImpl*) createAttrNS (namespaceURI, prefix, localName, attribute->getQName());
    10631042
    10641043                                map->setNamedItemNSFast(attr);
     
    10781057                        {
    10791058                                if (fDocument->fNodeIDMap == 0)
     1059                {
    10801060                                        fDocument->fNodeIDMap = new (fDocument) DOMNodeIDMap(500, fDocument);
     1061                }
    10811062                                fDocument->fNodeIDMap->add(attr);
    10821063                                attr->fNode.isIdAttr(true);
     
    10861067
    10871068                        // store DTD validation information
    1088                         if(fCreateSchemaInfo)
     1069            if (fCreateSchemaInfo)
    10891070                        {
    10901071                                switch(attribute->getType())
     
    11271108                                        // So as long as the XML parser doesn't do it, it needs to
    11281109                                        // be done here.
    1129                                         const XMLCh* qualifiedName = attr->getFullName();
    1130                                         XMLBufBid bbPrefixQName(&fBufMgr);
    1131                                         XMLBuffer& prefixBuf = bbPrefixQName.getBuffer();
    1132                                         int colonPos = -1;
    1133                                         unsigned int uriId = fScanner->resolveQName(qualifiedName, prefixBuf, ElemStack::Mode_Attribute, colonPos);
    1134 
    1135                                         const XMLCh* namespaceURI = 0;
    1136                                         if (XMLString::equals(qualifiedName, XMLUni::fgXMLNSString))    //for xmlns=...
    1137                                                 uriId = fScanner->getXMLNSNamespaceId();
    1138                                         if (uriId != fScanner->getEmptyNamespaceId()) {  //TagName has a prefix
    1139                                                 namespaceURI = fScanner->getURIText(uriId);
    1140                                         }
    1141 
    1142                                         insertAttr = (DOMAttrImpl *) fDocument->createAttributeNS(namespaceURI,     // NameSpaceURI
    1143                                                                                                                                                           qualifiedName);   // qualified name
     1110                    const XMLCh * qualifiedName = attr->getFullName();
     1111
     1112                    // int colonPos = -1;
     1113                    unsigned int attrURIId = fScanner->getUriResolver()->resolveUriId(qualifiedName); // fScanner->resolveQName(qualifiedName, prefixBuf, ElemStack::Mode_Attribute, colonPos);
     1114
     1115                    if (attrURIId == XMLNamespaceResolver::fEmptyUriId)
     1116                    {
     1117                        namespaceURI = 0;
     1118                        if (XMLString::equals(qualifiedName, XMLUni::fgXMLNSString))
     1119                        {
     1120                            // xmlns=...
     1121                            namespaceURI = fScanner->getURIText(XMLNamespaceResolver::fXMLNSUriId);
     1122                        }
     1123                    }
     1124                    else // if (attrURIId != XMLNamespaceResolver::fEmptyUriId)
     1125                    {
     1126                        namespaceURI = fScanner->getURIText(attrURIId);
     1127                    }
     1128
     1129                    insertAttr = (DOMAttrImpl *) fDocument->createAttributeNS(namespaceURI, qualifiedName);
    11441130
    11451131                                        DOMAttr* remAttr = elemImpl->setDefaultAttributeNodeNS(insertAttr);
     
    11681154                                        switch(attr->getType())
    11691155                                        {
    1170                                         case XMLAttDef::CData:          insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedCDATAAttribute); break;
    1171                                         case XMLAttDef::ID:             insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedIDAttribute); break;
    1172                                         case XMLAttDef::IDRef:          insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedIDREFAttribute); break;
    1173                                         case XMLAttDef::IDRefs:         insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedIDREFSAttribute); break;
    1174                                         case XMLAttDef::Entity:         insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedENTITYAttribute); break;
    1175                                         case XMLAttDef::Entities:       insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedENTITIESAttribute); break;
    1176                                         case XMLAttDef::NmToken:        insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedNMTOKENAttribute); break;
    1177                                         case XMLAttDef::NmTokens:       insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedNMTOKENSAttribute); break;
    1178                                         case XMLAttDef::Notation:       insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedNOTATIONAttribute); break;
    1179                                         case XMLAttDef::Enumeration:    insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedENUMERATIONAttribute); break;
    1180                                         default:                        insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdNotValidatedAttribute); break;
     1156                        case XMLAttDef::CData:          insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedCDATAAttribute); break;
     1157                        case XMLAttDef::ID:             insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedIDAttribute); break;
     1158                        case XMLAttDef::IDRef:          insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedIDREFAttribute); break;
     1159                        case XMLAttDef::IDRefs:         insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedIDREFSAttribute); break;
     1160                        case XMLAttDef::Entity:         insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedENTITYAttribute); break;
     1161                        case XMLAttDef::Entities:       insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedENTITIESAttribute); break;
     1162                        case XMLAttDef::NmToken:        insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedNMTOKENAttribute); break;
     1163                        case XMLAttDef::NmTokens:       insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedNMTOKENSAttribute); break;
     1164                        case XMLAttDef::Notation:       insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedNOTATIONAttribute); break;
     1165                        case XMLAttDef::Enumeration:    insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdValidatedENUMERATIONAttribute); break;
     1166                        default:                        insertAttr->setSchemaTypeInfo(&DOMTypeInfoImpl::g_DtdNotValidatedAttribute); break;
    11811167                                        }
    11821168                                }
Note: See TracChangeset for help on using the changeset viewer.