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?...
Any help would be GREATLY appreciated...
Thanks in advance.
Nicolas