Следующий метод занимает 33 секунды (время выполнения) для выполнения 10000 итераций. CachedXPathAPI взят из org.apache.xpath.CachedXPathAPI. Я использую xalan-2.7.0.jar. Пожалуйста, любой может помочь здесь, как я могу уменьшить время выполнения. Если мы увеличим нагрузку, скажем, на 40000 итераций, то выполнение займет 10 минут. весь метод readXMLData вызывается из цикла for
public static Hashtable<String, NodeList> readXMLData(CachedXPathAPI cashedXPath, org.w3c.dom.Document doc, String nodePath, int nodeInstance) throws Exception
{
Hashtable<String, NodeList> input = null;
try
{
NodeList rowNodes = cashedXPath.selectNodeList(doc, nodePath);
// NodeList rowNodes = XPathAPI.selectNodeList( doc, nodePath);
if (rowNodes == null)
return null;
if (rowNodes.getLength() <= 0)
return null;
Element rowNode = (Element) rowNodes.item(nodeInstance);
if (rowNode == null)
return null;
NodeList rowElements = rowNode.getChildNodes();
if (rowElements == null)
return null;
input = new Hashtable<String, NodeList>();
for (int elementIndex = 0; elementIndex < rowElements.getLength(); elementIndex++)
{
Node rowElement = rowElements.item(elementIndex);
if (rowElement.getNodeType() == Node.ELEMENT_NODE)
{
Element elem = (Element) rowElement;
String name = elem.getNodeName();
if (elem.hasChildNodes())
{
NodeList child = elem.getChildNodes();
if (child != null)
{
input.put(name, child);
}
} else if (elem.hasAttributes())
{
input.put(name, (NodeList) rowElement);
}
}
}
return input;
} catch (TransformerException ex)
{
throw new Exception("readXMLData (TransformerException): " + ex.getMessage());
} catch (Exception ex)
{
throw new Exception("readXMLData (Exception): " + ex.getMessage());
}
}