Hi everybody...

 

In Xerces 2.7.0 it is explicitly stated that, no matter how one removes an attribute (attList->removeNamedItem, attList->removeNamedItemNS,
domElement->removeAttributeNode, domElement->removeAttribute, domElement->removeAttributeNS), if that attribute has a default value
it is immediately replaced. However I cannot obtain that behaviour...

 

Check out the following schema and document:

 

SCHEMA
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema  xmlns:xsd="
http://www.w3.org/2001/XMLSchema
"
                        xmlns="
http://schema1"
                        targetNamespace="
http://schema1"
                        elementFormDefault="qualified"
                        attributeFormDefault="unqualified">
        <xsd:element name="subelement" type="subelementType"/>
        <xsd:element name="rootelement">
                <xsd:complexType>
                        <xsd:choice maxOccurs="unbounded">
                                <xsd:element ref="subelement"/>
                        </xsd:choice>
                </xsd:complexType>
        </xsd:element>
        <xsd:attribute name="myat" type="xsd:string" default="123"/>
        <xsd:complexType name="subelementType">
                <xsd:attribute ref="myat"/>
        </xsd:complexType>
</xsd:schema>

 

DOCUMENT
<?xml version="1.0" encoding="UTF-8"?>
<rootelement    xmlns="
http://schema1
"
                        xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
                        xsi:schemaLocation="
http://schema1 schema.xsd">
        <subelement/>
</rootelement>

 

I load the document to a DOM like this:

 

DOMParser->setDoNamespaces(true);
DOMParser->setDoSchema(true);
DOMParser->setValidationSchemaFullChecking(true);
DOMParser->parse(FileName);

In the DOM constructed, as expected, there is a "myat" attribute for element "subelement" having the value of "123". As the latter was declared as a global attribute in the schema, it is namespace-qualified (getNamespaceURI() GIVES "http://schema1") even though schema has attributeFormDefault="unqualified" (correct me if I'm wrong...).

So far so good.

Now I'm trying to remove that attribute. No matter which of the above methods I choose, I cannot obtain the immediate replacement of this attribute, although it has a default value.

“removeNamedItem” causes the creation of a "myat" element, but with no namespace. All other methods just remove the attribute and no

replacement occurs.

 

What is going on? Am I missing something?...

 

Is default-attribute re-instantiation only working for defaults specified in DTDs?, not in schemas?

 

Any help would be GREATLY appreciated...

Thanks in advance.

 

Nicolas

 

Reply via email to