2010-12-27 9 views
1

내가 XElement를 객체가이 같은 형식의 한 :중첩 된 XML 노드에서 속성 값을 가져 오는 방법은 무엇입니까?

<Setting guid="3bcedf55-b75f-456b-b90a-a92cbbb022ga"> 
    <PatientFieldList> 
     <PatientFieldSetting PatientName="UserDecision" PatentFieldLength="64" /> 
     <PatientFieldSetting PatientName="prohibited" PatentFieldLength="128" /> 
    </PatientFieldList> 
</Setting> 

내가 모든 노드에있는 모든 속성의 값을 얻을 수 있지만 나는 방법을 모른다 :/내가 많이 가지고

xml.Elements("PatientFieldList") 

xml.Descendants("PatientsSettingsFieldsList").Where(x => x.Attribute("PatentFieldLength").Value == 64)` 

시도 그래서 노드에 이러한 속성을 '[]'또는 어떻게 든 액세스하는 쉬운 방법이 있는지 궁금합니다.

답변

3

코드 :

using System; 
using System.Linq; 
using System.Xml.Linq 

var xml = "<Setting ..."; 
var doc = XElement.Parse(xml); 
int i; // for int parse 
var q = from node in doc.Descendants("PatientFieldSetting") 
     let name = node.Attribute("PatientName") 
     let length = node.Attribute("PatentFieldLength") 
     select new { Name = (name != null) ? name.Value : "", Length = (length != null && Int32.TryParse(length.Value, out i)) ? i : 0 }; 

foreach (var node in q) 
{ 
    Console.WriteLine("Name={0}, Length={1}", node.Name, node.Length); 
} 

XDocument doc = //your data 

var q = from node in doc.Descendants() 
     where node.Attributes().Count() > 0 
     select new {NodeName = node.Name, Attributes = node.Attributes()}; 

foreach (var node in q) 
{ 
    Console.WriteLine(node.NodeName); 
    foreach (var attribute in node.Attributes) 
    { 
     Console.WriteLine(attribute.Name + ":" + attribute.Value); 
    } 
    Console.WriteLine(); 
} 

을 당신은 단지 이름에 대한 PatientFieldSetting 노드 필터를 원하는 경우

출력 :

Name=UserDecision, Length=64 
Name=prohibited, Length=128 
+0

@PiterK : 기꺼이 도와 줬어! :) – abatishchev

1

이것은 당신의 XML의 속성에있는 모든 노드의 속성을 출력합니다

from node in doc.Descendants("PatientFieldSetting") 
관련 문제