I am using a Transform
object to save my XML file but it seems to drop empty text nodes. Is there any way to create (and keep) a text node with an empty string i.e. "".
Here is how I create the node:
Element type = doc.createElement("TYPE");
type.appendChild(doc.createTextNode(value));
It is just that sometimes value
is an empty string "". When I look at the XML with a text editor I see
<TYPE />
instead of
<TYPE></TYPE>
After I read this XML file back in and traverse the nodes the <TYPE> element simply doesn't have any children even though I explicitly created one #text node for it!
Important note, I am not working from a known set of tags, rather the program I am working on uses the presence of a text node to assign a JTextField
to the GUI. It is just that sometimes the field is left empty (not null but ""). When I store that field and then read it back the GUI doesn't render the JTextField
anymore because there is no text node. So I am looking at ways to create an XML document that creates a text node even if there is nothing in it. If that simply can't be done with XML then I will have to use an attribute to mark tags that are editable (somewhat like Andrey Breslav suggested) and so should have a JTextField
assigned.
I will try Mads Hansen's suggestion of a non-breaking space.
A text node without text is not a text node.
If you are trying to control how the XML element is serialized, <TYPE/>
and <TYPE></TYPE>
are equivalent, and it will not matter to an XML processor if either was used. Both are declaring a TYPE element without any text()
. Most processors will serialize an empty element as a self-closing element.
If you really want to prevent the element from being serialized as self-closing, you could get cute and add a zero-width space as the text node value: <TYPE>​</TYPE>
which will look like: <TYPE></TYPE>
.
It isn't technically an "empty" string, but might achieve what you want, and will not pad with space if the text node is selected and used.