2010-06-01 2 views
3

У меня есть XML-файл, как показано ниже:Как читать XML узлов в XML с помощью C# .NET

<report timestamp="3201" reportVersion="2" request="3981135340"> 
<question timedOut="false" time="3163" attempts="2" correct="true" id="13"> 
<answer status="attempt"> 
<radioButton correct="false" value="true" id="17" /> 
</answer> 
<answer status="correct"> 
<radioButton correct="true" value="true" id="15" /> 
</answer> 
</question> 
</report> 

Я хочу прочитать дочерние узлы на основе «статуса» атрибута узла «ответ».

+0

Ваш файл XML отсутствует :) – tpeczek

+0

уже зафиксировано, что :) –

ответ

1

Использование LINQ для XML:

using System.Xml.Linq; 

var doc = XDocument.Parse(xml); // or XDocument.Load() 
var elements = from e in doc.Descendants("answer") 
       where e.Attribute("status").Value == "attempt" 
       select e; 

// elements will be IEnumerable<XElement> 
0

Использование XmlDocument и XPath:

XmlDocument document = new XmlDocument(); 
//here you should load your xml for example with document.Load(); 
XmlNodeList nodes = document.SelectNodes("/report/question/answer[@status = 'correct']/radioButton"); 

Просто измените XPath для ваших нужд.

0

попробовать это ..

foreach (XmlNode xnode in xdoc.SelectNodes("report/question/answer")) 
    { 
     if (xnode.Attributes.GetNamedItem("status").Value == "correct") 
     { 
      string value = xdoc.SelectSingleNode("report/question/answer[@status='correct']/radioButton").Attributes.GetNamedItem("id").Value; 

     } 
     if (xnode.Attributes.GetNamedItem("status").Value == "attempt") 
     { 
      string value = xdoc.SelectSingleNode("report/question/answer[@status='attempt']/radioButton").Attributes.GetNamedItem("id").Value; 
     } 
    } 
Смежные вопросы