Avatar billede beef12 Nybegynder
19. april 2005 - 19:24 Der er 6 kommentarer og
1 løsning

SAX til at hente data fra XML fil

Hej,

Jeg har eksemepelvis denne form for XML-fil:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<root>
    <node1>text1</node1>
    <node2>text2</node2>
</root>


Og vil gerne, ved hjælp af en simpel System.out.println, få dette ud:
text1
text2

her er en snippet af den kode jeg arbejder med:

class MySax extends DefaultHandler {
  public void startElement(
  String namespaceURI,
  String localName,
  String rawName,
  Attributes atts) throws SAXException {
     
        System.out.println(rawName.toString() );

      return;
  }

Men det udskriver elementnavnene:
node1
node2

Hvordan får jeg nodens tekst hentet frem?


På forhånd tak
Avatar billede arne_v Ekspert
19. april 2005 - 19:28 #1
Den samler du op i characters metode.

Der er et eksempel i http://www.eksperten.dk/artikler/100
Avatar billede beef12 Nybegynder
19. april 2005 - 19:29 #2
tja - i kan også få hele koden, hvis det skulle behjælpeligt:


import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import org.xml.sax.*;



public class SAXofDOOM {
  public static void main(String[] args) throws Exception {
      SAXParserFactory spf = SAXParserFactory.newInstance();
      spf.setValidating(false);
      SAXParser saxParser = spf.newSAXParser();
      XMLReader xmlReader = saxParser.getXMLReader();
      xmlReader.setContentHandler(new MySax());
      xmlReader.parse("C:\\SAXFil.xml");
      return;
  }
}


class MySax extends DefaultHandler {
  public void startElement(
  String namespaceURI,
  String localName,
  String rawName,
  Attributes atts) throws SAXException {
     
    if(rawName.equals("node1") || rawName.equals("node2")) {
   
        System.out.println("executing: " + rawName.toString() );
    }
      return;
  }
 
}
Avatar billede beef12 Nybegynder
19. april 2005 - 19:46 #3
ok - fremragende artikel. Den hjalp mig til at komme videre. Smid et svar, så er der points.
Avatar billede arne_v Ekspert
19. april 2005 - 19:59 #4
svar
Avatar billede beef12 Nybegynder
19. april 2005 - 20:02 #5
du kunne vel ikke lige fortælle mig hvordan jeg sørger for at programmet kun udskriver den første af alle node2 forekomster?

<root>
    <node1>text1</node1>
    <node2>text2</node2>
    <node2>text3</node2>
    <node2>text4</node2>
</root>

således output stadig er:
text1
text2
Avatar billede arne_v Ekspert
19. april 2005 - 20:11 #6
One simple solution would be:

class MySax extends DefaultHandler {
  private boolean first = true;
  public void startElement(
  String namespaceURI,
  String localName,
  String rawName,
  Attributes atts) throws SAXException {
   
    if(rawName.equals("node1")) {
 
        System.out.println("executing: " + rawName.toString() );
    }
    if(rawName.equals("node2")) {
 
        if(first) System.out.println("executing: " + rawName.toString() );
        first = false;
    }
      return;
  }

}
Avatar billede beef12 Nybegynder
19. april 2005 - 20:16 #7
takker
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