java - how can I access the values of XML nodes using DOM API -
i trying access values in xml document dom parser , getting strange null pointer exception error. code using is:
import java.io.file; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.document; import org.w3c.dom.node; public class readxml { public static void main(string[] args) { file file = new file("c:\\users\\manolaki\\desktop\\assets.xml"); try { documentbuilder builder = documentbuilderfactory.newinstance().newdocumentbuilder(); document doc = builder.parse(file); doc.getdocumentelement().normalize(); node node = doc.getelementsbytagname("assets").item(0).getchildnodes().item(1).getchildnodes().item(1).getattributes().getnameditem("src"); string boo = node.getnodevalue(); system.out.println("name " + boo); } catch (exception e) { e.printstacktrace(); } } }
the xml using:
<?xml version="1.0" encoding="utf-8"?> <xml> <assets> <sprite> <img src="menu.png"/> </sprite> <sprite> <img src="background.png"/> </sprite> <sprite> <img src="buttons.png"/> </sprite> <sprite> <img src="animals.png"/> </sprite> <sprite> <img src="cycles.png"/> </sprite> <sprite> <img src="texts.mp3"/> </sprite> <sprite> <img src="music.mp3"/> </sprite> <sprite> <img src="click.mp3"/> </sprite> <sprite> <img src="swipe.mp3"/> </sprite> <sprite> <img src="dog.mp3"/> </sprite> </assets> <assets> <sprite> <img src="mehnu.png"/> </sprite> <sprite> <img src="background.png"/> </sprite> <sprite> <img src="buttons.png"/> </sprite> <sprite> <img src="animals.png"/> </sprite> <sprite> <img src="cycles.png"/> </sprite> <sprite> <img src="texts.mp3"/> </sprite> <sprite> <img src="music.mp3"/> </sprite> <sprite> <img src="click.mp3"/> </sprite> <sprite> <img src="swipe.mp3"/> </sprite> <sprite> <img src="dog.mp3"/> </sprite> </assets> </xml>
the code works fine , prints out "menu.png" @ console. problem while can navigate through assets nodes using first "item()" part, if try change second "item()" navigate through sprites prints null pointer exception error. example works if use:
node node = doc.getelementsbytagname("assets").item(1).getchildnodes().item(1).getchildnodes().item(1).getattributes().getnameditem("src");
but not when use
node node = doc.getelementsbytagname("assets").item(0).getchildnodes().item(2).getchildnodes().item(1).getattributes().getnameditem("src");
which think kind of strange.. given eclipse not finding errors. appreciated. thanks
your problem item(0) of nodelist text node, , text nodes don't have child nodes nullpointerexception being thrown.
try adding code verify:
node child0 = doc.getelementsbytagname("assets").item(0).getchildnodes().item(0); if (child0.getnodetype() == node.text_node) { system.out.println("child node text"); }
so keep in mind need check type of each node when iterating through nodelist.
in case, odd numbered children text nodes , children elements. try this:
nodelist nodes = doc.getelementsbytagname("assets").item(0).getchildnodes(); ( int x = 0; x < nodes.getlength(); x++ ) { node node = nodes.item(x); if (node.getnodetype() == node.text_node) { system.out.println(x + " text"); } else if (node.getnodetype() == node.element_node) { string nodename = node.getnodename(); system.out.println(x + " node: " + nodename); } }
output:
0 text 1 node: sprite 2 text 3 node: sprite 4 text 5 node: sprite ...
you might want check out this article dr. dobb's has example code create convenience methods low level dom parsing this.
Comments
Post a Comment