oops broke automatic defaulting of namespaces attributes. Daniel
* SAX.c: oops broke automatic defaulting of namespaces attributes.
Daniel
diff --git a/SAX.c b/SAX.c
index 2665998..b6e368a 100644
--- a/SAX.c
+++ b/SAX.c
@@ -1069,53 +1069,56 @@
* internal subset are not overriden by definitions in the
* external subset.
*/
- if ((attr->defaultValue != NULL) &&
- (xmlGetDtdQAttrDesc(ctxt->myDoc->extSubset,
- attr->elem, attr->name,
- attr->prefix) == attr) &&
- (xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
- attr->elem, attr->name,
- attr->prefix) == NULL)) {
+ if (attr->defaultValue != NULL) {
/*
* the element should be instantiated in the tree if:
* - this is a namespace prefix
* - the user required for completion in the tree
* like XSLT
+ * - there isn't already an attribute definition
+ * in the internal subset overriding it.
*/
if (((attr->prefix != NULL) &&
(xmlStrEqual(attr->prefix, BAD_CAST "xmlns"))) ||
((attr->prefix == NULL) &&
(xmlStrEqual(attr->name, BAD_CAST "xmlns"))) ||
(ctxt->loadsubset & XML_COMPLETE_ATTRS)) {
- xmlChar *fulln;
+ xmlAttributePtr tst;
- if (attr->prefix != NULL) {
- fulln = xmlStrdup(attr->prefix);
- fulln = xmlStrcat(fulln, BAD_CAST ":");
- fulln = xmlStrcat(fulln, attr->name);
- } else {
- fulln = xmlStrdup(attr->name);
- }
+ tst = xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
+ attr->elem, attr->name,
+ attr->prefix);
+ if ((tst == attr) || (tst == NULL)) {
+ xmlChar *fulln;
- /*
- * Check that the attribute is not declared in the
- * serialization
- */
- att = NULL;
- if (atts != NULL) {
- i = 0;
- att = atts[i];
- while (att != NULL) {
- if (xmlStrEqual(att, fulln))
- break;
- i += 2;
- att = atts[i];
+ if (attr->prefix != NULL) {
+ fulln = xmlStrdup(attr->prefix);
+ fulln = xmlStrcat(fulln, BAD_CAST ":");
+ fulln = xmlStrcat(fulln, attr->name);
+ } else {
+ fulln = xmlStrdup(attr->name);
}
+
+ /*
+ * Check that the attribute is not declared in the
+ * serialization
+ */
+ att = NULL;
+ if (atts != NULL) {
+ i = 0;
+ att = atts[i];
+ while (att != NULL) {
+ if (xmlStrEqual(att, fulln))
+ break;
+ i += 2;
+ att = atts[i];
+ }
+ }
+ if (att == NULL) {
+ attribute(ctxt, fulln, attr->defaultValue);
+ }
+ xmlFree(fulln);
}
- if (att == NULL) {
- attribute(ctxt, fulln, attr->defaultValue);
- }
- xmlFree(fulln);
}
}
attr = attr->nexth;