Avatar billede mercutio Nybegynder
23. november 2004 - 17:19 Der er 6 kommentarer og
1 løsning

Har brug for et eksempel på at læse xml fil til et java object

Jeg er ved at sætte mig ind i xalan og jeg vil prøve at læse et xml document og lægge det ind i en javabean.
Så vidt jeg forstår xalan så kan man bruge en xsl til at mappe dataene ind i mit java object. Er der nogle der kan give mig et meget simpelt eksempel på hvordan det gøres. Jeg syntes ikke jeg kan finde det på xalans egen side.
Avatar billede arne_v Ekspert
23. november 2004 - 20:46 #1
Er XML formatet valgfrit eller givet ?
Avatar billede mercutio Nybegynder
23. november 2004 - 21:33 #2
Jeg vil bare gerne have et meget simpelt eksempel.
Du må gerne bruge denne. Men ellers en bare en simpel en du selv har.
<Order Name="TINAMIFORMES">
        <Family Name="TINAMIDAE">
            <Species Scientific_Name="Tinamus major">  Great Tinamou.</Species>
            <Species Scientific_Name="Nothocercus">Highland Tinamou.</Species>
            <Species Scientific_Name="Crypturellus soui">Little Tinamou.</Species>
            <Species Scientific_Name="Crypturellus cinnamomeus">Thicket Tinamou.</Species>
            <Species Scientific_Name="Crypturellus boucardi">Slaty-breasted Tinamou.</Species>
            <Species Scientific_Name="Crypturellus kerriae">Choco Tinamou.</Species>
        </Family>
    </Order>
<Order Name="GAVIIFORMES">
        <Family Name="GAVIIDAE">
            <Species Scientific_Name="Gavia stellata">Red-throated Loon.</Species>
            <Species Scientific_Name="Gavia arctica">Arctic Loon.</Species>
            <Species Scientific_Name="Gavia pacifica">Pacific Loon.</Species>
            <Species Scientific_Name="Gavia immer">Common Loon.</Species>
            <Species Scientific_Name="Gavia adamsii">Yellow-billed Loon.</Species>
        </Family>
    </Order>
Avatar billede arne_v Ekspert
23. november 2004 - 21:44 #3
Hvis du selv helt frit kan bestemme formatet, så er java.beans.XMLEncoder og
java.beans.XMLDecode klasserne pærenemme at bruge.
Avatar billede arne_v Ekspert
23. november 2004 - 21:45 #4
Hvis formatet er bestemt, så kan man ihvertfald bruge både SAX og DOM parser
til at læse en XML fil ind til en ArrayList af beans.

Jeg har aldrig brugt Xalan til den slags.
Avatar billede mercutio Nybegynder
24. november 2004 - 08:04 #5
Hmmm nu har jeg efterhånden rodet temlig længe. Jeg tror efterhånden slet ikke man bruger xalan til den slags...
Min opgave er jeg skal læse en xml (faktura) ind jeg skal så redigere i den måske endda tilføje et par linier. Det i sig selv kan jeg godt finde ud af hvis jeg bare skal lave det råt i koden. Men jeg vil gerne have en form for mapning foran så jeg bare kan gå ind og pille lidt ved mapnings filen hvis der er nogle felter der skal læses andre steder fra osv... Nogle forslag til hvordan man kan lave det?
Avatar billede arne_v Ekspert
27. november 2004 - 22:21 #6
En hel anderledes low tech solution:

orders.xml
----------

<Orders>
    <Order Name="TINAMIFORMES">
        <Family Name="TINAMIDAE">
            <Species Scientific_Name="Tinamus major">  Great Tinamou.</Species>
            <Species Scientific_Name="Nothocercus">Highland Tinamou.</Species>
            <Species Scientific_Name="Crypturellus soui">Little Tinamou.</Species>
            <Species Scientific_Name="Crypturellus cinnamomeus">Thicket Tinamou.</Species>
            <Species Scientific_Name="Crypturellus boucardi">Slaty-breasted Tinamou.</Species>
            <Species Scientific_Name="Crypturellus kerriae">Choco Tinamou.</Species>
        </Family>
    </Order>
    <Order Name="GAVIIFORMES">
        <Family Name="GAVIIDAE">
            <Species Scientific_Name="Gavia stellata">Red-throated Loon.</Species>
            <Species Scientific_Name="Gavia arctica">Arctic Loon.</Species>
            <Species Scientific_Name="Gavia pacifica">Pacific Loon.</Species>
            <Species Scientific_Name="Gavia immer">Common Loon.</Species>
            <Species Scientific_Name="Gavia adamsii">Yellow-billed Loon.</Species>
        </Family>
    </Order>
</Orders>

orders.properties
-----------------

element.name = Species
normalname.type = text
normalname.name =
latinname.type = attribute
latinname.name = Scientific_Name

OrderParse.java
---------------

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class OrderParse {
    public static void main(String[] args) {
        try {
            Properties props = new Properties();
            props.load(new FileInputStream("C:\\orders.properties"));
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new File("C:\\orders.xml"));
            ArrayList orders = new ArrayList();
            NodeList elements = doc.getElementsByTagName(props.getProperty("element.name"));
            for (int i = 0; i < elements.getLength(); i++) {
                Node element = (Element) elements.item(i);
                Order o = new Order();
                if(props.getProperty("normalname.type").equals("text")) {
                    o.setNormalName(element.getFirstChild().getNodeValue());
                } else {
                    o.setNormalName(element.getAttributes().getNamedItem(props.getProperty("normalname.name")).getNodeValue());
                }
                if(props.getProperty("latinname.type").equals("text")) {
                    o.setLatinName(element.getFirstChild().getNodeValue());
                } else {
                    o.setLatinName(element.getAttributes().getNamedItem(props.getProperty("latinname.name")).getNodeValue());
                }
                orders.add(o);
            }
            System.out.println(orders);
        } catch (FactoryConfigurationError e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return;
    }
}

class Order {
    private String normalName;
    private String latinName;
    public String getNormalName() {
        return normalName;
    }
    public void setNormalName(String normalName) {
        this.normalName = normalName;
    }
    public String getLatinName() {
        return latinName;
    }
    public void setLatinName(String latinName) {
        this.latinName = latinName;
    }
    public String toString() {
        return (normalName + "(" + latinName + ")");
    }
}
Avatar billede arne_v Ekspert
12. december 2004 - 19:51 #7
OK ?
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