2013-08-19 5 views
0

У меня есть XML-документ:LINQ XML дочерние элементы/узлы

<users> 
     <user_tuple> 
      <userid>U01</userid> 
      <code> 
      <name>Tom Jones</name> 
      </code> 
      <rating>B</rating> 
     </user_tuple> 
     <user_tuple> 
      <userid>U02</userid> 
      <code> 
      <name>Mary Doe</name> 
      </code> 
      <rating>A</rating> 
     </user_tuple> 
     <user_tuple> 
      <userid>U03</userid> 
      <code> 
      <name>Dee Linquent</name> 
      </code> 
     <rating>D</rating> 
     </user_tuple> 

Как выбрать только те (и все дочерние узлы/элементы), где userid.Value == "U01" и рейтинг .Value == "B" и т.д. то есть я хочу результаты:

<user_tuple> 
     <userid>U01</userid> 
     <code> 
     <name>Tom Jones</name> 
     </code> 
     <rating>B</rating> 
    </user_tuple> 

ответ

0

Это должно работать (в C#), попробуйте его

string id = "U01"; 
string rating = "B"; 
XDocument doc = null; 
using (var reader1 = new StreamReader(@"..\..\test.xml")) 
{ 
    doc = XDocument.Load(reader1); 
    var nodes = from c in doc.Descendants("user_tuple") 
          .Where(d => d.Element("userid").Value == id && d.Element("rating").Value == rating) 
       select c; 
} 
+0

Thnx. И если выбрать x.Element («userid»). Значение == «U01» и x.Element («name»). Значение == «Tom Jones»? –

0

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

XElement root = XElement.Load(@"YOUR XML PATH"); 
     var res = root.Elements("user_tuple").Where(x => x.Element("userid").Value == "U01" && x.Element("rating").Value == "B").Elements(); 
+0

Использование пространства имен ** System.XML.Linq ** – Jagadesh

+0

Thnx. И если выбрать x.Element («userid»). Значение == «U01» и x.Element («name»). Значение == «Tom Jones»? –

+0

@ ГарикГарик Вы получите то же самое – Jagadesh