You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xerces.apache.org by Tahura Chaudhry <ta...@hotmail.com> on 2005/05/24 22:35:20 UTC
missing Namespace declaration
Hi,
I am attempting to creating an XML document and then serialize it into a
Java string. My code looks like:
Document doc= new org.apache.xerces.dom.DocumentImpl();
Element root = doc.createElementNS("http://www.foo.com", "ns1:data");
StringWriter stringOut = new StringWriter();
OutputFormat format = new OutputFormat();
XMLSerializer serializer = new XMLSerializer(stringOut, format);
serializer.asDOMSerializer();
serializer.serialize(root);
String xmlstr = stringOut.toString();
When I print out the xmlstr , I see that the namespace declaration is
missing. The prefix "ns1" is used but not declared. The XML printed is:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:data/>
What do I need to do to get the namespace declaration to appear in the XML
string.
thanks,
Tahura Chaudhry
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-users-help@xerces.apache.org
Re: missing Namespace declaration
Posted by Stanimir Stamenkov <st...@myrealbox.com>.
/Tahura Chaudhry/:
> I am attempting to creating an XML document and then serialize it into a
> Java string. My code looks like:
>
> Document doc= new org.apache.xerces.dom.DocumentImpl();
> Element root = doc.createElementNS("http://www.foo.com", "ns1:data");
...
> When I print out the xmlstr , I see that the namespace declaration is
> missing. The prefix "ns1" is used but not declared. The XML printed is:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <ns1:data/>
>
> What do I need to do to get the namespace declaration to appear in the
> XML string.
You need to add it:
root.setAttribute("xmlns:ns1", "http://www.foo.com");
or may be:
root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:ns1",
"http://www.foo.com");
the later being useful only if you plan to manipulate the DOM
furhter and you would rely on the namespaceURI property.
Here's what I read in the DOM Level 2 Core specification regarding
"XML Namespaces"
<http://www.w3.org/TR/DOM-Level-2-Core/core.html#Namespaces-Considerations>:
> As far as the DOM is concerned, special attributes used for
> declaring XML namespaces are still exposed and can be manipulated
> just like any other attribute. However, nodes are permanently bound
> to namespace URIs as they get created. Consequently, moving a node
> within a document, using the DOM, in no case results in a change of
> its namespace prefix or namespace URI. Similarly, creating a node
> with a namespace prefix and namespace URI, or changing the namespace
> prefix of a node, does not result in any addition, removal, or
> modification of any special attributes for declaring the appropriate
> XML namespaces. Namespace validation is not enforced; the DOM
> application is responsible. In particular, since the mapping between
> prefixes and namespace URIs is not enforced, in general, the
> resulting document cannot be serialized naively. For example,
> applications may have to declare every namespace in use when
> serializing a document.
--
Stanimir
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-users-help@xerces.apache.org