SAX Parser verstehe nicht den Fehler ???



  • Hallo zusammen.

    Ich habe da ein Problem mit dem SAX Parser.
    Ich habe im Internet nach geschaut und habe mir schon viele tutors angeschaut aber irgendwie funktioneirt bei mir die ganze Sache mit dem SAX nicht.
    Mit dem DOM habe ich das Problem schon gelöst nur in diesem Fall muss es ein SAX Parser sein, weil mir nicht soviel Speicherplatz zur verfügung steht.

    Also folgenden Code habe ich geschrieben aber es geht nicht

    package com.bizframe.converter;
    
    import java.io.IOException;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import javax.xml.parsers.*;
    
    public class ConvertXMLtoDB extends DefaultHandler {
      public static boolean contactOK = false;
      public static void main(String[] argv) {
        System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
        String uri = "XML/CUSTCONTACT.XML";
        try {
          SAXParserFactory parserFactory = SAXParserFactory.newInstance();
          parserFactory.setValidating(false);
          parserFactory.setNamespaceAware(false);
          ConvertXMLtoDB ConvertXMLtoDBInstance = new ConvertXMLtoDB();
          SAXParser parser = parserFactory.newSAXParser();
          parser.parse(uri, ConvertXMLtoDBInstance);
        }
        catch(IOException ex) {
          ex.printStackTrace();
        }
        catch(SAXException ex) {
          ex.printStackTrace();
        }
        catch(ParserConfigurationException ex) {
          ex.printStackTrace();
        }
        catch(FactoryConfigurationError ex) {
          ex.printStackTrace();
        }
    
      }
    
      public void characters(char[] ch, int start, int length) throws SAXException {
    
      }
    
      public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equals("CONTACT")){
           //Wenn ein Element mit dem Contact Tag gefunden wird, dann mache etwas
           //Alle kindknoten Ausgeben z.B
        }
    
      }
    }
    

    Mein XML Document sieht folgendermasen aus.

    <CUSTCONTACT>
    	<CONTACT>
    		<PARNR>      3098</PARNR>
    		<KUNNR>100000</KUNNR>
    		<SORTL>ESSER</SORTL>
    		<NAME1>Esser</NAME1>
    		<NAMEV>Reimund</NAMEV>
    		<ANRED>Herr</ANRED>
    		<ABTPA/>
    		<PAFKT/>
    		<TELF1/>
    		<TELFX></TELFX>
    		<AKVER/>
    		<PAVIP/>
    		<PARVO/>
    		<GBDAT/>
    		<PARLA>DE</PARLA>
    		<TELFP/>
    	</CONTACT>
    .........
    .........
    usw
    

    Das da jetzt einige Tags leer sind sist egal.

    Meine Frage ist wie schaffe ich es wenn ich den "CONTACT" Tag finde, das dann alle anderen Tag die darunter sind ausgelsen werden.

    Danke BYE



  • du schaffst das nicht

    wenn es zu einem CONTACT element kommt weisst du das es begonnen hast

    du speicherst dir eine variable mit. zB status = IN_COMPACT;

    der SAX parser ist sequentiell
    er ruft einfach fuer jeden startenden tag die methode startElement auf

    versuch mal irgendwas wie das bsp dann wirst du verstehen wie er vorgeht
    (ich kann jetzt die methoden nicht mehr auswendig du musst das ganze noch etwas ueberarbeiten)

    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
       System.out.println(qName + " started");
    } 
    
      public void endElement(String uri, String localName, String qName,){
        System.out.println(qName + " ended");
    }
    


  • Danke für den Tip aber ich habe den Fehler schon gefunden.
    Hab auch alles gestern fertig geschrieben.

    BYE


Anmelden zum Antworten