From 79975dcfce93fcdf9ef2fa59bb3834291eb70b9a Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Wed, 18 Oct 2017 16:04:06 +0000 Subject: [PATCH] bug 61630: performance improvements in XSSFExportToXml. Thanks to Daniel for the patch. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1812546 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/extractor/XSSFExportToXml.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java index cfa795385a..9b20af4a13 100644 --- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java +++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java @@ -436,29 +436,32 @@ public class XSSFExportToXml implements Comparator{ return -1; } - NodeList list = complexType.getChildNodes(); int indexOf = -1; + int i = 0; + Node node = complexType.getFirstChild(); + final String elementNameWithoutNamespace = removeNamespace(elementName); - for(int i=0; i< list.getLength();i++) { - Node node = list.item(i); + while (node != null) { if (node instanceof Element && "element".equals(node.getLocalName())) { Node element = getNameOrRefElement(node); - if (element.getNodeValue().equals(removeNamespace(elementName))) { + if (element.getNodeValue().equals(elementNameWithoutNamespace)) { indexOf = i; break; } } + i++; + node = node.getNextSibling(); } return indexOf; } private Node getNameOrRefElement(Node node) { - Node returnNode = node.getAttributes().getNamedItem("name"); + Node returnNode = node.getAttributes().getNamedItem("ref"); if(returnNode != null) { return returnNode; } - return node.getAttributes().getNamedItem("ref"); + return node.getAttributes().getNamedItem("name"); } private Node getComplexTypeForElement(String elementName,Node xmlSchema,Node localComplexTypeRootNode) { @@ -482,11 +485,10 @@ public class XSSFExportToXml implements Comparator{ return ""; } - NodeList list = localComplexTypeRootNode.getChildNodes(); + Node node = localComplexTypeRootNode.getFirstChild(); String complexTypeName = ""; - for(int i=0; i{ } } } + node = node.getNextSibling(); } return complexTypeName; } private Node getComplexTypeNodeFromSchemaChildren(Node xmlSchema, Node complexTypeNode, String complexTypeName) { - NodeList complexTypeList = xmlSchema.getChildNodes(); - for(int i=0; i< complexTypeList.getLength();i++) { - Node node = complexTypeList.item(i); + Node node = xmlSchema.getFirstChild(); + while (node != null) { if ( node instanceof Element) { if ("complexType".equals(node.getLocalName())) { Node nameAttribute = getNameOrRefElement(node); if (nameAttribute.getNodeValue().equals(complexTypeName)) { - - NodeList complexTypeChildList =node.getChildNodes(); - for(int j=0; j{ break; } } + sequence = sequence.getNextSibling(); } if (complexTypeNode!=null) { break; @@ -530,6 +531,7 @@ public class XSSFExportToXml implements Comparator{ } } } + node = node.getNextSibling(); } return complexTypeNode; } -- 2.39.5