Hi Michael,
Yes, I can be able to parse the xml data, but my program is failing
when executing the code below, to retrieve the Record where there is
this empty tag without a value, <weight/>
<weight>something</weight> can be retrieved, but why not this one
<weight/>
As far as I am concerned <weight/> is a well-formed empty tag, and it
should be retrieved successfully!
There must an XML/Jave API to be able to retrieve it!
..............................................................................................
if (node.getNodeName()=="weight") {
String weightvalue = node.getFirstChild().getNodeValue();
}
-----------------------------------------------------------------------------------------------
An empty tag has no child nodes. Find out how many children a node has
by using node.getChildNodes().getLength();
See Michael's example below in which I've extended to obtain the value
of the <weight> tags.
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class XMLTest {
public static void main(String[] args) throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
+ "<root>\n"
+ " <Record>\n"
+ " <PartNo>01</PartNo>\n"
+ " <weight/>\n"
+ " </Record>\n"
+ " <Record>\n"
+ " <PartNo>2</PartNo>\n"
+ " <weight>A</weight>\n"
+ " </Record>\n" + "</root>";
System.out.println(xml);
byte data[] = xml.getBytes("ISO-8859-1");
ByteArrayInputStream is = new ByteArrayInputStream(data);
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
is.close();
inspect(doc);
System.out.println("Done.");
}
private static void inspect(Node node) {
if (node != null) {
if ("weight".equals(node.getNodeName())) {
String weightValue;
NodeList children = node.getChildNodes();
if (children.getLength() > 0) {
weightValue = node.getFirstChild().getNodeValue();
}
else
{
weightValue = "#empty#";
}
System.out.println(node + " " + weightValue);
}
NodeList children = node.getChildNodes();
int n = children.getLength();
for (int i = 0; i < n; i++) {
inspect(children.item(i));
}
}
}
}