我如何在Xpath中为两个属性设置条件?

时间:2014-08-10 20:52:16

标签: java xml xpath

我如何通过PointLocation PointBrush得到Xpath哪个内容正好是x和y。 不是:我在Xpath内写了java

我的Xpath:

  NodeList brushNode="PointBrush/PointLocation[x['" + entity.getPointLocation().getX() + "'] | /y['" + entity.getPointLocation().getY() + "']]"

我的XMl:

       <PointBrush>
         <PointLocation>
            <x>36.473796987533674</x>
            <y>35.49325534870742</y>
         </PointLocation>
      </PointBrush>
      <PointBrush>

   <PointBrush>
         <PointLocation>
            <x>36.4723496987533674</x>
            <y>35.1234534870742</y>
         </PointLocation>
      </PointBrush>
      <PointBrush>

1 个答案:

答案 0 :(得分:0)

根据您的需要,您至少有两种不同的选择......

您可以使用类似......

的内容
//PointBrush/PointLocation[x[text()='...'] and y[text()='...']]

这将返回PointBrush文档中具有PointLocation的任何位置,其中xy节点的文本内容与您指定的值匹配。 ..

或者您可以使用类似......

的内容
//PointBrush/PointLocation[x[text()='...']] | //PointBrush/PointLocation[y[text()='...']]

将返回包含PointBrush的任何PointLocation,其中包含x节点,其文本内容与x值OR匹配,其中y节点的文本为PointLocation上下文匹配y值...

这是一个非常重要的区别,因为这将检查x和y节点,并将返回匹配EITHER情况的每个try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document dom = db.parse(Test1.class.getResourceAsStream("/Test.xml")); XPath xpath = XPathFactory.newInstance().newXPath(); // Find the "thing" node... XPathExpression pointBrushExpr = xpath.compile("//PointBrush/PointLocation[x[text()='36.473796987533674'] and y[text()='35.49325534870742']]"); Node pointBrush = (Node) pointBrushExpr.evaluate(dom, XPathConstants.NODE); XPathExpression xExpr = xpath.compile("x"); Node xNode = (Node) xExpr.evaluate(pointBrush, XPathConstants.NODE); XPathExpression yExpr = xpath.compile("y"); Node yNode = (Node) yExpr.evaluate(pointBrush, XPathConstants.NODE); System.out.println(xNode.getTextContent() + " x " + yNode.getTextContent()); XPathExpression checkExp = xpath.compile("//PointBrush/PointLocation[x[text()='36.473796987533674']] | //PointBrush/PointLocation[y[text()='35.49325534870742']]"); NodeList check = (NodeList) checkExp.evaluate(dom, XPathConstants.NODESET); for (int index = 0; index < check.getLength(); index++) { Node node = check.item(index); xExpr = xpath.compile("x"); xNode = (Node) xExpr.evaluate(node, XPathConstants.NODE); yExpr = xpath.compile("y"); yNode = (Node) yExpr.evaluate(node, XPathConstants.NODE); System.out.println(xNode.getTextContent() + " x " + yNode.getTextContent()); } } catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException exp) { exp.printStackTrace(); } ...

{{1}}