Meine XSD
Struktur ist wie folgt: -
Wenn ich den Null-Wert in diesem Feld einstelle, erlaube ich es, aber zu der Zeit von XML
Generation von JAXB
Marshalling erstelle ich die Ausgabe mit
Im Ergebnis möchte ich die Ausgabe als <XYZDate/>
ausgeben, d. h. das Schema und andere Attribute nicht wollen.
Ich entferne das mit Hilfe von XMLStreamWriter
, aber es produziert die komplette XML
in Einzellinie. Ich brauche wohl formatiertes XML
.
Wenn ich IndentingXMLStreamWriter
verwenden muss, kann meine Java
Version es nicht unterstützen und ich habe keine Kontrolle über Java Container, um sie zu ändern oder zu ändern.
Bitte schlagen Sie eine Lösung vor, um XML
gut formatiert zu bilden.
HINWEIS # 1: Ich bin der EclipseLink JAXB (MOXy) Leitung und Mitglied der JAXB (JSR-222) Expertengruppe.
HINWEIS # 2: Die Ausgabe, die Sie sehen, stimmt mit dem überein, was Sie mit JAXB zugeordnet haben. Für weitere Informationen siehe:
REPRÄSENTIEREN VON NULL ALS EIN LEERES ELEMENT
Wenn Sie null als leeres Element darstellen möchten, gibt es ein paar Optionen.
Option # 1 - Verwenden der Standard-JAXB-APIs
DatumAdapter
Sie können XmlAdapter
verwenden, um die Art und Weise zu ändern, in der eine Instanz von Date
in XML gemarshallt wird. Wir werden das Datum in eine Instanz einer Klasse umwandeln, der eine Eigenschaft mit @XmlValue
zugeordnet ist (siehe Ссылка ). Der JAXB RI ruft den Mechanismus XmlAdapter
nicht für Nullwerte auf, daher müssen Sie ein JAXB-Impl verwenden, das beispielsweise MOXy verwendet.
Stamm
% ce_de% wird mit der Annotation XmlAdapter
referenziert.
Option # 2 - Verwenden der MOXy @ XmlNullPolicy-Erweiterung
MOXy bietet eine Erweiterung @XmlJavaTypeAdapter
, die Ihnen eine gewisse Flexibilität bei der Darstellung von null bietet.
Andere Dateien
Die folgenden Dateien können mit beiden Optionen verwendet werden, um das Beispiel zu vervollständigen.
jaxb.properties
Um MOXy als Ihren JAXB-Provider anzugeben, müssen Sie eine Datei mit dem Namen @XmlNullPolicy
in dasselbe Paket wie Ihr Domänenmodell mit dem folgenden Eintrag einfügen (siehe:
Blaise Doughan
31.07.2012 20:42
Sie sollten die Nillable- und minOccurs XSD-Elementattribute lesen, da der Unterschied zwischen nil
und ein empty
-Element ist signifikant in XML
. h. xsi:nil=true
ist ähnlich wie SQL NULL
, aber ein leeres Element repräsentiert die Geschenke eines leeren Elements. :)
Ich weiß, es ist verwirrend.
Um Ihr spezifisches Problem zu beheben, wenn Sie JAXB
serialization verwenden, um das zu generieren, empfehle ich das Lesen von So instanziieren Sie ein leeres Element mit JAXB . Die Frage selbst zeigt Ihnen, wie Sie ein leeres Element generieren.
Ich habe die Antwort von gbvb gewählt.
Ich verstehe nicht, warum willst du das aber.
Das leere Element mit xmlns:xsi
und xsi:nil
ist der richtige Weg.
Ohne diese Attribute wird reasonable
Parser Ihnen die leere Zeichenfolge even if the element is self-closed
geben.
Angenommen, Sie möchten den Kunden einen ganzzahligen Wert geben, der die höchste Punktzahl in vielen Spielergebnissen bedeutet.
Wenn Sie berechnen können, können Sie den richtigen Wert angeben.
Wenn es noch keinen Spieler gibt, der tatsächlich gewertet hat, sollten Sie den richtigen Wert als NULL
oder nil
eingeben, was bedeutet, dass kein Datensatz angesammelt wurde.
Man kann sagen, die höchste Punktzahl ist 98 von 128 Versuchen.
Und
%Vor%Man kann sagen, dass es keine Höchstpunktzahl gibt, weil keine Punkte aufgezeichnet wurden.
Aber
%Vor%Bedeutet nichts anderes als ein einfaches selbst geschlossenes leeres Element.