我有一个巨大的xml,我需要在其中找到要支付的金额。它位于距离CellText ='amount'的单元格相距2个单元格的位置

<TableRow>
    <Cell>
       <RowNo>4</RowNo>
       <CellColNo>1</CellColNo>
       <CellText>amount</CellText>
       <CellAttribute/>
    </Cell>
    <Cell>
       <RowNo>4</RowNo>
       <CellColNo>2</CellColNo>
       <CellText/>
       <CellAttribute/>
    </Cell>
    <Cell>
       <RowNo>4</RowNo>
       <CellColNo>3</CellColNo>
       <CellText>138</CellText>
       <CellAttribute/>
    </Cell>

这是我的代码,我在这里努力构建expressionString:
XPath xPath =  XPathFactory.newInstance().newXPath();
String exprString = "//TableRow/Cell[CellText='amount:']/following-sibling::cell[2]CellText/text()";
XPathExpression expr = xPath.compile(exprString);

    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;
    for (int j = 0; j < nodes.getLength(); j++) {
        System.out.println(nodes.item(j).getNodeValue());
    }

如何创建正确的exprString?

最佳答案

您可以使用的XPath表达式如下:

TableRow/Cell/CellText[text()='amount']/parent::Cell/following-sibling::Cell[2]/CellText/text()

XPathFiddle example

这将:
  • 选择文本等于CellTextamount元素
  • 然后导航到其父Cell元素
  • 然后导航到Cell同级
  • 之后的第二个位置
  • CellText
  • 返回文本

    输出

    138

    09-10 20:40