使用linq获取一组元素

时间:2010-03-26 21:01:38

标签: c# .net xml vb.net linq

我有以下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标记内部具有xCampo属性“field2”的ObsCont作为父标记的内容?

(c#,vb.net,您的选择)

3 个答案:

答案 0 :(得分: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类型字符串,其中包含具有您指定条件的所有值。

答案 1 :(得分: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);

答案 2 :(得分: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);
   }