Αποθήκευση αλλαγών xml αρχείου

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

Αποθήκευση αλλαγών xml αρχείου

Postby rapadder » Sun Oct 26, 2008 10:59 am

Έχω ένα αρχείο xml του οποίου τα πεδία επεξεργάζομαι μέσα από μια φόρμα. Αυτό που θέλω είναι:

1. Όταν αλλάξω μια τιμή ενός πεδίου του xml αρχείου (μέσα από την φόρμα), αυτή να αποθηκευτεί στην δομή (αντικείμενο της Java) που αντιστοιχεί στο xml αρχείο που επεξεργάζομαι.

Document doc = db.parse(xmlfile);

Διάβασα ότι:

Java XML support classes don't do save in common meaning of word. Java Classes support methods to transform Document from one state to other state. One state can be Document instance in memory, the second state after transformation XML file.

Αυτό σημαίνει ότι θα πρέπει να αποθηκεύω κάπου αντικείμενα Document, δηλαδή τις διάφορες καταστάσεις του doc. Επίσης θα πρέπει να χρησιμοποιώ μεθόδους/ κλάσεις που να επιδρούν πάνω στο doc (π.χ. org.w3c.dom.Node). Διορθώστε με αν κάνω λάθος.

Παρατήρηση:

Η κλάση TransformerFactory απ' ότι κατάλαβα χρησιμοποιείται κυρίως για να μετατρέψεις ένα αρχείο xml σε μια άλλη μορφή (text/ xml/ html) και όχι για την αυτή καθ' αυτή επεξεργασία του DOM tree:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();

DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(fos);
// transform source into result will do save
try {
transformer.transform(source, result);
}
catch (TransformerException e) {
System.out.println("Error transform: " + e.getMessage());
}
... αντάρτες της πορδής με τα λεφτά του μπαμπά...
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: Αποθήκευση αλλαγών xml αρχείου

Postby tsilochr » Sun Oct 26, 2008 9:26 pm

κάνεις τη ζωή σου δύσκολη σταμάτη.

1. επιλέγεις πως θα διαβάζεις/γράφεις στο xml document - SAX ή κάποιο άλλο framework (εγώ χρησιμοποιούσα JAXB)
2. σχεδιάζεις το αντικείμενο που αναπαριστά αυτό που βάζεις στο xml, τυπικά εδώ θα φτιάξεις ένα απλό java bean
3. αποφασίζεις το pattern που θα χρησιμοποιήσεις για να σώζεις κάθε αλλάγη στο java bean του βήματος 2 - κάθε κλήση σε setter θα σώζει το περιεχόμενο του java bean στο xml από όπου προήλθε ή κάνεις τις αλλαγές σου και στο τέλος έχεις μια συνάρτηση που καλείς (πχ save() )για να γράψεις στο xml doc.
4. στη φόρμα σου δεν θα χρησιμοποιείς το xml doc αλλά το java object το οποίο θα πειράζεις και μετά θα το κάνεις save.

Κανονικά θα πρέπει να έχεις αρκετά γενικό το κώδικα σου ώστε αν αλλάξει η απαίτηση και από xml σώζεις σε άλλου τύπου storage, να κάνεις ελάχιστες αλλαγές.
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

Re: Αποθήκευση αλλαγών xml αρχείου

Postby rapadder » Mon Oct 27, 2008 12:34 am

Γενικά έχω προσπαθήσει να ακολουθήσω αυτά τα βήματα. Απλά στην περίπτωση μου το xml αρχείο δεν περιέχει την περιγραφή ενός αντικειμένου της Java (με τις παραμέτρους του). Το δικό μου xml αρχείο έχει τον ρόλο του αρχείου εισόδου, δηλαδή περιέχει τις τιμές διαφόρων παραμέτρων. Αυτές οι παράμετροι μπορεί να είναι αντικείμενα της Java αλλά είναι κυρίως μεταβλητές με τις τιμές τους.
Αυτό που κάνω τελικά είναι να διαβάζω το xml αρχείο, να δημιουργώ ένα Document αντικείμενο το οποίο και πειράζω για να το κάνω save μετά, όπως γράφεις. Η επεξεργασία του DOM tree γίνεται μέσα από ένα java object που έχω ορίσει κατάλληλα. Τέλος χρησιμοποιώντας την κλάση TransformerFactory μπορώ να σώσω το DOM tree από xml σε άλλου τύπου storage, περνώντας την αντίστοιχη παράμετρο στην συνάρτηση transform(source, result). Οπότε νομίζω ότι βρήκα λύση στα παραπάνω.
... αντάρτες της πορδής με τα λεφτά του μπαμπά...
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: Αποθήκευση αλλαγών xml αρχείου

Postby tsilochr » Mon Oct 27, 2008 11:46 am

rapadder wrote:Γενικά έχω προσπαθήσει να ακολουθήσω αυτά τα βήματα. Απλά στην περίπτωση μου το xml αρχείο δεν περιέχει την περιγραφή ενός αντικειμένου της Java (με τις παραμέτρους του). Το δικό μου xml αρχείο έχει τον ρόλο του αρχείου εισόδου, δηλαδή περιέχει τις τιμές διαφόρων παραμέτρων. Αυτές οι παράμετροι μπορεί να είναι αντικείμενα της Java αλλά είναι κυρίως μεταβλητές με τις τιμές τους.


Το java object δεν είναι ανάγκη να αναπαριστά κάποια οντότητα, μπορεί να είναι ένα Propertiesή Map
User avatar
rapadder
Gbyte level
Gbyte level
Posts: 1896
Joined: Thu Jun 17, 2004 7:12 pm
Academic status: Alumnus/a
Gender:
Contact:

Re: Αποθήκευση αλλαγών xml αρχείου

Postby rapadder » Mon Oct 27, 2008 12:04 pm

Ευχαριστώ. Θα το κοιτάξω.
... αντάρτες της πορδής με τα λεφτά του μπαμπά...

Return to “Προγραμματισμός”

Who is online

Users browsing this forum: No registered users and 1 guest