[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