Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
2.6.2
-
None
-
None
-
JDK 1.4.2
Description
If a CDATA section is empty, ie <![CDATA[]]>, it is not possible to retrieve this node (eg by getFirstChild()). Instead, null is returned.
From org.w3c.dom.Node javadoc, getFirstChild() only returns null if there is no child. And if there is a CDATA section child, getNodeValue returns "content of the CDATA Section", so in this case by getFirstChild().getNodeValue() an empty string must be returned. In fact, by this call, a NullPointerException gets thrown.
XML-test-document:
----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----
<test><![CDATA[]]></test>
----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----
Java-test-program:
----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XercesTester {
public static void main(String[] args) {
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse("c:/test.xml");
Element testNode = doc.getDocumentElement();
System.out.println("Test Root Node: " + testNode.getNodeName());
System.out.println("Node Value of Root Node: " + testNode.getNodeValue());
Node cDataNode = testNode.getFirstChild();
if (cDataNode == null)
else
{ System.out.println("CDATA Node: " + cDataNode.getNodeName()); System.out.println("Node Value of CDATA Node: ---" + cDataNode.getNodeValue() + "---"); }} catch (Exception e)
{ e.printStackTrace(); } }
}
----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----