xml
Tengo un problema estoy tratando de extraer informacion de un xml el problema es el siguiente:
tengo dos tag hijos de Conceptos llamados concepto los dos y no se como extraer la informacion ya lo e estado intentando pero no lo logro explico este es el xml ocupo JespXML.jar
<cfdi:Conceptos>
<cfdi:Concepto cantidad="2.00" unidad="PIEZA" descripcion="TONER HP CF210X NEGRO" valorUnitario="1291.9500" importe="2377.19">
</cfdi:Concepto>
<cfdi:Concepto cantidad="5.00" unidad="PIEZA" descripcion="TONER HP 131 COLOR CF211A-CF212A-CF213A" valorUnitario="1239.7500" importe="5702.85">
</cfdi:Concepto>
</cfdi:Conceptos>
<cfdi:Concepto cantidad="2.00" unidad="PIEZA" descripcion="TONER HP CF210X NEGRO" valorUnitario="1291.9500" importe="2377.19">
</cfdi:Concepto>
<cfdi:Concepto cantidad="5.00" unidad="PIEZA" descripcion="TONER HP 131 COLOR CF211A-CF212A-CF213A" valorUnitario="1239.7500" importe="5702.85">
</cfdi:Concepto>
</cfdi:Conceptos>
asi extraigo la primera parte
Tag conceptos = raiz.getTagHijoByName("cfdi:Conceptos");
Tag concepto = conceptos.getTagHijoByName("cfdi:Concepto");
cantidad3 = concepto.getValorDeAtributo("cantidad");
unidad3 = concepto.getValorDeAtributo("unidad");
descripcion3 = concepto.getValorDeAtributo("descripcion");
valor3 = concepto.getValorDeAtributo("valorUnitario");
importe3 = concepto.getValorDeAtributo("importe");
Tag concepto = conceptos.getTagHijoByName("cfdi:Concepto");
cantidad3 = concepto.getValorDeAtributo("cantidad");
unidad3 = concepto.getValorDeAtributo("unidad");
descripcion3 = concepto.getValorDeAtributo("descripcion");
valor3 = concepto.getValorDeAtributo("valorUnitario");
importe3 = concepto.getValorDeAtributo("importe");
y extraigo la informacion que requiro pero solo de esta parte
<cfdi:Concepto cantidad="2.00" unidad="PIEZA" descripcion="TONER HP CF210X NEGRO" valorUnitario="1291.9500" importe="2377.19">
me gustaria extraer la siguiente parte pero no puedo ya que me vuelve a jalar los mismos datos con este codigo
y me vuelve a jalar la misma informacion de
<cfdi:Concepto cantidad="2.00" unidad="PIEZA" descripcion="TONER HP CF210X NEGRO" valorUnitario="1291.9500" importe="2377.19">
ayuda
- raul1990's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
El método
El método
getTagHijoByName("cfdi:Concepto")
te trae solo el primero debes de usargetTagHijoByName("cfdi:Concepto", Tag.Cantidad.TODOS_LOS_TAGS );
No conozco la razón por la cual elegiste esta biblioteca para XML pero su código fuente esta disponible, revisalo para que veas que otras opciones tienes ( así es como supe que existía ese método )
https://code.google.com/p/analizador-xml/source/browse/#svn%2Ftrunk%2Fsr...
gracias por responder oscar
gracias por responder oscar alguno que me recomiendes
puedes usar Dom4J: public
puedes usar Dom4J:
try {
File inputFile = new File("cfdi.xml");
SAXReader reader = new SAXReader();
Document document = reader.read(inputFile);
System.out.println("Root element :"
+ document.getRootElement().getName());
Element classElement = document.getRootElement();
Node nodeEmisor = document.selectSingleNode("//cfdi:Comprobante/cfdi:Emisor");
System.out.println("Nombre del elemento :" + nodeEmisor.getName());
System.out.println("Razon Social Emisor: " + nodeEmisor.valueOf("@nombre"));
System.out.println("RFC Emisor: " + nodeEmisor.valueOf("@rfc"));
List<Node> nodes = document.selectNodes("//cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto");
System.out.println("----------------------------");
for (Node node : nodes) {
System.out.println("\nCurrent Element :" + node.getName());
System.out.println("Descripcion : " + node.valueOf("@descripcion"));
System.out.println("Descripcion : " + node.valueOf("@valorUnitario"));
System.out.println("Descripcion : " + node.valueOf("@cantidad"));
System.out.println("Descripcion : " + node.valueOf("@importe"));
}
} catch (DocumentException e) {
}
}
Cambia la forma de extraer la informacion!!
Solo te dire
xjc
jaxb
y te aseguro que solucionaras todos tus problemas.
"No busquen demasiado, java ya tiene la solución."
Xpath
Utiliza alguna libreria que te permita hacer consultas con Xpath, ya te recomendaron algunas
Aquí está la manera de extraer de un CFDI
http://www.javamexico.org/blogs/nomarlegnar/leer_xml_de_un_cfdi_para_dar...