tng 2003/01/31 11:40:19
Modified: c/src/xercesc/parsers AbstractDOMParser.cpp
Log:
Fix DOMTypeInfo on ns attributes.
Revision Changes Path
1.36 +71 -73 xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp
Index: AbstractDOMParser.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- AbstractDOMParser.cpp 29 Jan 2003 22:37:06 -0000 1.35
+++ AbstractDOMParser.cpp 31 Jan 2003 19:40:18 -0000 1.36
@@ -769,6 +769,12 @@
chLatin_x, chLatin_s, chLatin_i, chNull
};
+ //get the list for use in the loop
+ XMLAttDefList* defAttrs = 0;
+ if(elemDecl.hasAttDefs()) {
+ defAttrs = &elemDecl.getAttDefList();
+ }
+
if (fScanner -> getDoNamespaces()) { //DOM Level 2, doNamespaces on
XMLBufBid bbURI(&fBufMgr);
@@ -791,12 +797,6 @@
elem = createElementNSNode(namespaceURI, elemQName.getRawBuffer());
elemImpl = (DOMElementImpl *) elem;
- //get the list for use in the loop
- XMLAttDefList* defAttrs = 0;
- if(elemDecl.hasAttDefs()) {
- defAttrs = &elemDecl.getAttDefList();
- }
-
for (unsigned int index = 0; index < attrCount; ++index) {
const XMLAttr* oneAttrib = attrList.elementAt(index);
unsigned int attrURIId = oneAttrib -> getURIId();
@@ -831,12 +831,14 @@
}
attr->setSpecified(oneAttrib->getSpecified());
- if(defAttrs != 0) {
- XMLAttDef *attDef = defAttrs->findAttDef(attrURIId,
oneAttrib->getQName());
- if(attDef != 0) {
- attr->setTypeInfo(attDef->getDOMTypeInfoName(),
attDef->getDOMTypeInfoUri());
- attDef->reset();
- }
+
+ XMLAttDef *attDef = 0;
+ if(defAttrs != 0)
+ attDef = defAttrs->findAttDef(attrURIId, oneAttrib->getQName());
+
+ if(attDef != 0) {
+ attr->setTypeInfo(attDef->getDOMTypeInfoName(),
attDef->getDOMTypeInfoUri());
+ attDef->reset();
}
else {
const XMLCh *name = oneAttrib->getName();
@@ -882,13 +884,22 @@
fDocument->fNodeIDMap->add(attr);
attr->fNode.isIdAttr(true);
}
+
+ XMLAttDef *attDef = 0;
+ if(defAttrs != 0)
+ attDef = defAttrs->findAttDef(oneAttrib -> getURIId(),
oneAttrib->getQName());
+
+ if(attDef != 0) {
+ attr->setTypeInfo(attDef->getDOMTypeInfoName(),
attDef->getDOMTypeInfoUri());
+ attDef->reset();
+ }
+
}
}
// set up the default attributes
- if (elemDecl.hasAttDefs())
+ if (defAttrs != 0)
{
- XMLAttDefList* defAttrs = &elemDecl.getAttDefList();
XMLAttDef* attr = 0;
DOMAttrImpl * insertAttr = 0;
@@ -903,71 +914,58 @@
{
if (fScanner->getDoNamespaces())
- {
- // DOM Level 2 wants all namespace declaration attributes
- // to be bound to "http://www.w3.org/2000/xmlns/"
- // So as long as the XML parser doesn't do it, it needs to
- // done here.
- const XMLCh* qualifiedName = attr->getFullName();
- XMLBufBid bbPrefixQName(&fBufMgr);
- XMLBuffer& prefixBuf = bbPrefixQName.getBuffer();
- int colonPos = -1;
- unsigned int uriId = fScanner->resolveQName(qualifiedName,
prefixBuf, ElemStack::Mode_Attribute, colonPos);
-
- const XMLCh* namespaceURI = 0;
- if (XMLString::equals(qualifiedName, XMLNS)) //for
xmlns=...
- uriId = fScanner->getXMLNSNamespaceId();
- if (uriId != fScanner->getEmptyNamespaceId()) { //TagName
has a prefix
- namespaceURI = fScanner->getURIText(uriId);
- }
-
- insertAttr = (DOMAttrImpl *) fDocument->createAttributeNS(
-
namespaceURI, // NameSpaceURI
-
qualifiedName); // qualified name
-
- DOMAttr* remAttr =
elemImpl->setDefaultAttributeNodeNS(insertAttr);
- if (remAttr)
- remAttr->release();
-
- if (attr->getValue() != 0)
- {
- insertAttr->setValue(attr->getValue());
- insertAttr->setSpecified(false);
- }
+ {
+ // DOM Level 2 wants all namespace declaration attributes
+ // to be bound to "http://www.w3.org/2000/xmlns/"
+ // So as long as the XML parser doesn't do it, it needs to
+ // done here.
+ const XMLCh* qualifiedName = attr->getFullName();
+ XMLBufBid bbPrefixQName(&fBufMgr);
+ XMLBuffer& prefixBuf = bbPrefixQName.getBuffer();
+ int colonPos = -1;
+ unsigned int uriId = fScanner->resolveQName(qualifiedName,
prefixBuf, ElemStack::Mode_Attribute, colonPos);
+
+ const XMLCh* namespaceURI = 0;
+ if (XMLString::equals(qualifiedName, XMLNS)) //for xmlns=...
+ uriId = fScanner->getXMLNSNamespaceId();
+ if (uriId != fScanner->getEmptyNamespaceId()) { //TagName has
a prefix
+ namespaceURI = fScanner->getURIText(uriId);
+ }
+
+ insertAttr = (DOMAttrImpl *) fDocument->createAttributeNS(
+
namespaceURI, // NameSpaceURI
+
qualifiedName); // qualified name
+
+ DOMAttr* remAttr =
elemImpl->setDefaultAttributeNodeNS(insertAttr);
+ if (remAttr)
+ remAttr->release();
- }
- else
+ if (attr->getValue() != 0)
{
- // Namespaces is turned off...
- insertAttr = (DOMAttrImpl *)
fDocument->createAttribute(attr->getFullName());
-
- DOMNode* remAttr =
elemImpl->setDefaultAttributeNode(insertAttr);
- if (remAttr)
- remAttr->release();
-
- //need to do this before the get as otherwise we overwrite
any value in the attr
- if (attr->getValue() != 0)
- {
- insertAttr->setValue(attr->getValue());
- insertAttr->setSpecified(false);
- }
-
- if(insertAttr) {
- insertAttr = (DOMAttrImpl
*)(elemImpl->getAttributeNode(attr->getFullName()));
- insertAttr->setTypeInfo(attr->getDOMTypeInfoName(),
attr->getDOMTypeInfoUri());
- }
+ insertAttr->setValue(attr->getValue());
+ insertAttr->setSpecified(false);
}
- }
- else {
- //we deal with the non namespace attrs down here as we are
iterating over the XMLAttDefs anyway
- if(!fScanner->getDoNamespaces()) {
- if(insertAttr == 0) {
- insertAttr = (DOMAttrImpl
*)(elemImpl->getAttributeNode(attr->getFullName()));
+ }
+ else
+ {
+ // Namespaces is turned off...
+ insertAttr = (DOMAttrImpl *)
fDocument->createAttribute(attr->getFullName());
+
+ DOMNode* remAttr =
elemImpl->setDefaultAttributeNode(insertAttr);
+ if (remAttr)
+ remAttr->release();
+
+ //need to do this before the get as otherwise we overwrite any
value in the attr
+ if (attr->getValue() != 0)
+ {
+ insertAttr->setValue(attr->getValue());
+ insertAttr->setSpecified(false);
}
- if(insertAttr)
- insertAttr->setTypeInfo(attr->getDOMTypeInfoName(),
attr->getDOMTypeInfoUri());
}
+
+ insertAttr->setTypeInfo(attr->getDOMTypeInfoName(),
attr->getDOMTypeInfoUri());
+
}
insertAttr = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]