Avatar billede touel Nybegynder
18. september 2008 - 18:38 Der er 18 kommentarer og
1 løsning

læse data til XML fil

jeg er i gang med et program hvorfra jeg ønsker at overføre data til et XML dokument.

Jeg vil gerne vide om det kan lade sig gøre at lave en slags XML template, som indlæser data fra mit program.

Når der skal laves en klasse i java, som indsætter data i xml template, skal man så i klassen opbygge template fra bunden af, eller kan man selv lave xml template og så bare referere til den :

eks ->  final String = "C\:test.xml"

Hvilke ting skal jeg have med i java klassen for at den kan skrive til xml template/fil ?
Avatar billede arne_v Ekspert
18. september 2008 - 18:43 #1
Jeg tror at du kan vaelge mellem 2 forskellige approaches:

A)  du gemmer dine data i et objekt og bruger saa en af de mange maader i Java
    til at konvertere et objekt til XML

    det er supernemt, men du kan ikke helt bestemme dit XML format

B)  du laeser en fil ind som String og saa erstatter du visse tokens med
    med vaerdier

    eksempel:

    s = s.replace("@@xxx@@", xxx);
Avatar billede touel Nybegynder
18. september 2008 - 18:52 #2
tror jeg vil vælge A, men skal jeg selv opbygge xml template i java, eller er det noget der laves seperat
Avatar billede arne_v Ekspert
18. september 2008 - 18:59 #3
Med A saa skal du bare lave et helt almindeligt Java objekt og saa vaelge et library
der kan konvertere det til XML.
Avatar billede touel Nybegynder
18. september 2008 - 19:14 #4
med library mener du vel jeg skal hente org.xml.sax og så skrive mine data ud ?

Men jeg ved ikke om man selv skal opbygge xml fil fra java klassen eller det skal gøres seperat ?
Avatar billede arne_v Ekspert
18. september 2008 - 19:36 #5
Skal jeg ikke proeve at lave et lille eksempel ?
Avatar billede arne_v Ekspert
18. september 2008 - 20:13 #6
Foerst en data klasse:

package september;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Foobar implements Serializable {
    private int iv;
    private double xv;
    private String sv;
    public Foobar() {
        this(0, 0.0, "");
    }
    public Foobar(int iv, double xv, String sv) {
        super();
        this.iv = iv;
        this.xv = xv;
        this.sv = sv;
    }
    public int getIv() {
        return iv;
    }
    public void setIv(int iv) {
        this.iv = iv;
    }
    public double getXv() {
        return xv;
    }
    public void setXv(double xv) {
        this.xv = xv;
    }
    public String getSv() {
        return sv;
    }
    public void setSv(String sv) {
        this.sv = sv;
    }
}
Avatar billede arne_v Ekspert
18. september 2008 - 20:13 #7
Kode:


package september;

import java.beans.XMLEncoder;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Object2Xml {
    public static void main(String[] args) throws Exception {
        Foobar o = new Foobar(123, 123.456, "ABC");
        // oldfashioned
        XMLEncoder xe = new XMLEncoder(System.out);
        xe.writeObject(o);
        xe.flush();
        // modern
        JAXBContext jxbctx = JAXBContext.newInstance(Foobar.class);
        Marshaller m = jxbctx.createMarshaller();
        m.marshal(o, System.out);
       
    }
}
Avatar billede arne_v Ekspert
18. september 2008 - 20:14 #8
Output:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_05" class="java.beans.XMLDecoder">
<object class="september.Foobar">
  <void property="iv">
  <int>123</int>
  </void>
  <void property="sv">
  <string>ABC</string>
  </void>
  <void property="xv">
  <double>123.456</double>
  </void>
</object>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><foobar><iv>123</iv><sv>ABC</sv><xv>123.456</xv></foobar>
Avatar billede arne_v Ekspert
18. september 2008 - 20:14 #9
Jeg kan absolut bedst lide den nye form.

Den nye form kraver enten Java 1.6 eller et ekstra lib.
Avatar billede touel Nybegynder
22. september 2008 - 13:55 #10
Hvordan modtager man parametre for array ?

ex:

void getText (String navn,String [] cd)

og så i en anden klasse, kaldes denne metode:

obj.getText("Kim",???? )
Avatar billede touel Nybegynder
22. september 2008 - 18:16 #11
har løst med array
Avatar billede touel Nybegynder
22. september 2008 - 19:12 #12
I følgende metode vil jeg gerne tilføje et element til array for hvergang jeg trykker enter.

public void actionPerformed(ActionEvent e){
       
        gemstr = new String[30];
       
        for(int i=0; i < 30; i++)
        {
            gemstr[i]=e.getActionCommand();
            System.out.println(gemstr[i] + "\t ved pos " + i);
            ((JTextField)e.getSource()).transferFocus();
           
        }
           
    }

men når jeg trykker enter så tager den det jeg har indtastet og skriver det ud i alle
30 pladser.
Avatar billede arne_v Ekspert
22. september 2008 - 22:51 #13
Jeg gaetter paa noget a la:

private ArrayList<String> gemstr = new ArrayList<String>();
public void actionPerformed(ActionEvent e){
    gemstr.add(e.getActionCommand());
    ((JTextField)e.getSource()).transferFocus();
}
Avatar billede touel Nybegynder
23. september 2008 - 00:15 #14
Hvordan får man arraylist til at tælle en op ?

Med din gemstr.add(...) gemmer den alt det jeg skriver ind på  første plads i arraylist, og tæller ikke selv op
Avatar billede touel Nybegynder
23. september 2008 - 00:20 #15
skal lige tilføje at jeg har fjerne <String> fra dit eks, da jeg fik fejl på det... jeg kører åbenbart med ældre version,som ikke godtager generics
Avatar billede arne_v Ekspert
23. september 2008 - 09:41 #16
Det burde den ikke.

Men jeg faar en tanke.

Indeholder e.getActionCommand() flere linier ?

Hvis ja saa skal du nok bruge noget a la:

String[] gemstr = e.getActionCommand().split("\r\n");
Avatar billede touel Nybegynder
23. september 2008 - 17:47 #17
Altså funk har set ud som i 19:12:14, så svaret må vel være nej. Jeg kom til at tænke på en ting i løbet af dagen. Grunden til at den ikke adder op i mit array, kunne være at hvergang jeg kalder actionPerformed(), så oprettes der nyt array, og derfor tælles den sæføli ikk op ????
Avatar billede touel Nybegynder
23. september 2008 - 18:13 #18
problem solved :0)... det var din array metode som fik det til at køre... strange
Avatar billede arne_v Ekspert
23. september 2008 - 22:13 #19
saa vil jeg smide et svar
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