Avatar billede javanewbie11 Nybegynder
27. november 2002 - 16:11 Der er 16 kommentarer og
1 løsning

XML - HashMap

Er der nogen kan fortælle mig hvorfor:
At inde i min handler består min HashMap ganske rigtigt af alle elementer i XML filen...
Men i min main består HashMap'en kun af det sidste element i XML filen????

public class HashMapHandler extends DefaultHandler

  public HashMapHandler(HashMap map)
  {
      this.map = map;
  }
 
  public void startElement(String namespaceURI, String localName,
              String rawName, Attributes atts) throws SAXException
  {
      map = new HashMap();
   
      if(rawName.equals("statement"))
      {
          for(int i = 0; i < atts.getLength(); i++)
          {
            String name = atts.getValue("name");
            String sql = atts.getValue("SQL");
            map.put(name, sql);   
            System.out.println(map.values());
          }
      }
  }
 
 
  public HashMap getMap()
  {
      return map;
  }
 
  private HashMap map;
  private String rawName, localName, namespaceURI;
  private Attributes atts;
}


Main

public class Test
{
    public static void main(String []args) throws Exception
    {
        HashMap map = new HashMap();
        HashMapHandler handler = new HashMapHandler(map);
       
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setValidating(false);
        SAXParser saxParser = spf.newSAXParser();
        XMLReader xmlReader = saxParser.getXMLReader();
        xmlReader.setContentHandler(handler);
        xmlReader.parse("file:SQL.xml");
       
        map = handler.getMap();
       
        System.out.println(map.values());
    }
}
Avatar billede arne_v Ekspert
27. november 2002 - 16:34 #1
Slet linien hvor du laver en ny HashMap i startElement !
Avatar billede arne_v Ekspert
27. november 2002 - 16:36 #2
Den laver en ny tom map hvergang i starter på et
element.

Og det er ikke det I vil.

I behøver iøvrigt heller ikke at hente mappen
igen med getMap.

Opdateringerne lavet i HashMapHandler vil automatisk
være tilgængeligt i Test.
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 17:14 #3
Jeg ved ikke om jeg er helt med, men dette er den redigerede kode!

public class HashMapHandler extends DefaultHandler

  public HashMapHandler(HashMap map)
  {
      this.map = map;
  }
 
  public void startElement(String namespaceURI, String localName,
              String rawName, Attributes atts) throws SAXException
  {   
      if(rawName.equals("statement"))
      {
          for(int i = 0; i < atts.getLength(); i++)
          {
            String name = atts.getValue("name");
            String sql = atts.getValue("SQL");
            map.put(name, sql);   
            //System.out.println(map.values());
          }
      }
  }
 
  private HashMap map;
}

Main

public class Test
{
    public static void main(String []args) throws Exception
    {
        HashMap map = new HashMap();
        HashMapHandler handler = new HashMapHandler(map);
       
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setValidating(false);
        SAXParser saxParser = spf.newSAXParser();
        XMLReader xmlReader = saxParser.getXMLReader();
        xmlReader.setContentHandler(handler);
        xmlReader.parse("file:SQL.xml");
       
        System.out.println(map.values());
    }
}
Avatar billede arne_v Ekspert
27. november 2002 - 17:29 #4
Der ser rigtigt ud.

Virker det ?

(java er bedre end mine øjne til at finde fejl !)
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 17:32 #5
Nej den returnerer stadig kun det sidste element i XML filen
Avatar billede arne_v Ekspert
27. november 2002 - 17:42 #6
Iøvrigt, hvorfor bruger i:
  System.out.println(map.values());
og ikke bare:
  System.out.println(map);
?
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 17:53 #7
Aner det ikke... Havde jeg ikke lige tænkt over!
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 17:55 #8
Kan du svare mig hvorfor alle index i HashMap'en er = null

{null=INSERT INTO xmlTest VALUES(?)}

{null=SELECT * FROM xmlTest}

{null=DELETE * FROM xmlTest}
Avatar billede arne_v Ekspert
27. november 2002 - 18:00 #9
Det ser ud som om I ikke har nogen attribut "name" i jeres
XML !
Avatar billede arne_v Ekspert
27. november 2002 - 18:01 #10
Det skal være:

<statement name="navn-som-det-skal-gemms-under" SQL="sql-sætning"/>
Avatar billede arne_v Ekspert
27. november 2002 - 18:06 #11
En hash map skal have både en key og en value.

Har I fået alle statementene læse ind i hash mappen ?
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 18:07 #12
Nej stadig kun den sidste!
Avatar billede arne_v Ekspert
27. november 2002 - 18:09 #13
Mig er et fjols.

Det hænger sammen med det sidste problem.

I storer dem alle sammen med samme key (null).

Derfor overskrives værdierne.

Sæt name attribute ind, så skal det nok virke !
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 18:15 #14
Har lige fået det til at virke, ved at redigere XML'en, takker!
Avatar billede arne_v Ekspert
27. november 2002 - 18:15 #15
Hvis I slet ikke vil have det navn, men bare vil have
SQL sætningerne, så skal I erstatte HashMap med en
Vector eller ArrayList.
Avatar billede arne_v Ekspert
27. november 2002 - 18:18 #16
Herligt.

Det er en dejlig fornemmelse når skidtet virker.
Avatar billede javanewbie11 Nybegynder
27. november 2002 - 18:32 #17
Jep helt enig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester