¿Cómo recuperar nodo tras nodo de árbol XML utilizando Xpath?
En primer lugar, debo decir que encuentroXpath
como un analizador muy agradable, y creo que bastante potente cuando lo comparo con otros analizadores.
Dado el siguiente código:
<code> DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse("input.xml"); XPath xpath = XPathFactory.newInstance().newXPath(); </code>
Si quisiera encontrar elfirst
nodo de Ronda 1 y Puerta 1, aquí:
<code><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> </code>
Haré esto
<code> XPathExpression expr = xpath.compile("//Round[1]/Door[1]/Value[1]/*/text()"); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; </code>
y si quisiera elsecond
nodo de Ronda 1 y Puerta 1 entonces:
<code>XPathExpression expr = xpath.compile("//Round[1]/Door[1]/Value[2]/*/text()"); </code>
pero ¿cómo hago esto usando un bucle, ya que no sé cuántoValue-nodes
Tengo, es decir, cómo puedo hacer esto usando un bucle, donde cada iteración recupero 3 (me refiero a laxVal1
, xVal2
ypVal
valores) más valores de un nodo de valor?
Las razones para solicitar esto son:
No se cuantoRound
-s tengo
No se cuantoValue
-s tengo
No quiero declarar cada vez una nueva.XPathExpression
Gracias .