2014-03-12 95 views
3

我有以下結構的XML文件:如何找到XML文件中屬性值的最大值?

<doc> 
    <rootelement> 
    <childelement id="0" /> 
    <childelement id="1" /> 
    . 
    . 
    </rootelement> 
</doc> 

我想找到id屬性

的想法,我心目中的最高數值是一樣的東西:

int highest = -1; 
foreach(var node in xmldoc.SelectNodes("//doc/rootelement/childelement")) 
{ 
    highest = Math.Max(GetID(node), highest); 
} 

其中GetID(XMLNode)將檢索當前節點的屬性的值。

是否有一個更緊湊(或更高效)的XPath表達式來做到這一點?

回答

3

您可以使用LINQ到XML:

var xdoc = XDocument.Load(path_to_xml); 
var maxId = xdoc.XPathSelectElements("//doc/rootelement/childelement") 
       .Max(c => (int)c.Attribute("id")); 

或者沒有的XPath:

var maxId = xdoc.Root.Elements("rootelement") 
       .Elements("childelement") 
       .Max(c => (int)c.Attribute("id")); 

隨着XmlDocument的:

var maxId = doc.SelectNodes("//doc/rootelement/childelement") 
       .Cast<XmlElement>() 
       .Max(c => Int32.Parse(c.Attributes["id"].Value)); 
+0

是否有一種變體也可以用XmlDocument而不是XDocument來完成此操作?我已經創建了一個XmlDocument,並將當前代碼中的所有內容(從XmlDocument到XDocument)轉換(爲了一致性),需要進行一些重構。 – Pep

+0

@Pep sure sure you can(I'll update answer in a minute)but Linq to Xml is a preferred way to work with xml –

+0

很好,謝謝。我現在正在閱讀http://stackoverflow.com/questions/1542073/xdocument-or-xmldocument,而且由於我們正在編寫一個.NET 4.0插件,我沒有看到任何將來重構使用XDocument的缺點。 – Pep

1

使用LINQ到XML。

string xml = 
    @"<doc> 
    <rootelement> 
     <childelement id='0' /> 
     <childelement id='1' /> 
    </rootelement> 
    </doc>"; 

var doc = XDocument.Parse(xml); 
int max = doc.Descendants("childelement").Max(e => (int)e.Attribute("id"));