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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -