2010-03-26 7 views
1

У меня есть следующий фрагмент XML:Получение набора элементов с помощью LINQ

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

Как (с помощью LINQ) получить, например, то, что находится внутри тега xTexto, который имеет в качестве родителя в ObsCont с xCampo атрибут "field2"?

(C#, vb.net, ваш выбор)

ответ

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; 

Это возвращает IEnumerable типа строку, содержащую все значения с критериями, которые вы указали.

+0

Что о части xCampo? –

+0

Должно быть, пропустили эту часть ... –

1

Я хотел бы использовать Linq для 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); 
    } 
Смежные вопросы