Question

Je suis en train de faire beaucoup de traitement XML en C # depuis la fin, et après être revenu à C # après une longue période de codage javascript, il manque vraiment quelques-uns des jolis raccourcis de JS.

J'ai un document XML assez volumineux composé d'éléments, d'enfants, etc. Représentant les billets pour les réservations / vols / attractions pour une réservation en ligne.

Jusqu'à présent, je viens de parcourir le document pour extraire les informations dont j'ai besoin. J'ai maintenant commencé à les transférer dans des fonctions d'assistance. Ainsi, par exemple, nous pourrions vouloir changer la façon dont nous traitons une réservation si le vol est effectué par une tierce partie. C’est facile à vérifier avec Xpath, nous vérifions simplement la valeur d’un élément. Donc, j'ai une fonction d'aide qui fait exactement cela, donc mon Xpath est seulement à un endroit et retourne un bool. Je n'en ai qu'environ une douzaine et jusqu'à présent, je considérais le tout comme une réservation, mais nous venons de faire un travail qui concernait uniquement l'élément de vol de la réservation et les 4 derniers assistants. viens de créer sont très liés au vol qui m'a fait penser si je le fais bien.

J'ai évité la nécessité de convertir l'ensemble du document en un objet, car il serait très pénible de le faire en raison de sa taille et qu'il n'est actuellement pas nécessaire, mais pas vraiment. Créer tous ces objets serait très pénible et j'ai travaillé sur des projets similaires où cet itinéraire a été effectué et il est difficile d'essayer de le déboguer ou de commencer par vous en reparler. Nous n'utilisons pas l'intégralité du document, le traitement que nous effectuons utilise à peine 10% de celui-ci, de sorte que la désérialisation de tout semble un peu trop élaborée. La désérialiser dans JS serait un jeu d'enfant, mais C # le rend si long. Je sais que je pourrais utiliser XSD.exe pour atténuer un peu la douleur, mais je trouve qu’un tel gâchis est à utiliser sans un bon schéma (qui, bien sûr, n’existe pas).

Mais cela m’a fait réfléchir: devrions-nous TOUJOURS créer une vaste collection d’objets à partir de notre XML ou la méthode rapide que j’ai faite est-elle toujours acceptable? J'en suis content, mais j'essaie juste d'y réfléchir si Objets serait un meilleur moyen. Si nous avions tout converti, au moins il serait disponible si nous en avions besoin dans de futurs projets.

Je suis conscient qu'il y a peut-être des commentaires sur la vitesse de xpath, mais c'est assez rapide pour ce que nous voulons actuellement, donc ce n'est pas un problème ici.

Avez-vous des idées sur si je peux continuer à XPathing?

Était-ce utile?

La solution

Si vous avez un schéma XML (XSD), je préférerais probablement toujours utiliser l'approche désérialisation par objet. Il est simplement plus simple et plus propre de travailler avec de beaux objets CLR.

Si vous ne possédez pas de schéma XML et que vous ne pouvez pas en obtenir un de la source / du fournisseur de vos données, la décision n'est pas très claire. Comme vous le dites, XSD.EXE peut alléger l'équation, mais un tel schéma XML inféré n'est généralement ni parfait ni souvent très joli.

C'est difficile - si vous vous sentez à l'aise avec l'utilisation de XPath pour naviguer dans votre code XML, je m'en tiens à cela. Si vous avez du code XML à analyser très souvent, créer un fichier XSD peut-être une bonne idée à la fin.

Autres conseils

Oui, si vous n’avez besoin que de 10% du code XML, XPathing semble être OK ici en raison d’un risque excessif de désérialisation.

En C # 4.0 et DLR, il existe un mot clé dynamique qui permet d'explorer de manière dynamique la structure XML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top