2014-09-11 5 views
1

저는 C#/LINQ/XML 기술이 완전히 약하고 아이디어가 매우 약합니다. 어쩌면 누군가가 내가 주위에 전체 programm에 쓰기 싶지 않아 상대적으로 간단한 작업을 도와 수 있습니다C# xml은 가장 높은 값을 보여줍니다.

을 나는이 같은 약간 보이는 XML 데이터베이스에서 가장 높은 고객 ID를 얻을 필요가 :

<xml> 
    <customers> 
    <customer> 
     <customerid>a00001</customerid> 
     <name>this</name> 
    </customer> 
    <customer> 
     <customerid>a00031</customerid> 
     <name>that</name> 
    </customer> 

등등 ...

내가 지금까지 시도 내가 여기 물건과 함께 실제로 일을 다른 LINQ/XML에 사용한 코드의 혼합물, 무엇 :

var readme = XElement.Load("someXML"); 
int tempHigh; 
var highIDs = 
    (from va in readme.Elements("customers").Elements("customer") 
    where Convert.ToInt32(va.Element("customerid").Value.Substring(2, 5)) > tempHigh 
    select Convert.ToInt32(va.Element("customerid").Value.Substring(2,5))); 

tempHigh = Convert.ToInt32(highIDs.Element("customerid").Value); 

return tempHigh; 

그리고 뭔가 작동하지 않습니다. 누군가는 내가 배열의 모든 데이터를 넣어 그 배열을 정렬하고 (즉 왼쪽 내 유일한 생각하지만 조금 너무 많이 보이기 때문에)

+0

하지만 왜 LINQ를 사용하지 않고 직접 XML을 쿼리합니까? 이 게시물을 참조하십시오 http://stackoverflow.com/questions/12840647/get-max-attribute-value-from-xml-using-linq – Luca

답변

5
int highestId = readme 
    .Elements("customers") 
    .Elements("customer") 
    .Select(cust => Convert.ToInt32(cust.Element("customerid").Value.Substring(1)) 
    .Max(); 
+1

이 경우. customerid가 더 많은 숫자를 얻을 수 있기 때문에 .Substring (2)이 더 좋을 것입니다. 고객의 수가 증가합니다. – fuchs777

+0

@ fuchs777 : 아주 좋은 지적입니다. – Bedford

+2

2에서 시작하는 이유는 1이 아니어야합니다. –

0

를 첫 번째 요소를 제공하지 않아도 아이디어가 또는 더 간결한 linq/xpath 조합을 사용하여

int id = readme.XPathSelectElements("/customers/customer/customerid").Max(cid => int.Parse(cid.Value.Substring(1))); 
관련 문제