J'ai besoin de connaître la manière optimale d'écriture / lecture Deuxième question est de savoir comment lire l'élément de date de XML. Peut être utilisé pour cela? Par exemple: p>
ou, dois-je analyser la chaîne comme celle-ci? Par exemple: p>
datetime code> dans / depuis xml. Devrais-je écrire directement
DateTime code> dans xml ou
datetime.tostring () code> dans xml? p>
(DateTime) rec.Element ("date"). Valeur code> p>
datetime.parse (rec.Element ("date"). Valeur) CODE> P>
3 Réponses :
Vous pouvez utiliser la coulée d'un échantillon: p> sortie pour moi: p> xelement code> ou
xattribute code> avec linq sur xml, oui ... mais pas de la ficelle elle-même. LINQ to XML utilise le format XML standard, indépendant de vos paramètres de culture.
La coulée de xelement est meilleure ou analysant le xelement.value ??
@Pankaj: Je voudrais définitivement i> utiliser les conversions LINQ vers XML. De cette façon, il utilisera le format standard pour stocker des dates / horaires dans XML, vous pouvez donc interopérer proprement avec un autre code (éventuellement écrit dans d'autres langues).
Qu'entendez-vous par linq à la conversion XML? Désolé si je suis stupide ..: P ... Vous voulez dire que je devrais écrire la date directement dans XML, puis jeter le xelement ... est-ce ce que vous voulez dire ??
@Pankaj: Je veux dire les conversions effectuées par la bibliothèque LINQ vers XML, comme indiqué dans ma réponse.
@Jon: Ok ... bien comme vous pouvez le voir dans votre exemple. Le format change dès que vous lancez l'élément XML. Par conséquent, lorsque le xelement est mis à jour avec cette valeur, elle contiendra le nouveau format. Donc, je pense pourquoi ne changeons-nous pas le format en premier lieu en écrivant XElement ("maintenant", maintenant.Tostring ()). Que dites-vous à ce sujet ??
@Pankaj: le format i> ne fait pas partie de la valeur pour commencer. Vous devriez définitivement pas b> juste appeler tostring code> sur la dateTime. Cela vous obtiendra XML qui dépend de la culture de l'ordinateur que vous l'utilisez. Que signifie "03/05/2011" - le 3 mai ou 5 mars? Il est ambigu que si vous avez également les informations de format (qui ne font pas partie de la valeur i>). Le format XML est normalisé et ne souffre pas de ce problème.
@Jon: hmm ... dats un point très valide et important que vous avez fait. Je n'y pensais pas de cette façon ... Merci d'avoir nettoyé l'air. S'il vous plaît dites-moi la bonne façon de mettre à jour l'élément de date existant. En ce moment, je mette à jour le champ comme celui-ci R.Element ("date"). Valeur = date.tostring () b>.
@Pankaj: Ensuite, je vous suggère d'arrêter de faire ça :) Si vous avez I> pour mettre à jour un élément existant, vous pouvez utiliser r.Element ("date"). Valeur = xmlconvert.tostring (date , XmlatetimédiatéorialisationMode.roundtripkind); code>
@Jon: Merci Buddy ... Désolé de prendre autant de votre temps. Maintenant, je vais lire la date comme celle-ci DateTime date = (DateTime) fiche.Element.Element ("date") b> et mettez-la comme ceci R.Element ("date"). Valeur = xmlonvert. Tostring (date, xmlatetitésérializationmode.roundtripkind); b>
Quand j'utilise DateTime? (Nullable DateTime), ce code xmlconvert.tostring (date, xmlatetitésériializationmode.roundtripkind) B> Donner une erreur
@Pankaj: Ensuite, vous devez spécifier date.value code> - c'est juste une partie normale de l'utilisation des types de valeur nullables. Notez que si vous utilisez plutôt le constructeur xelement, cela arriverait simplement par magie :)
@Jon: Quand j'essaie de mettre à jour à l'aide de "date.value", je reçois la valididoperationException {"L'objet nullable doit avoir une valeur."}. Voici la ligne d'erreur de génération de code: xmlconvert.tostring (DépatchDate.Value, xmlatetitésérializationMode.roundtripkind);
@Pankaj: J'avais supposé que vous avez déjà testé que la date n'était pas nulle avant d'utiliser cela ... À ce stade, nous avons vraiment dépassé Linq vers XML, en discussion générale sur des types de valeur nullables. Je vous suggère de lire les détails de ceux-ci - cela vous aidera à faire face à cela et à d'autres situations.
@Jon: Désolé, dans la dépêche, j'oublie de vérifier la condition null. Oui la date est null c'est pourquoi il donne une erreur
@Jon: Voici ce que je fais maintenant PaiementDate.Hasvalue? Xmlconvert.tostring (paiditionnement.Value, xmlatetimédiaérializationMode.roundtripkind): "" code> corrigez-moi si vous sentez que le code n'est pas bon
Comment est le DateTime analysé = (DateTime) élément; CODE> Capable de lancer un xelement à une date d'heure? J'aurais pensé que cela provoquerait une erreur d'exécution.
@Justin: Regardez la documentation xelement code> - il fournit une conversion explicite personnalisée. Si ce n'est pas le cas, cela échouerait à la compilation.
Oh je vois, je ne savais pas que cela avait cette fonctionnalité. Merci.
Une alternative à la réponse de @jon Skeet est de convertir la dateTime en une chaîne à l'aide du Format" aller-retour ". Cela le convertit à un format qui enregistrera et chargera sans perdre aucune information. et convertir à nouveau en utilisant denttime.parse (). La page que j'ai liée à a des exemples vous indique comment convertir / à partir du format de chaîne. Tout ce que vous avez à faire est de stocker cette chaîne dans votre XML. Cela vous donne plus de contrôle sur la manière dont les données sont stockées (si vous voulez plus de contrôle, c'est-à-dire). P> p>
Plus de contrôle, mais moins portabilité. XML a normalisé des méthodes de stockage des dates et des heures - je penserais très soigneusement avant de s'écouler délibérément d'eux.
@Jon: Ouais, j'essayais de souligner une manière plus généralisée de sérialiser à / du texte sans perte, mais je ne l'ai pas vraiment dit très bien - comme vous le dites, je me suis écarté du point :-)