Einfache XML-Deserialisierung
Ich versuche aus der Einfache XML-serializer. Ich bin mehr daran interessiert, die Deserialisierung von XML->Java. Hier ist mein code als unit-test:
import java.io.StringReader;
import java.io.StringWriter;
import junit.framework.TestCase;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
public class SimpleTest extends TestCase {
public void testWriting() throws Exception {
StringWriter writer = new StringWriter();
Address address = new Address("1234 Main Street", "San Francisco", "CA");
Serializer serializer = new Persister();
serializer.write(address, writer);
System.out.println("Wrote: " + writer.getBuffer());
}
public void testReading() throws Exception {
String input = "<address street='1234 Main Street' city='San Francisco' state='CA'/>";
Serializer serializer = new Persister();
System.out.println("Read back: " + serializer.read(Address.class, new StringReader(input)));
}
}
@Root
class Address {
@Attribute(name="street")
private final String street;
@Attribute(name="city")
private final String city;
@Attribute(name="state")
private final String state;
public Address(@Attribute(name="street") String street, @Attribute(name="city") String city, @Attribute(name="state") String state) {
super();
this.street = street;
this.city = city;
this.state = state;
}
@Override
public String toString() {
return "Address [city=" + city + ", state=" + state + ", street=" + street + "]";
}
}
Dies funktioniert, aber die wiederholte @Attribute
Anmerkungen (auf dem Feld und an den Konstruktor-argument) in der Address-Klasse hässlich. Gibt es eine Möglichkeit zu:
- haben einfach herausfinden das Attribut name aus dem Feldnamen?
- haben, einfach ignorieren, Serialisierung, so dass ich bekommen kann Weg mit Anmerkungen entweder auf den Feldern oder bei der Konstruktor-argument?
Wenn Sie für eine einfache, XML->Java-Deserialisierung und sind nicht gebunden an ein bestimmtes Paket, hier ist eine alternative: sourceforge.net/projects/practicalxml (beachten Sie, dass ich nicht dies als eine Antwort, denn Sie scheinen sehr downvote glücklich, das ist nicht ein guter Weg, um behandeln Sie die Menschen, die versuchen Euch zu helfen)
Danke, ich bin nicht gebunden an eine bestimmte Paket - ich will check out practicalxml. Bitte nehmen Sie nicht die downvotes auch persönlich - die Anregungen, die angeboten wurden, bei weitem nicht die Lösung meines Problems und waren laut, IMO.
Am zweiten Gedanken, ich war zu downvote glücklich. Entschuldigung an alle.
Eine weitere sehr gute Bibliothek XStream. Ich habe in der Lage zu tun alles, was ich brauchte - bisher. 🙂
Danke, ich bin nicht gebunden an eine bestimmte Paket - ich will check out practicalxml. Bitte nehmen Sie nicht die downvotes auch persönlich - die Anregungen, die angeboten wurden, bei weitem nicht die Lösung meines Problems und waren laut, IMO.
Am zweiten Gedanken, ich war zu downvote glücklich. Entschuldigung an alle.
Eine weitere sehr gute Bibliothek XStream. Ich habe in der Lage zu tun alles, was ich brauchte - bisher. 🙂
InformationsquelleAutor Binil Thomas | 2009-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie brauchen, alle, die Wiederholung und die zusätzlichen Anmerkungen " - Attribut. Wenn der name ist der gleiche wie das Objekt, Attribut, wird es standardmäßig verwendet werden.
so kann man einfach erklären:
Meine schlecht, ich wollte nicht zahlen mehr Aufmerksamkeit, die Sie möchten, haben eine unveränderliche Adresse. Basierend auf der aktuellen einfach, Sie brauchen, um die Duplizierung von @Attribut-tag, da es früher die annotation am Attribut serialisiert wird und der Konstruktor für die Deserialisierung. Sie können Weg ohne Namen-tag auf das Attribut, nicht aber auf Konstruktor-Parameter, da der compiler nur den überblick behalten, indem Sie die Reihenfolge statt mit Namen.
Hängt davon ab, welche Ziel wollen Sie erreichen. Natürlich kann man die Klasse verändert, und die Durchsetzung der Unveränderlichkeit manuell in den setter. Aber dann wieder, der code wird hässlich. Zwischen den beiden, ich könnte gehen Sie einfach mit Doppel-Anmerkungen-option.
Vielen Dank für die Klarstellung! Ich hatte erwartet, dass der Konstruktor-argument annotation müssten das name-Attribut (weil der compiler fällt das argument name), aber das entfernen des name-Attribut aus dem Feld führt zu einer "Anmerkungen entsprechen nicht' - Fehler.
InformationsquelleAutor DJ.
Java serialisieren alle Ihre Schüler standardmäßig, wenn Sie implementieren
Serializable
durch und befolgen Sie die JavaBean-syntax.Java-Serialisierung funktioniert in beide Richtungen. Wenn Sie serialisieren Sie Ihre Java-Objekten zu XML-Daten mit Java-Serialisierung, können Sie auch deserialisiert werden Ihnen von XML in Java-Objekte. Der Prozess ist transparent und flexibel. In einer Anwendung verwende ich Java-XML-Serialisierung/Deserialisierung zu schreiben objektbäume auf die Festplatte und lese Sie wieder, die dem Benutzer auf Anfrage - wir sprechen von Hunderten von tausenden von Dateien - und es funktioniert gut, meiner Meinung nach. Check out java.sys-con.com/node/37550 für Beispiele - die wichtigsten Klassen sind
XMLEncoder
undXMLDecoder
.InformationsquelleAutor spork
Hatte ich ähnliche Bedenken, aber mit ziemlich komplizierten Objekten Strukturen.
Ich löste es durch die Verwendung von JAXB-Bibliothek für Marshalling und de-Marshalling, das ist eine ziemlich häufige.
Sie können auch betrachten völlig die Trennung der Marshalling-Logik aus Ihrem java-Klasse mit Aspekte - Sie können Sie behandeln alle Anmerkungen in einem gesonderten Aspekt, was machen Sie Ihre java-Klasse komplett sauber von Marshalling Anmerkungen.
InformationsquelleAutor DiSol