XML, was ist das: null oder empty-element?
Betreffend zu meiner anderen Frage: XML Deserialisieren null Elemente?
Habe ich Elemente wie diese von einem Drittanbieter-server für die API-Test:
<Taxable />
<DefaultPurchasePrice />
Ich erkannte, dass jetzt ich bin verwirrend mich, ob Elemente wie vertreten, dass null-Objekt oder leer.
Reden über Objekte, Sie sind die gleichen, null-Objekt ist normalerweise leer Objekt-Referenz richtig? Aber versuchen abzubilden, ein XML-element auf ein Datenfeld/Wert, Sie könnte auch anders sein, ich.e null-Zeichenfolge eine leere Zeichenfolge, aber für Dezimal - /Preis-oder Boolean-Wert, Sie sind undefiniert, welche gleich leer, aber nicht null sein, es sei denn, Sie sind definiert als Werte zulässt.
Wieder, das problem mit meinem XmlSerializer ist das nicht behandeln, übertragen ein leeres element wie. konnte ich leicht beheben, dass in meinem code. Oder sollte ich die Leute bitten, bieten die XML-haben eine definierte XML? Da scheint ein leeres XML-element ist nicht definiert: es ist hier, aber könnte entweder null oder leer ist spielt keine Rolle für XML-element selbst? Aber für dieses element wird mein code müssen herausfinden, wie zu umgehen, es sei denn, ich setze alle meine C# Klasse Datenfeld als string-Typ. Ansonsten, wenn mein code-Versuch direkt anzeigen eines leeren oder ungültigen XML-element zu einem bestimmten Datenfeld, wird es scheitern, das ist sicher.
Ich Stelle diese Frage, weil ich festgestellt XML-haben viele dieser Elemente
und für diejenigen, die besonderen Elemente, meine .NET XMLserialization code müssen zugeordnet diese Feld als string und wenn der string nicht leer ist, ich Fall in Korrespondent Datentyp, sonst setze ich Sie auf null. Und ich am Ende entfernen Sie die leere element, bevor ich meine Deserialisierung, da ist es viel einfacher. Aber ich Wanderns: "Was mache ich eigentlich in meinem code? Habe ich nur zum entfernen von null-Elementen oder leere Elemente? Denn Sie sind eindeutig anders! Aber die Menschen schreiben, die XML-denken, Sie sind die gleichen, weil XML selbst nicht Konzept der 'null', und einige Leute argumentieren, dass es meine Verantwortung ist, zu entscheiden, ob er null ist oder leer. Aber XML ermöglichen Sie dar 'null' - Elemente in klarer Weise
Edit:
Im Beispiel I dargestellt, werden diese beiden Elemente klar sollte null sein, eher als leere Elemente. XML-haben nicht wirklich ein Konzept der null, aber diese Elemente können entweder weggelassen werden (wenn Sie null sind, nicht setzen Sie Sie in XML) oder mit besseren Darstellung wie bereits erwähnt werden @svick. Oder in anderen Fällen, leere Elemente sollten verwendet werden, wenn Sie Sinn machen. Aber nicht für Dezimal-oder Boolean.
- Ein leeres-element-tag gültig ist XML. Wie Sie interpretieren, null, leer oder was auch immer, es ist völlig bis zu Ihnen.
- das sollte eine Antwort sein... ich würde es upvote
- so ist es ein leeres element dann?
- fpmurphy war ganz klar. Sie haben zu entscheiden, es gibt keine standard-interpretation.
- Garnison, so ist es mehrdeutig?
- Es ist nicht mehrdeutig. Es ist nicht definiert in der XML selbst. Was für eine leere tag heißt, ist völlig bis zu Ihrer interpretation.
- Wenn es nicht eindeutig ist, ich akzeptiere, ich habe meine eigene Entscheidung. Aber ich spreche von XML-Versorgung von third-party-Server für die API-Test, scheint es eine schlechte Praxis zu liefern mehrdeutig XML-Elemente und das andere Ende müssen Lauffläche jedes Feld ist von Fall zu Fall eher als das Angebot XML-zeigen deutlich, entweder es ist null, oder null-Werte zulässt oder leer, das sollte eine bessere Lösung sein.
- Die XML-Spezifikation nicht definieren die Semantik der Daten. Das ist bis auf die Spezifikation der jeweiligen Wortschatz, den Sie verwenden. Wenn diese Spezifikation nicht sagen, was dieses Konstrukt bedeutet, dann ja, es ist mehrdeutig. Wenn Sie nicht über eine solche Spezifikation, dann ist ALLES in der XML, ist unklar.
- möglich, Duplikat der Was ist die richtige Methode zur Darstellung von null-XML-Elemente?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es leer. Es ist semantisch das gleiche wie:
Nur "null" - Konzept, das es in XML selbst ist ein element fehlt. Sie können nicht geben Sie ein element und sagen, dass es null ist, wird die Verwendung von XML-Semantik. Sie müssen irgendeine Art von schema (ein explizites schema, wie DTD -, XSD-oder Schematron, oder eine implizite und/oder logischen schema), dies zu tun.
Diese nicht darauf beschränken, eine Anwendung, interpretiert die XML -, obwohl, oder offizielle XML-Technologien. Zum Beispiel, XSD hat einen
xsi:nil="true"
Attribut. Obwohl Sie anwenden können, einige dieser schema-Attribute der XML-Attribute sind nicht "Reine" XML; Sie sind eine Ergänzung geliefert von XSD-schemas.Dies ist ein Fall, wo XSD frei war, eine eigene Semantik, die auf der Oberseite der Basis-XML-Struktur, und fügen Sie eine explizite
nil
wo man noch nicht vorhanden. Diese Flexibilität ist als Vorteil von XML.Ich denke, das kommt auf die Tatsache, dass es kein Standard-mapping zwischen XML und Objekt-Modell Ihrer Lieblings-Sprache. Betrachten Sie das folgende XML:
Tut
Person
haben Eigenschaften (oder Felder)Father
undMother
? Oder hatPerson
stellen eine Kollektion enthält Objekte der TypenFather
undMother
(vielleicht erbt von der abstrakten BasistypFamilyMember
)? Dies ist nicht klar aus der XML, und es ist bis zu Ihnen, wie Sie repräsentieren diese in Ihrer Objekt-Modell. (Die Anwesenheit von schema ändern würde, dass etwas, aber es lässt noch Raum für interpretation.)Ähnlich, das Konzept der
null
ist nicht in XML vorliegen. Auf der anderen Seite, das Konzept der leer-element nicht anzeigen direkt auf Objekt-Modell. Und Sie sind nicht die gleichen, leeren element noch Attribute haben kann und es hat einen "Typ" (element name).In der Regel, ich denke, eine gute Lösung ist, um ein spezielles XML-element repräsentiert
null
(<Null />
), aber eine andere Lösung, die vielleicht mehr Sinn machen in Ihrem speziellen Fall.isEmpty="true"
.