2009-03-22 8 views
0

Je travaille sur une application .NET (VB 2008) qui récupère toutes ses données à partir d'une application Web Django. J'utilise Linq-to-XML et Linq-to-objects dans l'application.Comment remplacer le contenu xml dans les éléments sélectionnés conditionnellement en utilisant linq (VB 2008)

Un appel d'API me donne des données XML dans le format suivant que je charge dans un XDocument.

<django-objects version="1.0"> 
    <object pk="1" model="app.person"> 
     <field type="CharField" name="reference_num">001</field> 
     <field to="app.office" name="office" rel="ManyToOneRel">2</field> 
     <field type="DateField" name="date">2008-09-03</field> 
     <field type="CharField" name="surname"></field> 
     <field type="CharField" name="name">Sandra</field> 
     <field type="DateField" name="birthdate">1988-11-03</field> 
     <field type="CharField" name="sex">F</field> 
     <field type="CharField" name="marital_status">S</field> 
     <field type="TextField" name="special_interests">Biking</field> 
     <field type="CharField" name="identity_proof"></field> 
     <field type="CharField" name="identity_proof_number"></field> 
     <field type="BooleanField" name="is_active">0</field> 
     <field type="DateTimeField" name="created">2008-09-03 12:46:39</field> 
     <field type="DateTimeField" name="modified">2008-09-03 12:46:39</field> 
     <field type="DateField" name="important_date"><None></None></field> 
     <field type="DateField" name="archive_date"><None></None></field> 
     <field type="CharField" name="process_status"></field> 
     <field type="FileField" name="image"></field> 
     <field to="auth.user" name="self_user" rel="OneToOneRel">13</field> 
    </object> 
    <object pk="2" model="app.person"> 
    . 
    <!-- more similar xml //--> 
    . 
    </object> 
    . 
    . 
    . 
</django-objects> 

C'est le format, l'appel API renvoie plusieurs <object> éléments comme celui-ci. Ce code XML contient <None></None> pour représenter les valeurs Null, par exemple, vers le bas dans le bloc de code ci-dessus, en <field type="DateField" name="archive_date"><None></None></field>. Le <None></None> me dit que dans la base de données, ce champ a une valeur nulle. Les autres éléments <object> de ce document XDocument peuvent avoir des dates valides ou <None></None>. Ce que je voudrais faire est: pour tout <object><field type="DateField" name="archive_date"> contient <None></None> remplacer cette représentation nulle par 1899-01-01.

Comment ferais-je pour y parvenir?

Merci.

Répondre

1

Qu'en est-il de quelque chose comme ça?

XElement djangoElement = XElement.Load(@"c:\django.xml"); 

IEnumerable<XElement> archiveDateElements = from fieldElement in djangoElement.Elements("object").Elements("field") 
              where fieldElement.Attribute("type") != null && 
               fieldElement.Attribute("type").Value == "DateField" && 
               fieldElement.Attribute("name") != null && 
               fieldElement.Attribute("name").Value == "archive_date" 
             select fieldElement; 

foreach (var archiveDateElement in archiveDateElements) 
{ 
    XElement noneElement = archiveDateElement.Element("None"); 

    if (noneElement != null) 
    { 
     noneElement.ReplaceWith("1899-01-01"); 
    } 
} 

P.S. Désolé - juste remarqué que c'était VB.NET que vous étiez après. Mais je suppose que les similitudes sont telles qu'il peut vous pointer dans la bonne direction.

+0

Vous me mettez dans la bonne direction. J'ai finalement utilisé une clause where plus simple, puisque tous les '' ont l'attribut "name". Merci. De fieldElement Dans doc.Descendants ("object"). Elements ("field") Où fieldElement.Attribute ("name"). Value = "archive_date" Sélectionnez fieldElement – chefsmart

Questions connexes