7
votes

Est ce juste moi? Je trouve Linq à XML pour être une sorte de lycée, comparé à xpath

Je suis un programmeur C #. Je ne peux donc pas profiter de la syntaxe XML cool dans VB.

var waypoints = from waypoint in gpxDoc.Descendants(gpx + "wpt") 
          select new 
          { 
            Latitude = waypoint.Attribute("lat").Value, 
            Longitude = waypoint.Attribute("lon").Value, 
            Elevation = waypoint.Element(gpx + "ele") != null ? 
                waypoint.Element(gpx + "ele").Value : null, 
            Name = waypoint.Element(gpx + "name") != null ? 
                waypoint.Element(gpx + "name").Value : null, 
            Dt = waypoint.Element(gpx + "cmt") != null ? 
                waypoint.Element(gpx + "cmt").Value : null 
          }; 


3 commentaires

Je suis d'accord, j'adore L2O, L2S, etc., mais lorsque vous faites face à XML, je reste à l'aide de XPath avec xmldocument / xmlnode / xmlelement, etc. LINQ-TO-XML est peut-être plus facile à démarrer avec mais si vous avez XPath dans vos doigts Ensuite, il ne va pas battre xpath ...


Non, ce n'est pas juste toi. LINQ-TO-XML pourrait sembler une approche "plus intelligente", mais comme vous, je préfère toujours XPath. Si vous connaissez XPath et que vous pouvez en utiliser - par tous les moyens, faites-le! :-) Tu n'es pas seul :-)


Ce n'est pas vraiment surprenant que quelque chose qui soit nouveau pour vous semble moins évident que quelque chose que vous connaissez déjà.


4 Réponses :


4
votes

Utilisez ce que vous ressentez le plus à l'aise avec, tant que cela devient le travail. J'utilise les deux méthodes en fonction de ce que je dois faire avec XML. Cela me semble que vous avez un bon gérant sur ce que Linq est bon et ce que XPath est bon pour.


0 commentaires

5
votes

Oui, l'exemple que vous avez donné est la mensonillon.

mais avec Linq vient la flexibilité du refacteur à l'éloignement de la non-littéité.

Voici un exemple de la façon dont je voudrais l'améliorer. (Ceci est fait sans aucun test du tout et je ne connais même pas les noms de classe réels, mais cela devrait transmettre l'idée) xxx


3 commentaires

Il est encore beaucoup plus lourd qu'une expression élégante XPath.


@Dimitrenrovatchev J'adorerais voir votre élégante expression XPath qui retourne la collection ci-dessus.


@Timjarvis: J'aimerais fournir un - Pourriez-vous, s'il vous plaît, spécifiez le document XML et quels nœuds exactement doivent être sélectionnés? Celles-ci ne sont pas fournies dans la réponse ci-dessus, ce qui le rend encore plus suspendu à l'air.



1
votes

Je suppose que sur certains de vos types de données, mais vous pouvez faire votre requête C # Linq concise en casting de vos valeurs d'attribut: xxx

et je suis sûr que vous savez déjà le @ Syntaxe Vous pouvez utiliser des attributs dans les littéraux XML de VB.


3 commentaires

C'est encore beaucoup plus lourd qu'une expression élégante XPath


Cela fait un peu de temps que depuis que j'ai traité de xpath (sans l'utiliser avec Linq à XML), mais un exemple de l'expression "plus simple" XPath serait génial. Personnellement, je pense que cet exemple a fière allure, et c'est comme ça que je fais normalement des choses.


@ Ryan-Versaw J'aimerais fournir une expression XPath (être XPath 1.0 ou XPath 2.0), s'il existe un document XML spécifique fourni et s'il existe une description stricte de ce qui doit être produit.



1
votes

Je peux voir votre problème mais j'ai utilisé Linq pour simplement réorganiser un fichier GPX pour obtenir des points de vue dans chaque segment dans le bon ordre et se sent plutôt simple .....

  private static XDocument ConvertTimeElement(XDocument doc)
    {
        if (doc.Root != null)
        {
            var times = doc.Root.Descendants(ns + "time").ToList();
            foreach (var time in times)
                time.SetValue((string)ConvertSpotDateFormat(time));
        }
        return doc;
    }


0 commentaires