2012-04-23 5 views
2

XML을 쿼리 할 때 Linq을 자주 사용하지 않으며 XML에 대한 많은 경험이 없습니다. 내가 뭘하고 싶은 것은Linq를 사용하여 XML 문서 쿼리

<AlarmParameters> 
    <Parameter> 
     <ParameterName>ConsecutivePoints</ParameterName> 
     <Points>30</Points> 
     <AllowEdit>true</AllowEdit> 
     <Caption>Consecutive Points</Caption> 
    </Parameter> 

    <Parameter> 
     <ParameterName>SigmaCount</ParameterName> 
     <Count>1</Count> 
     <AllowEdit>true</AllowEdit> 
     <Caption>Number of Sigmas</Caption> 
    </Parameter> 
</AlarmParameters> 

...이 간단한 XML 문서를 조회 ... 그리고 '매개 변수'클래스 목록을 생산하는 것입니다, 속성을 포함하는 각는 XML 예제에 표시된. LinqPad를 사용하여, 나는 이것을 멀리까지 얻을 수 있었지만, 이것을 어떻게 완성 할 지 정말로 모른다.

string xmlFragment = "<AlarmParameters><Parameter><ParameterName>ConsecutivePoints</ParameterName><Points>30</Points><AllowEdit>true</AllowEdit><Caption>Consecutive Points</Caption></Parameter><Parameter><ParameterName>SigmaCount</ParameterName><Count>1</Count><AllowEdit>true</AllowEdit><Caption>Number of Sigmas</Caption></Parameter></AlarmParameters>"; 

StringReader strReader = new StringReader(xmlFragment); 

XDocument xmlDoc = XDocument.Load(strReader); 

var result = from parameter in xmlDoc (not sure what Linq to put here next) 

답변

3

MSDN의 LINQ to XML overview에서 유용한 정보를 찾을 수 있습니다. 여기 요소의 컬렉션을 꺼내하는 Descendants 연산자를 사용하여 수행 할 수있는 하나의 방법, 그리고 컬렉션의 각 항목의 하위 속성을 꺼내하는 Element 운영자 :

var result = 
    from parameter in xmlDoc.Descendants("Parameter") 
    select new { 
     ParameterName = (string) parameter.Element("ParameterName"), 
     Points = (int?) parameter.Element("Points") ?? 0, 
     Count = (int?) parameter.Element("Count") ?? 0, 
     AllowEdit = (bool) parameter.Element("AllowEdit"), 
     Caption = (string) parameter.Element("Caption") 
    }; 

이 그냥 익명의 클래스 인스턴스를 생성,하지만 매개 변수 클래스에 select new MyParameterClassName으로 바꿀 수 있습니다.

+0

거의 완벽합니다. 이 쿼리를 실행할 때 클래스 속성 값에 요소 이름에 포함 된 값이 포함되어 있음을 확인했습니다 (예 :) 요소 이름을 없애고 값을 얻는 방법은 무엇입니까? – Hosea146

+1

아, 예, 사용할 수 있습니다. 'Element (".."). Value'. – mellamokb

+1

당신은 나의 날을 만들었습니다! – Hosea146

관련 문제