2014-09-11 55 views
1

我完全没有想法和我的C#/ LINQ/XML技能仍然非常薄弱。也许有人可以帮我一个相对简单的任务,我不想写周围的整个PROGRAMM:c#xml显示最高值

我需要得到客户的最高-ID在这看起来有点像这样的XML数据库:

<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 2014-09-11 12:31:04

回答

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

在这种情况下.Substring(2)会更好,因为customerid可能会获得更多数字作为客户数量增长。 – fuchs777 2014-09-11 12:35:42

+0

@ fuchs777:这是一个很好的观点。 – Bedford 2014-09-11 12:38:22

+2

为什么你从2开始不应该是1? – 2014-09-11 12:38:48

0

或更简洁使用LINQ/xpath的组合

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