¿Una forma sencilla de iterar en un árbol XML y extraer datos de él?

Suponiendo que tengo cuatro niveles en mi árbol XML, donde el nivel 3 puede tener el mismo hijo, dos veces, es decir, en el siguiente XML:

<Game>
    <Round>
        <roundNumber>1</roundNumber>
        <Door>
            <doorName>abd11</doorName>
            <Value>
                <xVal1>0</xVal1>
                <xVal2>25</xVal2>
                <pVal>0.31</pVal>
            </Value>
            <Value>
                <xVal1>25</xVal1>
                <xVal2>50</xVal2>
                <pVal>0.04</pVal>
            </Value>
            <Value>
                <xVal1>50</xVal1>
                <xVal2>75</xVal2>
                <pVal>0.19</pVal>
            </Value>
            <Value>
                <xVal1>75</xVal1>
                <xVal2>100</xVal2>
                <pVal>0.46</pVal>
            </Value>
        </Door>
        <Door>
            <doorName>vvv1133</doorName>
            <Value>
                <xVal1>60</xVal1>
                <xVal2>62</xVal2>
                <pVal>1.0</pVal>
            </Value>
        </Door>
    </Round>
    <Round>
        <roundNumber>2</roundNumber>
        <Door>
            <doorName>eee</doorName>
            <Value>
                <xVal1>0</xVal1>
                <xVal2>-25</xVal2>
                <pVal>0.31</pVal>
            </Value>
            <Value>
                <xVal1>-25</xVal1>
                <xVal2>-50</xVal2>
                <pVal>0.04</pVal>
            </Value>
            <Value>
                <xVal1>-50</xVal1>
                <xVal2>-75</xVal2>
                <pVal>0.19</pVal>
            </Value>
            <Value>
                <xVal1>-75</xVal1>
                <xVal2>-100</xVal2>
                <pVal>0.46</pVal>
            </Value>
        </Door>
        <Door>
            <doorName>cc</doorName>
            <Value>
                <xVal1>-60</xVal1>
                <xVal2>-62</xVal2>
                <pVal>0.3</pVal>
            </Value>
            <Value>
                <xVal1>-70</xVal1>
                <xVal2>-78</xVal2>
                <pVal>0.7</pVal>
            </Value>
        </Door>
    </Round>
</Game>

Tengo dos Doorspara cada uno Round, entonces la pregunta es, usando Domo Sax(o Jdom si ayuda) puede

I iterar en mi árbol y obtener los datos en cada nivel?

En el momento en que "bajé" un nivel y obtuve las rondas, aquí:

  DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc = docBuilder.parse (new File("input.xml"));

    // normalize text representation
    doc.getDocumentElement ().normalize ();
    System.out.println ("Root element of the doc is " +    // would produce Game
         doc.getDocumentElement().getNodeName());


    NodeList roundNodes = doc.getElementsByTagName("Round");   // roundNodes are the Rounds 
    int totalNodes = roundNodes.getLength();                   // 2 by the example 
    System.out.println("Total number of Rounds are : " + totalNodes);   


    for (int i = 0; i < roundNodes.getLength() ; i++)

    {
        Node node = roundNodes.item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE)
        {
            Element element = (Element)node;
            NodeList firstDoorList = element.getElementsByTagName("Door");
            Element firstDoorElement = (Element)firstDoorList.item(0);

            NodeList textFNList = firstDoorElement.getChildNodes();
            System.out.println("First Door : " + ((Node)textFNList.item(0)).getNodeValue().trim());
        }
    }

pero parece mucho código para la iteración.

¿Hay una manera simple de extraer los datos de ese XML? Supongamos que tengo 2 Puertas por ronda y un cierto número de Rondas.

Gracias

Respuesta 1

Esta es la primera vez que programo y me cuesta entender qué se debe hacer con los comandos mysql y qué se debe hacer con Java (estoy programando la base de datos con Java porque no ...

Estoy tratando de escanear mi proyecto PHP con Phantm. Descargué el release.jar y estoy ejecutando: java -jar /path/to/my/phantm-1.0.6.jar Me sale la siguiente excepción: Excepción en el hilo "...

Sé que no hay forma de acceder a los enlaces de variables en Java (como en & C o & php). Pero, por ejemplo, tengo esa tarea: public class JustTest {private int n = 1; int ...

Estoy trabajando en un proyecto que requeriría implementar funcionalidades como la correlación cruzada. ¿Alguien puede ayudarme si hay alguna API / bibliotecas de código abierto existente?