Ich verwende XPATH in meinem Projekt und ich brauche bedingtConditional XPath vorkompilierte XPath
public static String getNodeContentForMultipleTag1(XPathExpression expr,Document doc) {
try {
NodeList typeResult = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < typeResult.getLength(); i++) {
Node typeResultNode = typeResult.item(i);
System.out.println(typeResultNode.getTextContent());
}
} catch (XPathExpressionException e) {
throw new RuntimeException("Failed parsing expression",e);
}
return null;
}
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
String s="<ex><DtTm><TxDtTm><Cd>ABCD</Cd><dt>1234</dt></TxDtTm><TxDtTm><Cd>XYZ</Cd><dt>891</dt></TxDtTm></DtTm></ex>";
InputStream inputStream = new ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8));
DocumentBuilder db= XpathInstanceUtil.getDocumentBuilderFactory().newDocumentBuilder();
Document doc = db.parse(inputStream);
XPath xpath = XpathInstanceUtil.getXPathFactory().newXPath();
XPathExpression expr = xpath.compile("/ex/DtTm/TxDtTm");
inputStream.close();
long st = System.currentTimeMillis();
getNodeContentForMultipleTag1(expr, doc);
long end = System.currentTimeMillis();
System.out.println(end-st);
long st1 = System.currentTimeMillis();
getNodeContentForMultipleTag1(expr, doc);
long end1 = System.currentTimeMillis();
System.out.println(end1-st1);
}
durch die Knoten zu durchlaufen, wenn der Cw-Wert ABCD ist i 1234 als Ergebnis bekommen sollte. Ich habe das versucht folgende
public static String getNodeContentForMultipleTag(String expresssion,String expectedNode,String expectedExpressionTag,Document doc) {
try {
XPath xpath = XpathInstanceUtil.getXPathFactory().newXPath();
NodeList typeResult = (NodeList) evaluateXPath(doc,expresssion,xpath,XPathConstants.NODESET);
NodeList valueResult= (NodeList) evaluateXPath(doc,expectedExpressionTag,xpath,XPathConstants.NODESET);
//NodeList typeResult = (NodeList) xpath.evaluate(expresssion,doc, XPathConstants.NODESET);
//NodeList valueResult = (NodeList) xpath.evaluate(expectedExpressionTag,doc, XPathConstants.NODESET);
for (int i = 0; i < typeResult.getLength(); i++) {
Node typeResultNode = typeResult.item(i);
typeResultNode.getParentNode().removeChild(typeResultNode);
Node valueResultNode = valueResult.item(i);
if(typeResultNode.getTextContent().equals(expectedNode) && valueResultNode!=null){
valueResultNode.getParentNode().removeChild(valueResultNode);
return valueResultNode.getTextContent();
}
}
} catch (XPathExpressionException e) {
throw new RuntimeException("Failed parsing expression"+expresssion,e);
}
return null;
}
Dies ist, wie Ausdrücke wie
aussehenpublic static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
String s="<ex><DtTm><TxDtTm><Cd>ABCD</Cd><dt>1234</dt></TxDtTm><TxDtTm><Cd>XYZ</Cd><dt>891</dt></TxDtTm></DtTm></ex>";
InputStream inputStream = new ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8));
DocumentBuilder db= XpathInstanceUtil.getDocumentBuilderFactory().newDocumentBuilder();
Document doc = db.parse(inputStream);
String ss = getNodeContentForMultipleTag("/ex/DtTm/TxDtTm/Cd", "XYZ", "/ex/DtTm/TxDtTm/dt", doc);
System.out.println(ss);
}
Aber gerade seine Leistung ist low.How es effizient scheint völlig Dieser Code
Die Leistung hängt von dem Produkt ab, das Sie verwenden. Der von Ihnen angezeigte Code wird jedoch mit jedem Produkt ausgeführt, das die Java XPath-API implementiert. Die Leistung hängt auch davon ab, welche Version von Java Sie verwenden. Sie sollten auch quantifizieren, welche Leistung Sie benötigen und was Sie tatsächlich erhalten, damit wir einschätzen können, wie drastisch die erforderlichen Änderungen sind. –
Ja, ich habe versucht, Java Xpath.Actually meine Xml sieht größer als das, was gepostet wird. Es gibt enorme Auswirkungen auf die Leistung wegen Xpath.Ich verwende die Ausdrücke nicht.So muss ich mehr als 1000 Mal für ein XML zu bewerten, die riesige Menge von generiert XObject – pppavan
Mit Xpath kann ich 200000 in 7 min mit riesigem Speicherverbrauch analysieren. – pppavan