Hi, xerces-developers,
(didn't find an entry point for xerces-c bug reports on
http://issues.apache.org/bugzilla/enter_bug.cgi, so I report it here)
Creating a new DOMDocument, supplying any namespace-argument different
than zero, results in DOM-tree/serialization inconsistencies (see
examples below).
With xml-parsed DOMDocuments, the document's root element contains the
xmlns-attribute, if given in the xml-file. In contrary, newly created
DOMDocuments' root elements never contain the xmlns-attribute,
although a namespace-argument was given to createDocument, but the
DOMWriter-serialized output shows the xmlns-attribute, as expected.
This is inconsistent.
Even worse: adding the xmlns-attribute manually to the root element
after creation, the serialized output shows the xmlns-attribute
twice, which is illegal with respect to the XML specification.
The only workaround would be to always set the namespace-argument of
DOMImplementationLS::createDocument to zero and to add the
xmlns-attribute manually.
Here's some examples that show the spot:
implementation: valid DOMImplementationLS-object-pointer
writer: valid DOMWriter-object-pointer
namespace: XMLCh-representation of a namespace name
root_name: XMLCh-representation of the root element name
xmlns: XMLCh-representation of "xmlns"
CASE 1:
DOMDocument *doc =
implementation->createDocument(namespace, root_name, 0);
DOMElement *elem = doc->getDocumentElement();
XMLCh *serialized = writer->serialize(elem);
o elem contains no attributes (e.g. elem->hasAttributes() returns
false resp. elem->getAttributes() is empty)
o serialized shows the provided xmlns-attribute
CASE 2:
DOMDocument *doc =
implementation->createDocument(namespace, root_name, 0);
DOMElement *elem = doc->getDocumentElement();
elem->setAttribute(xmlns, namespace);
XMLCh *serialized = writer->serialize(elem);
o elem contains the xmlns-attributes
o serialized shows the xmlns-attribute TWICE, which is invalid!
WORKAROUND:
DOMDocument *doc =
implementation->createDocument(0, root_name, 0);
DOMElement *elem = doc->getDocumentElement();
elem->setAttribute(xmlns, namespace);
XMLCh *serialized = writer->serialize(elem);
Regards,
Axel
--
Humboldt-University of Berlin
Institut for Computer Science
Signal-Processing and Pattern-Recognition
Dipl.-Inf. Axel Weiss
Rudower Chaussee 25
D 12489 Berlin-Adlershof
+49-30-2093-3050
** www.freesp.de **
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]