XML, qu'est-ce: null ou vide?
Quant à mon autre question: XML désérialiser les éléments null?
J'ai des éléments de ce type à partir d'un serveur tiers pour l'API de test:
<Taxable />
<DefaultPurchasePrice />
Je viens de réaliser que maintenant, je suis confus propos de moi-même si des éléments comme qui représentent l'objet null ou vide.
Parler des objets, ils sont les mêmes, l'objet null signifie normalement vide référence d'objet de droit? Mais en essayant de la carte d'un élément XML à un champ de données/valeur, ils pourraient être différents.e null string est une chaîne vide, mais pour les Décimales du prix ou de la valeur Booléenne, elles ne sont pas définies qui égale à vide, mais ne sera pas nulle, sauf si elles sont définies comme les valeurs null.
Encore une fois, le problème avec mon XmlSerializer est que de ne pas gérer le transfert d'un élément vide comme ça. je pourrais facilement corriger cela dans mon code. Ou devrais-je demander aux gens de fournir le XML ont un sens bien défini XML? Car il semble que d'un vide de l'élément XML comme ça n'est pas défini: il est ici, mais peut être null ou vide n'a pas d'importance pour l'élément XML lui-même? Mais pour que l'élément de mon code besoin de comprendre la façon de traiter avec que, à moins que j'ai mis toutes mes classes C# datafield comme type de chaîne. Sinon, si mon code d'essayer de mapper directement un vide ou null élément XML à un certain datafield, il échouera à coup sûr.
Je pose cette question parce que j'ai rencontré XML ont beaucoup de ces éléments
et pour ces éléments, mon .NET XMLserialization code doivent correspondre à ceux du champ en tant que chaîne et si la chaîne n'est pas vide, j'ai le cas dans le correspondant du type de données, sinon j'ai mis à null. Et je finis par supprimer ces élément vide avant de me faire mon désérialisation, car il est beaucoup plus facile. Mais je ne l'errance: "Que suis-je vraiment en train de faire dans mon code? Fait j'ai juste supprimer les éléments null ou vide éléments? Parce qu'ils sont clairement différentes! Mais les gens de l'écriture que XML pense qu'ils sont les mêmes, parce que le XML lui-même n'ont pas de notion de 'null', et certaines personnes affirment qu'il est de ma responsabilité, de décider s'il est null ou vide. Mais XML ne vous permettent de représenter 'null' éléments de façon plus claire
Edit:
Dans l'exemple que j'ai présenté, ces deux éléments doivent bien évidemment être null plutôt que des éléments vides. XML n'ont pas vraiment de notion de valeur nulle, mais ces éléments pourraient être omis (si ils sont nuls, ne les mettez pas dans le XML) ou à l'aide d'une meilleure représentation comme mentionné être @svick. Ou dans d'autres cas, les éléments vides doivent être utilisés lorsqu'ils font sens. Mais pas de Virgule ou une valeur Booléenne.
cela devrait être une réponse... je l'avais upvote il
c'est donc un élément vide alors?
fpmurphy est assez claire. Vous devez décider, il n'existe aucune norme d'interprétation.
La spécification XML n'est pas de définir la sémantique de vos données. C'est à la spécification du vocabulaire particulier que vous utilisez. Si cette spécification ne disent pas ce que ce concept signifie, alors oui, il est ambigu. Si vous ne disposez pas d'une telle spécification, puis TOUT dans votre XML est ambigu.
OriginalL'auteur Paul L | 2011-08-30
Vous devez vous connecter pour publier un commentaire.
Il est vide. Il est sémantiquement équivalent à:
Le seul "null" concept qui existe dans le XML lui-même est un élément manquant. Vous ne pouvez pas spécifier un élément et dire qu'il est nul, à l'aide de XML est de la sémantique. Vous devez avoir une sorte de schéma (un schéma explicite, comme les DTD, XSD, ou Schematron, ou implicite/schéma logique) pour ce faire.
Ceci n'empêche pas une application qui interprète le XML ou XML officiel des technologies liées à l'. Par exemple, XSD est un
xsi:nil="true"
attribut. Même si vous pouvez appliquer certains de ces attributs du schéma XML, ces attributs ne sont pas "pur" XML; Ils sont un complément fourni par les schémas XSD.C'est un cas où XSD est libre de construire sa propre sémantique sur le dessus de la base de la structure XML, et ajouter une explicite
nil
où l'on n'existe pas. Cette flexibilité est considéré comme un avantage de XML.Clarifier et corrigé un peu. S'il vous plaît laissez-moi savoir si c'est mieux, moins bien, ou le même 🙂
merci, semble plus claire. Mais j'ai une autre question maintenant. Je ne suis pas sûr à propos de la relation de la xmlns:xsi et XSD, dois-je avoir xmlns:xsi minimum pour utiliser XSD, et d'obtenir ainsi xsi:nill et quelques autres intégrée dans les attributs gratuitement?
Oui, vous devez ajouter l'espace de noms d'alias à utiliser. Voici une description directement à partir de la normes de la recommandation: w3.org/TR/xmlschema-1/#Instance_Document_Constructions
OriginalL'auteur Merlyn Morgan-Graham
Je pense que cela revient au fait qu'il n'y est pas par défaut de correspondance entre XML et le modèle objet de votre langue préférée. Considérons le code XML suivant:
Ne
Person
ont des propriétés (ou des champs)Father
etMother
? Ou nePerson
représentent une collection qui contient des objets de typesFather
etMother
(peut-être héritant de base abstraite de typeFamilyMember
)? Ce n'est pas clair à partir du XML, et c'est à vous de décider comment vous représenter dans votre modèle d'objet. (La présence de schéma de changer un peu, mais il laisse toujours place à l'interprétation.)De même, la notion de
null
n'est pas présent dans le XML. D'autre part, le concept d'élément vide n'est pas directement l'objet du modèle. Et ils ne sont pas les mêmes, vide, élément encore peuvent avoir des attributs et qu'il a un “type” (nom de l'élément).Généralement, je pense que la bonne solution est d'avoir un spécial de l'élément XML représentant
null
(<Null />
), mais une autre solution pourrait faire plus de sens dans votre cas particulier.Vous pouvez utiliser le vide elemens comme vous l'avez mentionné. Ou vous pouvez laisser de côté cette propriété complètement. Ou peut-être même quelque chose comme un attribut:
isEmpty="true"
.Il n'y a en fait une autre bonne solution pour representin 'null' (' xsi:nil="true"'), voir ceci: stackoverflow.com/questions/774192/....
OriginalL'auteur svick