Error getting attribute from xml with java parser -
Error getting attribute from xml with java parser -
i have next code:
libreria.java
package libreriaparser; public class libreria { public static void main(string[] args) { parser parser=new parser(); parser.parseficheroxml("biblioteca.xml"); parser.parsedocument(); parser.print(); } }
libro.java
package libreriaparser; import java.io.serializable; //defino el objeto tipo libro que contiene título, autor, año, editor y número de páginas. public class libro implements serializable { private string titulo=null; private string autor=null; private int anyo=0; private string editor=null; private int paginas=0; //incluyo dos contructores y los métodos y set necesarios public libro() { } public libro(string t, string a, int y, string e, int j) { titulo = t; autor = a; anyo = y; editor = e; paginas = j; } public string gettitulo() { homecoming titulo; } public string getautor() { homecoming autor; } public int getanyo() { homecoming anyo; } public string geteditor() { homecoming editor; } public int getpaginas() { homecoming paginas; } public void settitulo(string t) { titulo = t; } public void setautor(string a) { autor = a; } public void setanyo(short an) { anyo = an; } public void seteditor(string e) { editor = e; } public void setpaginas(short p) { paginas = p; } //defino united nations método print para mostrar los libros por consola public void print(){ system.out.println("título: "+titulo+". autor: "+autor+". editor: "+editor+". número de páginas: "+paginas); } }
parser.java
package libreriaparser; import java.io.ioexception; import java.util.arraylist; import java.util.iterator; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import javax.xml.parsers.parserconfigurationexception; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; import org.xml.sax.saxexception; public class parser { private document dom = null; private arraylist<libro> libros = null; public parser() { libros = new arraylist<libro>(); } public void parseficheroxml(string fichero) { // creamos una mill documentbuilderfactory dbf = documentbuilderfactory.newinstance(); // creamos united nations documentbuilder documentbuilder db; seek { db = dbf.newdocumentbuilder(); // parseamos el xml y obtenemos una representación dom dom = db.parse(fichero); } grab (parserconfigurationexception pce) { pce.printstacktrace(); } grab (saxexception se) { se.printstacktrace(); } grab (ioexception ioe) { ioe.printstacktrace(); } } public void parsedocument() { // obtenemos el elemento raíz element docele = dom.getdocumentelement(); // obtenemos el nodelist de elementos nodelist nl = docele.getelementsbytagname("libro"); if (nl != null && nl.getlength() > 0) { (int = 0; < nl.getlength(); i++) { // obtenemos united nations elemento de la lista (libro) element el = (element) nl.item(i); // obtenemos united nations libro libro l1 = getlibro(el); // lo añadimos al array libros.add(l1); } } } private libro getlibro(element libroele){ //para cada elemento libro, obtenemos su título, autor, año, editor y páginas string titulo = gettextvalue(libroele,"titulo"); string autor = gettextvalue(libroele,"autor"); // leemos el atributo año que va metido dentro del título del libro string anyostring = libroele.getattribute("anyo"); int anyo = integer.parseint(anyostring); string editor = gettextvalue(libroele,"editor"); int paginas = getintvalue(libroele,"paginas"); //creamos united nations nuevo libro con los elementos leídos del nodo libro l2 = new libro(titulo, autor, anyo, editor, paginas); homecoming l2; } private string gettextvalue(element ele, string tagname) { string textval = null; nodelist nl = ele.getelementsbytagname(tagname); if(nl != null && nl.getlength() > 0) { element el = (element)nl.item(0); textval = el.getfirstchild().getnodevalue(); } homecoming textval; } private int getintvalue(element ele, string tagname) { homecoming integer.parseint(gettextvalue(ele,tagname)); } public void print(){ iterator = libros.iterator(); while(it.hasnext()) { libro l3=(libro) it.next(); l3.print(); } } }
biblioteca.xml
<?xml version="1.0" encoding="utf-8"?> <biblioteca> <libro> <titulo anyo="2008">introduction linux</titulo> <autor>machtelt & garrels</autor> <editor>o'reilly</editor> <paginas>256</paginas> </libro> <libro> <titulo anyo="1991">el lenguaje de programación c</titulo> <autor>kernighan & ritchie</autor> <editor>prentice hall</editor> <paginas>294</paginas> </libro> </biblioteca>
my problem is: can't read attribute "anyo" xml file. if remove "anyo" libro.java , getlibro programme runs fine. need read attribute. job school , don't know i'm doing wrong. thanks.
the anyo
attribute belongs titulo
element. in code, getting value libro
node instead.
simply phone call getattribute
on element represents titulo
(the same way you're getting node via method gettextvalue
):
string anyostring = "0"; nodelist nl = libroele.getelementsbytagname("titulo"); if(nl != null && nl.getlength() > 0) { element el = (element)nl.item(0); anyostring = el.getattribute("anyo"); } int anyo = integer.parseint(anyostring);
java xml
Comments
Post a Comment