Как получить узел за узлом дерева XML, используя Xpath?

Во-первых, я должен сказать, что я нахожуXpath как очень хороший синтаксический анализатор, и я думаю, что он довольно мощный, если сравнивать его с другими парсерами.

Дайте следующий код:

<code>  DocumentBuilderFactory domFactory = 
  DocumentBuilderFactory.newInstance();
  domFactory.setNamespaceAware(true); 
  DocumentBuilder builder = domFactory.newDocumentBuilder();
  Document doc = builder.parse("input.xml");
  XPath xpath = XPathFactory.newInstance().newXPath();
</code>

Если бы я хотел найтиfirst узел раунда 1 и двери 1, здесь:

<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>

Я сделаю это:

<code> XPathExpression expr = xpath.compile("//Round[1]/Door[1]/Value[1]/*/text()");      
  Object result = expr.evaluate(doc, XPathConstants.NODESET);
  NodeList nodes = (NodeList) result;
</code>

и если бы я хотелsecond узел раунда 1 и двери 1, то:

<code>XPathExpression expr = xpath.compile("//Round[1]/Door[1]/Value[2]/*/text()");  
</code>

но как мне сделать это с помощью цикла, так как я не знаю, сколькоValue-nodes Я имею в виду, как я могу сделать это, используя цикл, где каждую итерацию я получаю 3 (я имею в видуxVal1 , xVal2 а такжеpVal values) больше значений узла Value!?

Причины для этого:

Я не знаю сколькоRound меня есть

Я не знаю сколькоValue меня есть

Я не хочу объявлять каждый раз новыйXPathExpression

Благодарность

Ответы на вопрос(1)

Ваш ответ на вопрос