0
votes

Obtenez NULL chaque fois si j'essaie d'obtenir une valeur XML C #

J'essaie d'obtenir la valeur de "prénom" du code XML suivant: xxx

mais je reçois chaque fois une valeur vide (null) avec cette méthode: < Pré> xxx

où j'ai le problème?

merci.


2 commentaires

Le problème est que doc.Element () ne renvoie que le niveau supérieur, c'est-à-dire "utilisateur". Vous souhaitez rechercher "Prénom" à N'importe quel niveau . Une alternative pourrait être d'essayer doc.descendants ("FirstName") : Stackoverflow.com/questions/566167/...


En tant que Conseil de débogage général: vous devez séparer votre instruction à une seule doublure dans plusieurs instructions, puis exécutez une boucle foreach au lieu de Sélectionnez . De cette façon, vous pouvez placer les points d'arrêt et voir quelles sont les valeurs à chaque étape. Une fois que vous avez compris ce que la structure est et où vous avez mal tourné, vous pouvez le redéfinir (ou non).


3 Réponses :


0
votes

xelement.elements ne renvoie que les éléments de niveau supérieur, pas tous les éléments imbriqués.

Voir Docs: https://docs.microsoft.com/en-us/dotnet/api/system.xml.linq.xcontainer.elements?view=netcore-3.1

Je pense que vous pouvez vouloir getDescendantNodes () https://docs.microsoft.com/en-us/dotnet/api/xem.xml.linq.xcontainer.DescendantNodes?View=netcore-3.1# System_xml_linq_xcontainer_descendantNodes


0 commentaires

0
votes
    public List<string> GetFirstNames()
    {
        const string filename = @"C:\XML.xml";

        string text = File.ReadAllText(filename);
        XDocument doc = XDocument.Parse(text);
        List<string> firstnameList =
            doc.Root.Elements().Select(x => x.Element("firstName").Value).ToList();

        return firstnameList;
    }

3 commentaires

Ce que je reçois, c'est un système.NullReferenceException avec cette méthode.


Cela fonctionne avec le fichier de test fourni. Vous pouvez ajouter le chèque NULL nécessaire à la sélection si tous les éléments "utilisateur" de votre fichier réel ne contiennent pas d'élément "Prénom".


Pouvez-vous me donner un échantillon pour cette suivante: list fiduseNamelist = doc.root.elements (). Sélectionnez (x => nouvelle liste {prénom = (chaîne) x.Element ("FirstName"),}). Tolist ( ); Parce que j'ai à chaque fois une valeur étrange. Donc, je veux dire pas la valeur correcte.



0
votes

Voir si cette construction aide (où 'Xel' est un xelement analysé à partir de votre fichier).

Max
Susanne

User 125 has a first name of Susanne


0 commentaires