]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLParser.java
Attribute namespace + multi-schema data export
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLParser.java
index 3d708f4842f729ea4f58bf5a76041524a3420242..44530c00c968095ac0f0701e63ef469f085e4d73 100644 (file)
@@ -100,10 +100,10 @@ public class XMLParser extends DefaultHandler implements Serializable {
        
        private List<ParserElement> idReferenceElements = new ArrayList<ParserElement>();
        
-       private void loadElement(Deque<ParserElement> parents, ParserElement element) throws SAXException{
-               loadElement(parents, element, true);
+       private boolean loadElement(Deque<ParserElement> parents, ParserElement element) throws SAXException{
+               return loadElement(parents, element, true);
        }
-       private void loadElement(Deque<ParserElement> parents, ParserElement element, boolean checkParent) throws SAXException{
+       private boolean loadElement(Deque<ParserElement> parents, ParserElement element, boolean checkParent) throws SAXException{              
                XMLElementParser parser = null;
                ParserElement parent = null;
                if (parents.size() > 0) {
@@ -113,8 +113,8 @@ public class XMLParser extends DefaultHandler implements Serializable {
                        if (checkParent && parent.getXMLParser() != null && parent.getXMLParser() != this) {
                                //element.setXMLParser(parent.getXMLParser());
                                element.setXMLParser(parent.getXMLParser());
-                               parent.getXMLParser().loadElement(parents, element);
-                               return;
+                               if (parent.getXMLParser().loadElement(parents, element))
+                                       return true;
                        }
                        if (parent.getElementParser() instanceof XMLElementNamedChildParser) {
                                // use parent's named child parser if it is supported
@@ -150,6 +150,7 @@ public class XMLParser extends DefaultHandler implements Serializable {
                                if (parser instanceof IDReferenceParser)
                                        idReferenceElements.add(element);
                                element.setElementParser(parser);
+                               return true;
                        } catch (DatabaseException e) {
                                throw new SAXException(e);
                        }
@@ -159,12 +160,14 @@ public class XMLParser extends DefaultHandler implements Serializable {
                        String nsRef[] = element.getQName().split(":");
                        if (schemaRef != null && subParsers.containsKey(schemaRef.value)) {
                                XMLParser subParser = subParsers.get(schemaRef.value);
-                               subParser.loadElement(parents, element);
+                               boolean b = subParser.loadElement(parents, element);
                                element.setXMLParser(subParser);
+                               return b;
                        } else if (nsRef.length == 2 && element.getNS(nsRef[0]) != null && subParsers.containsKey(element.getNS(nsRef[0]))) {
                                XMLParser subParser = subParsers.get(element.getNS(nsRef[0]));
-                               subParser.loadElement(parents, element, false);
+                               boolean b = subParser.loadElement(parents, element, false);
                                element.setXMLParser(subParser);
+                               return b;
                        } else {
                                if (parent == null && parents.size() > 0)
                                        parent = parents.peek();
@@ -178,6 +181,7 @@ public class XMLParser extends DefaultHandler implements Serializable {
                                
                                logger.log(new Status(IStatus.ERROR, PLUGIN_ID, err));
                                if (debug) System.err.println(err);
+                               return false;
                        }
                }
        }