[java] xml lezen/schrijven

Pagina: 1
Acties:
  • 131 views sinds 30-01-2008
  • Reageer

  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 23-05 22:13

Tjeerd

Be Original, Be Yourself.

Topicstarter
Mijn bedoeling is om in Java een vrij eenvoudig iets te schrijven, maar nu ik de halve middag al heb zitten zoeken naar een goeie oplossing, kom ik er toch nog steeds niet helemaal uit.

Ik heb een applicatie welke namen + kleuren moet wegschrijven en kunnen lezen in/uit een en hetzelfde XML-bestand. JDOM, SAX, Xerces, enzovoort alles heb ik al voorbij zien komen, maar voor hetgeen wat ik wil ben ik er nog niet zeker van wat ik nou het beste kan gebruiken. Op GoT zijn er ook niet zoheel veel topics te vinden met dezelfde soort vraagstelling en/of specifiekere uitleg.

Ik zou eigenlijk XML-bestand willen aanmaken door een bepaalde -- geen idee dus welke nou het beste is -- methode/klassen aan te roepen waarmee je een hele structuur in het geheugen kan maken (DOM?) en deze vervolgens netjes kunt wegschrijven naar een XML-bestand. Verder wil ik het omgekeerde ook kunnen doen, dus XML-bestand inlezen en dat je dan met (standaard) methodes ook weer alle data kunt uitlezen. Het liefst zou ik de standaard Java API willen gebruiken en geen extra losse libraries willen installeren.

Kan iemand me een beetje op weg helpen in de XML-wereld van Java?

(dit o.a. en deze / deze maakte me het al enigszins duidelijk)

[ Voor 10% gewijzigd door Tjeerd op 14-07-2004 16:35 ]

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 16-05 23:29
Ik ben er zelf toevallig afgelopen donderdag nog mee bezig geweest :) Je moet dus op zoek naar een DocumentBuilder. Daarmee maak je dan een Document-object, waarnaar je kunt schrijven met de gebruikelijke DOM-calls als createElement, appenChild etc. Kijk dus even hier: http://java.sun.com/j2se/...sers/DocumentBuilder.html :)

(dit is dus alleen voor het schrijven)

[ Voor 7% gewijzigd door MisterData op 14-07-2004 16:36 ]


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 22-05 23:32

alienfruit

the alien you never expected

Zelf gebruik ik XML Dom omdat dit het makkelijkst was, ik heb wel het boek XML Document with Java 2 van mij part mag je de code voorbeelden wel hebben als je wil :)

  • pling
  • Registratie: Maart 2001
  • Laatst online: 30-03 21:07

pling

Lekker Kepjoeteren

Ik zou het doen met DOM:

Om zoiets te maken:
code:
1
<bla><iets flut="hallo"><tada>text</tada></iets></bla>



Doe je zoiets:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.io.IOException;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.apache.crimson.tree.XmlDocument;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

/**
 * This is a Generated Xml Class
 */
public class GeneratedXmlClass
{

    public static void main(String[] args)
        throws IOException, ParserConfigurationException, TransformerException
    {

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        Document xmlDocument = db.newDocument();
        Element xmlElement;
        Text xmlText;

        Element xmlblaElement;
        xmlblaElement = xmlDocument.createElement("bla");
        xmlDocument.appendChild(xmlblaElement);

        Element xmlietsElement;
        xmlietsElement = xmlDocument.createElement("iets");
        xmlblaElement.appendChild(xmlietsElement);

        xmlietsElement.setAttribute("flut","hallo");
        xmlElement = xmlDocument.createElement("tada");
        xmlText = xmlDocument.createTextNode("text");
        xmlElement.appendChild(xmlText);
        xmlText = null;
        xmlietsElement.appendChild(xmlElement);
        xmlElement = null;

        xmlietsElement = null;
        xmlblaElement = null;
        xmlDocument = null;

        //Write string
        //StringWriter xmlsw = new StringWriter();
        //((XmlDocument) xmlDocument).write(xmlsw, "UTF-8");
        //String xmlbuf = xmlsw.toString();
        //System.out.println(xmlbuf);

    }
}


Wellicht kom je daar weer iets verder mee.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je kunt het beste werken met een DOM implementatie ipv een SAX implementatie. Het voordeel aan een DOM is dat je echt een boomstructuur hebt om mee te werken, en met SAX een hele stream van nodes. JDOM heb ik zelf vrij veel gebruikt en die kan zelf weer aangestuurd worden via een SAX parser (bv Xerces).

[ Voor 7% gewijzigd door Alarmnummer op 14-07-2004 16:37 ]


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 22-05 13:21
Let op dat als je DOM gebruikt met zeer grote XML bestanden het geheugen vreet.

  • machiel
  • Registratie: Januari 2000
  • Laatst online: 11-02 18:49
Wellicht is JAXB een goede oplossing, daarmee kan je de XML structuur in 1 keer vertalen naar een Java classenstructuur en die vervolgens lezen, bewerken en wegschrijven.

  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 23-05 22:13

Tjeerd

Be Original, Be Yourself.

Topicstarter
Ok, het eerste gedeelte werkt prima. Ik kan ook een XML-genereren, maar nu zit ik weer met een ander probleem. De XML wordt gegenereerd binnen mijn Java-applet, maar ik wil de gegenereerde XML opslaan aan de server-kant. Agz applets geen bestands lees- en schrijfrechten heeft wordt het al gauw erg beperkend.

Ik heb nu NetComponents gebruikt om te kunnen FTP'en binnen Java, maar het is niet erg eenvoudig om mijn XML-uitvoer door te sluizen naar de FTP-class (lees: nog niet gelukt). FTP'en op zich werkt wel prima, alleen ik zie nog niet hoe ik mijn XML-stream als stream aan de FTP-class kan aanbieden :s -- zodat deze het als bestand kan opslaan op de server.

Java:
1
2
3
4
5
6
7
8
9
10
11
String xmlbuf; // deze bevat een string met de xml-uitvoer
String remote = "uitvoer.xml";
String local = "localfile.xml";

InputStream input;                          
// lokaal inlezen en dat transferren naar FTP-doel gaat goed, maar
// dat wil ik niet, ik wil de String xmlbuf (met XML-uitvoer) naar FTP 
// transferren
//input = new FileInputStream(local);                                   
                            
ftp.storeFile(remote, input);           
public boolean storeFile(java.lang.String remote,
java.io.InputStream local)
De methode 'storeFile' van de NetComponents package verwacht ook een InputStream als 2e argument, maar hoe zorg ik er dus voor dat ik mijn String
xmlbuf als argument kan geven?

Iemand ervaring en/of ideeen om het wel te kunnen oplossen en/of een betere manier/methode om mijn XML-uitvoer te te kunnen slaan (formulieren/losse scripts icm mijn Applet :?)

[ Voor 36% gewijzigd door Tjeerd op 21-07-2004 14:04 ]

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Met zoiets zou het kunnen:
code:
1
InputStream input = new ByteArrayStream(xmlBuf.getBytes("UTF-8"));

With the light in our eyes, it's hard to see.


  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 23-05 22:13

Tjeerd

Be Original, Be Yourself.

Topicstarter
Dank u, ik had ook zoiets gevonden al ondertussen maar nu is het zeker :)

Dit moment lijkt de FTP-class niet direct te werken in de applet, ga dat nog even uitzoeken iig.

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.

Pagina: 1