You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Nicolas Tsokas <ts...@ekt.gr> on 2006/02/24 15:46:35 UTC
Attribute with default value not immediately replaced... ?
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.google.com/url?sa=D&q=http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema"
xmlns="
<http://www.google.com/url?sa=D&q=http://schema1> http://schema1"
targetNamespace="
<http://www.google.com/url?sa=D&q=http://schema1> 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://www.google.com/url?sa=D&q=http://schema1>
http://schema1"
xmlns:xsi="
<http://www.google.com/url?sa=D&q=http://www.w3.org/2001/XMLSchema-instance>
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
<http://www.google.com/url?sa=D&q=http://schema1> 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://www.google.com/url?sa=D&q=http://schema1> 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