Avatar billede rune_c Nybegynder
20. januar 2004 - 12:12 Der er 6 kommentarer og
1 løsning

gemme settings i XML

jeg har nu lavet et lille spil hvor jeg gerne ville kunne gemme diverse settings i et XML dokument. Jeg er kommet frem til at jeg skal have fat i DocumentBuilder, Document, Element osv, men synes stadigvæk ikke at have helt fod på tingene.

Hvis jeg har:

boolean isTaking = true;
int player = 1;

og vil have det som

<game>
  <settings>
      <isTaking type="boolean">true</isTaking>
      <player type="int"</player>
  </settings>
</game>

Og hvordan gemmes det i en fil..

Hvis en kunne stykke et eksempel sammen eller et link ville jeg blive glad :-)
Avatar billede arne_v Ekspert
20. januar 2004 - 12:57 #1
Forslag:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import org.apache.xml.serialize.XMLSerializer;

public class DomTest7 {
  public static void main(String[] args) {
      try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.newDocument();
        Element game = doc.createElement("game");
        doc.appendChild(game);
        Element isTaking = doc.createElement("isTaking");
        Attr isTakingAttr = doc.createAttribute("type");
        isTakingAttr.setValue("boolean");
        isTaking.setAttributeNode(isTakingAttr);
        isTaking.appendChild(doc.createTextNode("true"));
        game.appendChild(isTaking);
        Element player = doc.createElement("player");
        Attr playerAttr = doc.createAttribute("type");
        playerAttr.setValue("int");
        player.setAttributeNode(playerAttr);
        player.appendChild(doc.createTextNode("1"));
        game.appendChild(player);
        XMLSerializer ser = new XMLSerializer(System.out, null);
        ser.serialize(doc.getDocumentElement());
      } catch (FactoryConfigurationError e) {
        e.printStackTrace();
      } catch (ParserConfigurationException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
      return;
  }
}
Avatar billede rune_c Nybegynder
20. januar 2004 - 13:40 #2
tak for dit svar.

Hverken på min windåse eller på DTU er der org.apache.xml.serialize.*, så er der en anden måde jeg kan gemme det i en fil på uden at skulle installere andre pakker? Ellers er det jo perfekt
Avatar billede arne_v Ekspert
20. januar 2004 - 13:53 #3
Det er en Xerces specifik klasse, som gør det dejligt nemt at udskrive DOM træ'et.

Jeg mener ikke, at der er en god måde i JAXP API.

Det er ret nemt at skrive noget selv. Eller at finde noget der allerede
er skrevet.
Avatar billede jimlars Nybegynder
22. januar 2004 - 01:46 #4
Det virker som rimeligt simple settings.

Hvad med bare at bruge Property

Properties prop = new Properties();
prop.setProperty("player","1");
...
File f = new File("MyPropertyFile");
FileOutputStream os = new FileOutputStream(f);
prop.store(os, "PropertyFile");
Avatar billede jimlars Nybegynder
22. januar 2004 - 01:47 #5
undskyld det giver dig jo ikke det ønskede xml.
Avatar billede rune_c Nybegynder
25. januar 2004 - 11:07 #6
det virker jo arne_v. Synes bare det er utroligt at man ikke kan udskrive xml'en uden brug af externe klasser...men hva'..:)
Avatar billede arne_v Ekspert
26. januar 2004 - 13:44 #7
Jeg tror at de fleste skriver deres egen lille XML writer.

Men ja - jeg undrer mig også.
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