如何在XML文件中找到属性值的最大值?

时间:2014-03-12 11:01:24

标签: c# xml xpath

我有一个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表达式?

2 个答案:

答案 0 :(得分:3)

您可以使用Linq to 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));

答案 1 :(得分: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"));