10. august 2005 - 02:49
Der er
12 kommentarer og 1 løsning
XML, JAVA og SAXParser!
Hi, Jeg er ved at lave en config fil til en Java applikation hvor brugeren kan lave om på opsætning og der er data gemt i en xml fil som ser sådan ud! <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> <Configuration> <ViewerOff>0</ViewerOff> <ViewerTimerOff>0</ViewerTimerOff> </Configuration> Jeg har brug for en java kode i SAXParser hvor man kan opdatere (Opdate method) en "value" i en xml fra en element som er sent som parameter og en (Read method) hvor man kan læse hele config filen og retunere den i en array. Er der nogen der kan give mig en link til nogle eksampler hvor jeg kan kigge på? tak
Annonceindlæg fra IBM
10. august 2005 - 15:34
#2
Som du kan se, jeg vil gerne have en "configuration file" hvor all opsætninger er gemt. Er det godt nok og laver den fil i xml format eller er der bedre løsning til det til Java applikationer? :-)
10. august 2005 - 15:38
#3
Det er udmærket at lave det i XML. Men det lyder bare for mig som om du skal kigge på DOM/JDOM og ikke på SAX. Skal den være meget simpel så overvej at bruge en properties fil !
10. august 2005 - 19:26
#4
SAX er kun en et forslag :-) filen er simpel hvor configuration kan hentes fra og gemmes. Den skal holde få elementer som kan ser sådan ud: <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> <Configuration> <ViewerOff>0</ViewerOff> <ViewerTimerOff>0</ViewerTimerOff> <WorkingPath>c:/</WorkingPath> <TempDir>c:/temp</TempDir> <SaveDir>c:/apps</SaveDir> . . . </Configuration>
10. august 2005 - 19:31
#5
jeg ville finde en properties fil fristende ! config.properties: ViewerOff = 0 ViewerTimerOff = 0 ... kode: Properties p = new Properties(); p.load(new FileInputStream("config.properties")); vo = Integer.parseInt(p.getProperty("ViewerOff")); vto = Integer.parseInt(p.getProperty("ViewerTimerOff")); ...
10. august 2005 - 19:33
#6
Jeg tilføjer:- SAX forslag er fordi min applikationen bruger SAX og tror at det er nemmer og brug den igen istedet for at hente en ny package i min applikation som JDOM. Hvad synes du?
10. august 2005 - 19:34
#7
Jeg skal nok prøve med properties iaften :-)
10. august 2005 - 19:38
#8
Du kan godt lave en SAX parser som parser den config fil og f.eks. gemmer i en HashMap. Og så lave noget kode som skriver den HashMap ud som XML fil efter du har rettet i den. Opdater og gem er nemmere i DOM/JDOM. Ulempen ved dem er at de bruger meget memory, men det betydre næppe noget i denne kontekst.
10. august 2005 - 19:43
#9
dvs. det vil være nemmest og jeg vil også spar på memory hvis jeg bruge properties?
10. august 2005 - 19:48
#10
det er min vurdering ulempen ved properties er at de fundamentalt er 1 niveau modsat XML hvor du kan neste tags og dermed lave mange niveauer men din config fil ser meget lige ud af landevejen ud
10. august 2005 - 20:16
#11
her kommer et simpel eksempel config.properties ----------------- iv = 123 sv = abc config.xml ---------- <config> <iv>123</iv> <sv>abc</sv> </config> Config.java ----------- import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class Config { public static void main(String[] args) throws FileNotFoundException, IOException, ParserConfigurationException, SAXException { // properties Properties props = new Properties(); props.load(new FileInputStream("C:\\config.properties")); System.out.println(props.getProperty("iv")); System.out.println(props.getProperty("sv")); // XML Map xmlinfo = new HashMap(); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(new MySaxParser(xmlinfo)); xr.parse("C:\\config.xml"); System.out.println(xmlinfo.get("iv")); System.out.println(xmlinfo.get("sv")); } } class MySaxParser extends DefaultHandler { private String key; private StringBuffer value = new StringBuffer(); private Map xmlinfo; public MySaxParser(Map xmlinfo) { this.xmlinfo = xmlinfo; } public void characters(char buf[], int offset, int len) throws SAXException { value.append(new String(buf, offset, len)); return; } public void startElement(String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException { key = rawName; value = new StringBuffer(); return; } public void endElement(String namespaceURI, String localName, String rawName) throws SAXException { xmlinfo.put(key, value.toString()); return; } }
10. august 2005 - 20:16
#12
og et svar
16. august 2005 - 20:02
#13
Det var godt. Tak for din hjælp. :-)
Kurser inden for grundlæggende programmering