Empty xmlns in reconstructed XML 2006-08-17 - By David M. Lang
Back Hi,
I'm trying to insert a child element into a document. For example, the following document:-
<?xml version="1.0" encoding="UTF-8 (See http://UTF-8.ora-code.com)"?> <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"> <list name="friends"> <entry uri="sip:john@(protected)"> <display-name>John</display-name> </entry> </list> </resource-lists>
I want to add an <entry> child to the <list> element:-
<entry uri="sip:david@(protected)"> <display-name>David</display-name> </entry>
This gives:-
<?xml version="1.0" encoding="UTF-8 (See http://UTF-8.ora-code.com)"?> <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"> <list name="friends"> <entry uri="sip:john@(protected)"> <display-name>John</display-name> </entry> <entry xmlns="" uri="sip:david@(protected)"> <display-name>David</display-name> </entry> </list> </resource-lists>
JDOM has added an empty default namespace to my new <entry> element. OK, I understand that I've created the <entry> element without a namespace, so the JDOM serializer adds xmlns="" to the child element to prevent it from inheriting the default namespace of its parent. So, before adding the <entry> element, I place it in the default namespace:-
XmlElement child = ... XmlElement parent = ... child.setNamespace(new Namespace("", "urn:ietf:params:xml:ns:resource-lists")); parent.addContent(child);
I now got the following:-
<?xml version="1.0" encoding="UTF-8 (See http://UTF-8.ora-code.com)"?> <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"> <list name="friends"> <entry uri="sip:john@(protected)"> <display-name>John</display-name> </entry> <entry uri="sip:david@(protected)"> <display-name xmlns="">David</display-name> </entry> </list> </resource-lists>
JDOM sees that the new <entry> element is inheriting the namespace of its parent, but now places an xmlns="" in the <display-name> child element.
The final document is non-conformant with an XML schema. My problem is that the element being inserted is reconstructed from an I/O stream. I'm not building it from scratch, and so therefore have no control over the attached namespaces. This example is trivial - typically, I want to add complex elements, several levels deep. How do I do this? Do I need to iterate through the entire incoming element, to attach the parent's default namespace to EVERY child? I must have mis-understood something. Any help in this matter would be greatly appreciated. Apologies for the length of this mail.
Best regards,
David Lang
__ ____ ____ ____ ____ ____ ____ ____ ____ ____ To control your jdom-interest membership: http://www.jdom.org/mailman/options/jdom-interest/youraddr@(protected)
|
|