IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Xml, Linq et Remove()


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut Xml, Linq et Remove()
    Bonjour,

    j'ai un soucis qui me fais m'arracher les cheveux depuis plusieurs heures. Ne trouvant pas de solutions, je me tourne vers vous.

    J'ai un fichier xml du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?xml version="1.0" encoding="utf-8" ?>
    <gallery title="Diaporama">
        <category name="Conditionnement">
            <image>
                <date>29/03/2008</date>
                <title>Poudre</title>
            </image>
            <image>
                <date>29/03/2008</date>
                <title>Granules</title>
            </image>
        </category>
        <category name="Usine">
            <image>
                <date>30/03/2008</date>
                <title>Usine 1</title>
            </image>
            <image>
                <date>30/03/2008</date>
                <title>Usine 2</title>
            </image>
        </category>
    </gallery>
    Je souhaite effacer la catégorie "Usine" par exemple, de ce fait je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    XDocument galleryXML = XDocument.Load(xml_path);
     
                        var req = from c in galleryXML.Descendants("category")
                                  where c.Attribute("name").Value == "Usine"
                                  select c.Attribute("name");
                        foreach (var r in req)
                        {
                            r.Parent.RemoveAll();
                        }
                        galleryXML.Save(xml_path);
    Ca efface bien le contenu de la catégorie "Usine", enfin ca efface l'attribut et les noeuds enfants, et çà me laisse :

    à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <category name="Usine">
            <image>
                <date>30/03/2008</date>
                <title>Usine 1</title>
            </image>
            <image>
                <date>30/03/2008</date>
                <title>Usine 2</title>
            </image>
        </category>
    Si quelqu'un pouvait me dire ce qui ne va pas, afin que je <category /> n'apparaisse plus, çà serait vraiment sympa, merci.

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut select c.Attribute("name");
    Pourquoi écris-tu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select c.Attribute("name");
    ?

    Là tu sélectionnes tous les attributs "name".

    est suffisant.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Merci pour ta réponse,

    j'avais déjà testé ce que tu disais, et celà me paraissais bien entendu logique.
    Cependant çà ne fonction pas, et me renvoie l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet
     
    [NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.]
       System.Xml.Linq.<GetDescendants>d__a.MoveNext() +247
       System.Linq.<WhereIterator>d__0`1.MoveNext() +230
       BookAdmin.Views.Document.Categories_Photos_Liste.gvCategories_RowCommand(Object sender, GridViewCommandEventArgs e) in C:\BookAdmin\BookAdmin\Views\Document\Categories_Photos_Liste.aspx.cs:60
       System.Web.UI.WebControls.GridView.OnRowCommand(GridViewCommandEventArgs e) +105
       System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +76
       System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +199
       System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +177
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Rajoutes un ToList à cause de l'execution différée de LINQ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var req = from c in galleryXML.Descendants("category")
                                  where c.Attribute("name").Value == "Usine"
                                  select c;
     
    foreach (var r in req.ToList())
    {
       r.Remove();
    }
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Mai 2007
    Messages : 22
    Par défaut
    Ah ben tiens, j'avais pas du tout pensé à çà

    Eh bien effectivement, çà fonctionne parfaitement, un grand merci à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation requête XML - LinQ
    Par jeyGey dans le forum Linq
    Réponses: 2
    Dernier message: 25/09/2014, 16h57
  2. [Débutant] XML Linq - Element facultatif
    Par PaulP dans le forum C#
    Réponses: 2
    Dernier message: 23/05/2013, 10h05
  3. Linq to XML remove éléments
    Par Pelote2012 dans le forum Linq
    Réponses: 2
    Dernier message: 13/06/2012, 10h35
  4. remove avec linq to xml
    Par trouffiondesiles dans le forum Silverlight
    Réponses: 4
    Dernier message: 10/10/2010, 19h53
  5. Réponses: 2
    Dernier message: 06/08/2008, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo