2010-03-26 5 views
1

je le morceau de code XML suivant:Obtenir un ensemble d'éléments à l'aide de LINQ

<xml> 
    <ObsCont xCampo="field1"> 
     <xTexto>example1</xTexto> 
    </ObsCont> 
    <ObsCont xCampo="field2"> 
     <xTexto>example2</xTexto> 
    </ObsCont> 
    <ObsCont xCampo="field3"> 
     <xTexto>example3</xTexto> 
    </ObsCont> 
</xml> 

Comment (LINQ) obtenir par exemple ce qui est dans la balise xTexto qui a comme parent le ObsCont avec le xCampo attribut "field2"?

(C#, vb.net, votre choix)

Répondre

2
XDocument xml = XDocument.Parse(@"<your XML>"); 
from field in xml.Elements("ObsCont") 
where field.Attribute("xCampo") != null && 
field.Attribute("xCampo").Value == "field2" 
select field.Element("xTexto").Value; 

Cette retourne une chaîne IEnumerable de type contenant toutes les valeurs avec les critères spécifiés.

+0

Qu'en est-il de la part xCampo? –

+0

Doit avoir raté cette partie en quelque sorte ... –

1

J'utiliser LINQ to XML:

XDocument doc = XDocument.Load("input.xml"); 
XElement element = doc 
    .Descendants("ObsCont") 
    .Single(x => x.Attribute("xCampo").Value == "field2"); 
Console.WriteLine(element.Value); 
1
string s = @"<xml> 
     <ObsCont xCampo=""field1""> 
      <xTexto>example1</xTexto> 
     </ObsCont> 
     <ObsCont xCampo=""field2""> 
      <xTexto>example2</xTexto> 
     </ObsCont> 
     <ObsCont xCampo=""field3""> 
      <xTexto>example3</xTexto> 
     </ObsCont> 
    </xml>"; 

    XElement xe = XElement.Parse(s); 
    var n1 = xe.Elements("ObsCont") 
     .Where(a => a.Attribute("xCampo") != null && 
      a.Attribute("xCampo").Value == "field2") 
     .Select(a => a).SingleOrDefault(); 
    if (n1 != null) 
    { 
     var n2 = n1.Descendants("xTexto").SingleOrDefault(); 
     Console.Write(n2.Value); 
    } 
Questions connexes