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 tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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