¿Cómo extraigo datos de XML anidado usando JAVA DOM?

Aquí hay un código que debería guiarlo en el uso de DOM para analizar archivos XML. Te estabas perdiendo los creadores de documentos.

    //Build the document from the xmlString
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(new InputSource(new StringReader(xmlString)));

    //Get all the transaction elements and then loop over them
    NodeList transaction = doc.getElementsByTagName("transaction");
    for(int j = 0; j < transaction.getLength(); j++) {
        //Traverse down the transaction node till we get the billing info
        NodeList details = ((Element)transaction.item(j)).getElementsByTagName("details");
        NodeList account = ((Element)details.item(0)).getElementsByTagName("account");
        NodeList billinginfo = ((Element)account.item(0)).getElementsByTagName("billing_info");

        System.out.println("===Billing Info===");
        System.out.println("Type: "+((Element)billinginfo.item(0)).getAttribute("type"));

        //Get all children nodes from billing info
        NodeList billingChildren = billinginfo.item(0).getChildNodes();

        for(int i = 0; i < billingChildren.getLength(); i++) {
            Node current = billingChildren.item(i);
            //Only want stuff from ELEMENT nodes
            if(current.getNodeType() == Node.ELEMENT_NODE) {
                System.out.println(current.getNodeName()+": "+current.getTextContent());
            }
        }
    }

Esto produce lo siguiente de su ejemplo.

===Billing Info===
Type: credit_card
first_name: asdasdasd
last_name: asdasdasd23434
address1:
address2:
city:
state:
zip:
country:
phone:
vat_number:
card_type: Visa
year: 2039
month: 6
first_six: 111111
last_four: 9999
Respuesta 1

Puede usar la biblioteca de análisis de flujo de mapeo de flujo declarativo (DSM) para analizar fácilmente XML complejo.

Simplemente defina la asignación de datos que desea extraer de XML

Aquí hay definiciones de mapeo para su XML.

DSM ignora los espacios de nombres.

result:     
   type: array
   path: /transactions/transaction       
   fields:
       source:          
       account:
          type: array
          path: details/account
          fields:       
             accountCode: 
               path: account_code                 
             firstName: 
               path: first_name                 
             lastName: 
               path: last_name                 
             first_six: 
               path: billing_info/first_six
               dataType: int                 
             last_four: 
               path: billing_info/last_four
               dataType: int                 
             card_type: 
               path: billing_info/card_type

Código Java para analizar XML:

DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create();
Object result=  dsm.toObject(xmlFileContent);
// json represntation fo result
dsm.getObjectMapper().writerWithDefaultPrettyPrinter().writeValue(System.out, object);

Aquí está la salida:

[ {
  "source" : "subscription",
  "account" : [ {
    "accountCode" : "234234234",
    "firstName" : "asdadad",
    "lastName" : "asdadasd3433",
    "card_type" : "Visa",
    "first_six" : 111111,
    "last_four" : 9999
  } ]
} ]

Si desea deserializar directamente a una clase POJO, es posible con DSM

Respuesta: 2

Soy completamente nuevo en Java y estoy trabajando en una tarea. Necesito generar 6 números aleatorios dentro del rango de 1 a 49, lo cual es simple. Sin embargo, la complicación es que los números no pueden ...

import static java.lang.Integer. *; import static java.lang.Long. *; public class StaticImortError {public static void main (String args []) {System.out.println (MAX_VALUE); ...

Quiero traducir una vista en un movimiento circular, basado en valores del evento táctil de los ejes x e y. Lo hice funcionar usando solo un eje, como se ve en el gif a continuación. El sitio trumpdonald.org tiene ...

Si tengo un auto de clase: Public class Car {int weight; Car () {} Public car (int weight) {this.weight = weight; }} y otro sedán de clase que hereda de Car: public ...