我如何通过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>
答案 0 :(得分:0)
根据您的需要,您至少有两种不同的选择......
您可以使用类似......
的内容//PointBrush/PointLocation[x[text()='...'] and y[text()='...']]
这将返回PointBrush
文档中具有PointLocation
的任何位置,其中x
和y
节点的文本内容与您指定的值匹配。 ..
或者您可以使用类似......
的内容//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}}