Jak wskazano w artykule skaffman, należy upewnić się, że używasz bibliotek javax.xml.xpath
tak skutecznie, jak to możliwe. Jeśli wykonujesz instrukcję XPath bardziej, gdy chcesz ją skompilować do postaci XPathExpression
.
XPathExpression xPathExpression = xPath.compile("/root/device/modelname");
nl = (NodeList) xPathExpression.evaluate(dDoc, XPathConstants.NODESET);
Demo
W opcji Przykład # 2 będzie szybsze niż opcji # 1.
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class Demo {
public static void main(String[] args) {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = domFactory.newDocumentBuilder();
File xml = new File("input.xml");
Document dDoc = builder.parse(xml);
NodeList nl;
// OPTION #1
XPath xPath = XPathFactory.newInstance().newXPath();
nl = (NodeList) xPath.evaluate("root/device/modelname", dDoc, XPathConstants.NODESET);
printResults(nl);
nl = (NodeList) xPath.evaluate("/root/device/modelname", dDoc, XPathConstants.NODESET);
printResults(nl);
// OPTION #2
XPathExpression xPathExpression = xPath.compile("/root/device/modelname");
nl = (NodeList) xPathExpression.evaluate(dDoc, XPathConstants.NODESET);
printResults(nl);
nl = (NodeList) xPathExpression.evaluate(dDoc, XPathConstants.NODESET);
printResults(nl);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void printResults(NodeList nl) {
for(int x=0; x<nl.getLength(); x++) {
System.out.println("the value is: " + nl.item(x).getTextContent());
}
}
}
input.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<blah>foo</blah>
<device>
<modelname>xbox</modelname>
</device>
<blah>bar</blah>
<device>
<modelname>wii</modelname>
</device>
<blah/>
</root>
Być może niewłaściwie używasz interfejsu API. Nowy interfejs API nie jest magicznym pociskiem. Pokaż nam swój kod, być może możemy zaproponować ulepszenia. – skaffman
Mogę wygwizdywać tutaj, ale czy próbowałeś używać wyrażeń regularnych? Regeksy nie będą działać dla wszystkich typów plików xml, ale jeśli struktura jest dość prosta i masz pewność, że wyrazy regularne nie spowodują problemu, może przyspieszyć ten proces. – Augusto
@skaffman, przykro mi nie mogę podzielić się kodem z powodu polityki firmy – Nohsib