Получение набора элементов с использованием linq - PullRequest
1 голос
/ 27 марта 2010

У меня есть следующий фрагмент XML:

<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, ваш выбор)

Ответы [ 3 ]

2 голосов
/ 27 марта 2010
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 типа, содержащую все значения с указанными вами критериями.

1 голос
/ 27 марта 2010
    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);
   }
1 голос
/ 27 марта 2010

Я бы использовал 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...