[jdom-interest] Empty xmlns in reconstructed XML
David M. Lang
david at proxsys.co.uk
Thu Aug 17 04:35:57 PDT 2006
Hi,
I'm trying to insert a child element into a document.
For example, the following document:-
<?xml version="1.0" encoding="UTF-8"?>
<resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
<list name="friends">
<entry uri="sip:john at differitas.com">
<display-name>John</display-name>
</entry>
</list>
</resource-lists>
I want to add an <entry> child to the <list> element:-
<entry uri="sip:david at differitas.com">
<display-name>David</display-name>
</entry>
This gives:-
<?xml version="1.0" encoding="UTF-8"?>
<resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
<list name="friends">
<entry uri="sip:john at differitas.com">
<display-name>John</display-name>
</entry>
<entry xmlns="" uri="sip:david at differitas.com">
<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"?>
<resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
<list name="friends">
<entry uri="sip:john at differitas.com">
<display-name>John</display-name>
</entry>
<entry uri="sip:david at differitas.com">
<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
More information about the jdom-interest
mailing list