Foro sobre Java SE > Navegacion XML
Lo que se suele hacer es "convertir" el XML en objetos de Java: una o varias clases, que representan la estructura XML. En los campos de esas clases, puede haber List, que son las que usas para "recorrer" los datos.
Ya esta todo eso como veras en el codigo esta cargado a un LIST pero como avanzo y retorno? la verdad soy nuevo on sintaxis java
Creo que estos dos enlaces te pueden dar ideas sobre cómo recorrer una lista.
http://www.jguru.com/faq/view.jsp?EID=1256048
http://stackoverflow.com/questions/6188671/quickest-and-most-efficient-way-to-traverse-an-arraylist-in-reverse
De todos modos, creo que es más flexible, entre otras ventajas, separar completamente la conversión de XML en objetos de Java, de su uso en componentes de Swing, como es tu caso. Lo mismo podría decirse de otras clases, que no sean componentes gráficos.
1.- Crear los objetos de java a partir de XML.
2.- Una vez creados, usarlos donde sea necesario.
En ese orden, y sin mezclar ambas tareas en una sola.
Tienes alguin ejemplo de como hacerlo al xml cono objetos?
Creo que podría deducir la estructura de tu XML en función de lo que has escrito más arriba; pero, para evitar errores, ¿Podrías poner un ejemplo completo de tu XML?.
Así podría construir la estructura de clases que lo representa.
Claro con Gusto
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<Usuarios>
<!-- Registro Numero #1 -->
<nombre>Nathaly</nombre>
Villares
<ciudad>Guayaquil</ciudad>
<domicilio>Cdla. Urdenor</domicilio>
<correo>nvillares@edu.ec</correo>
<genero>F</genero>
<clave>natvilgam94</clave>
<!-- Registro Numero #2 -->
<nombre>Daniel</nombre>
Moran
<ciudad>Loja</ciudad>
<domicilio>Cdla. Urdenor</domicilio>
<correo>dmoran@edu.ec</correo>
<genero>M</genero>
<clave>dowmortes</clave>
</Usuarios>
Perdon me equivoque es
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<tabla>
<!-- Registro Numero #1 -->
<usuarios>
<nombre>Nathaly</nombre>
Villares
<ciudad>Guayaquil</ciudad>
<domicilio>Cdla. Urdenor</domicilio>
<correo>nvillares@tes.edu.ec</correo>
<genero>F</genero>
<clave>natvilgam94</clave>
</usuarios>
<!-- Registro Numero #2 -->
<usuarios>
<nombre>Dower</nombre>
Moran
<ciudad>Loja</ciudad>
<domicilio>Cdla. Urdenor</domicilio>
<correo>dmoran@tes.edu.ec</correo>
<genero>M</genero>
<clave>dowmortes</clave>
</usuarios>
</tabla>
La clase raíz para Tabla:
@XmlRootElement
public class Tabla {
private List<Usuarios> usuarios;
public List<Usuarios> getUsuarios() {
return usuarios==null?null:Collections.unmodifiableList(usuarios);
}
public void setUsuarios(final List<Usuarios> usuarios) {
this.usuarios = Collections.unmodifiableList(usuarios);
}
public void addUsuario(final Usuarios usuario) {
getListaUsuarios().add(usuario);
}
private List<Usuarios> getListaUsuarios() {
return this.usuarios == null ? this.usuarios = new ArrayList<Usuarios>() : this.usuarios;
}
}
Si usas JABX http://jaxb.java.net/tutorial/
ya tienes la clase preparada para realizar los unmarshall
Lo mismo que si usas Jersey para obtener el XML mediante RESTful
En el caso de que vayas a usar un XML parsing a mano, como haces en tu código, debes usar el método addUsuario, en vez de acceder directamente a la lista.
La clase auxiliar para Usuarios:
public class Usuarios {
private String nombre;
private String ciudad;
private String domicilio;
private String correo;
private String genero;
private String clave;
public String getNombre() {
return nombre;
}
public void setNombre(final String nombre) {
this.nombre = nombre;
}
public String getCiudad() {
return ciudad;
}
public void setCiudad(final String ciudad) {
this.ciudad = ciudad;
}
public String getDomicilio() {
return domicilio;
}
public void setDomicilio(final String domicilio) {
this.domicilio = domicilio;
}
public String getCorreo() {
return correo;
}
public void setCorreo(final String correo) {
this.correo = correo;
}
public String getGenero() {
return genero;
}
public void setGenero(final String genero) {
this.genero = genero;
}
public String getClave() {
return clave;
}
public void setClave(final String clave) {
this.clave = clave;
}
}
Si haces un parser a mano, al principio creas el objeto de la clase Tabla, y posteriormente los de Usuarios cuando los necesites.
Al final del parser obtienes un objeto de Tabla con todos los datos del XML, que ya puedes usar como prefieras en cualquier otra clase o método.
Jajaja ahora el dilema es que no he usado esos parsers :-P
Puedes aplicarlo al mismo código que ya tienes :D
Creas Tabla tabla = new Tabla(); al principio.
A cada iteración del raíz, como ya haces, creas Usuario = new Usuario(); y le rellenas los datos, añades ese usuario a tabla, y vuelta a empezar.
Amigos hola
Tengo una duda de seguro me podran ayudar.
Como puedo navegar dentro de un XML con java y swing?
COn el sigte codigo lo abro pero quiero que al presionar el boton siguiente me avance un registro y lo mismo con anterior,,,
//Se crea un SAXBuilder para poder parsear el archivo
SAXBuilder sxbDoc = new SAXBuilder();
File filXML = new File(strPath);
try
{
//Se crea el documento a traves del archivo
Document docXML = (Document) sxbDoc.build( filXML );
//Se obtiene la raiz 'Proyecto'
Element elmRaiz = docXML.getRootElement();
//Se obtiene la lista de hijos de la raiz 'Proyecto'
List lstDatos = elmRaiz.getChildren( "Tabla" );
//Se recorre la lista de hijos de 'Proyecto'
for ( int i = 0; i < lstDatos.size(); i++ )
{
//Se obtiene el elemento 'Tabla'
Element elmTabla = (Element) lstDatos.get(i);
//Se obtiene la lista de hijos del tag 'Tabla'
List lstCampos = elmTabla.getChildren();
//System.out.println( "\tCodigo\t\tNombre\t\tDescripción\t\tStock\t\tPrecio" );
//Se recorre la lista de campos
//for ( int j = 0; j < lstCampos.size(); j++ )
//{
//Se obtiene el elemento 'Registro'
Element elmCampo = (Element)lstCampos.get(0);
//Se obtienen los valores que estan entre los tags '<campo></campo>'
//Se obtiene el valor que esta entre los tags '<nombre></nombre>'
String strCod = elmCampo.getChildTextTrim("codigo");
jtxCodigo.setText(strCod);
//Se obtiene el valor que esta entre los tags '<tipo></tipo>'
String strNom = elmCampo.getChildTextTrim("nombre");
jtxNombre.setText(strNom);
//Se obtiene el valor que esta entre los tags '<valor></valor>'
String strDes = elmCampo.getChildTextTrim("descripcion");
jtaDesc.setText(strDes);
//Se obtiene el valor que esta entre los tags '<valor></valor>'
String strStk = elmCampo.getChildTextTrim("stock");
jtxStock.setText(strStk);
//Se obtiene el valor que esta entre los tags '<valor></valor>'
String strPre = elmCampo.getChildTextTrim("precio");
jtxPrecio.setText(strPre);
//System.out.println( "\t"+strCod+"\t\t"+strNom+"\t\t"+strDes+"\t\t"+strStk+"\t\t"+strPre);
//}