2010-03-26 32 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)獲得,例如什麼是有父與xCampo的ObsCont的xTexto標籤內屬性「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); 
    }