Como recuperar o nó após o nó da árvore XML usando o Xpath?
Primeiro, devo dizer que achoXpath
como um analisador muito bom, e eu acho muito poderoso quando comparando com outros analisadores.
Dado o seguinte 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>
Se eu quisesse encontrar ofirst
nó da Rodada 1 e Porta 1, aqui:
<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>
Eu farei isso:
<code> XPathExpression expr = xpath.compile("//Round[1]/Door[1]/Value[1]/*/text()"); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; </code>
e se eu quisessesecond
nó da Ronda 1 e Porta 1 e depois:
<code>XPathExpression expr = xpath.compile("//Round[1]/Door[1]/Value[2]/*/text()"); </code>
mas como faço isso usando um loop, já que não sei quantoValue-nodes
Eu tenho, significando como posso fazer isso usando um loop, onde cada iteração eu recupero 3 (eu quero dizer oxVal1
, xVal2
epVal
valores) mais valores de um nó Value!
As razões para pedir isto são:
Eu não sei quantoRound
-s tenho
Eu não sei quantoValue
-s tenho
Eu não quero declarar toda vez que um novoXPathExpression
Obrigado .