小弟最近学习XML文件的操作,在向文件追加节点时遇到一个小小的问题。
XML文件如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Employee>
  <Personnel>
    <No.>1</No.>
    <Name>Jack</Name>
    <Department>Office</Department>
    <Date>2005-06-11</Date>
  </Personnel>
  <Personnel>
    <No.>2</No.>
    <Name>GiGi</Name>
    <Department>Office</Department>
    <Date>2005-10-19</Date>
  </Personnel>
  <Personnel>
    <No.>3</No.>
    <Name>Jerry</Name>
    <Department>Office</Department>
    <Date>2007-03-11</Date>
  </Personnel>
</Employee>要给此文件增加节点,节点<No.>的值想自动生成最大值,一时想不出好的解决方法,用了个比较笨的遍历比较,代码如下:
/// <summary>
/// 返回指定XML文件的指定节点的最大值。
/// </summary>
/// <param name="FileName">XML文件的完整文件路径。</param>
/// <returns>操作成功返回最大值,否则返回0。</returns>
private int Max(FileName)
{
    XmlDocument xml_Doc = new XmlDocument();
    xml_Doc.Load(FileName);
            
    XPathNavigator xp_nav = xml_Doc.CreateNavigator();
    XPathExpression xp_exp = xp_nav.Compile("Employee/Personnel/No.");
    XPathNodeIterator xp_nodeite = xp_nav.Select(xp_exp);
    
    int i_no = 0;    
if (xp_nodeite.Count == 0)
return i_no;
    while (xp_nodeite.MoveNext())
    {//寻找No.的最大值; 
     if (i_no < Convert.ToInt32(xp_nodeite.Current.Value))
        {
         i_no = Convert.ToInt32(xp_nodeite.Current.Value);               
        }
     }
     return i_no;
}现求各位大侠,有没有比以上方法更简单、速度更快的方法?
不吝赐教,谢谢!

解决方案 »

  1.   

    如果你的xml节点是按从小到大排列的话,可以直接这样取ID。XmlDocument xml_Doc = new XmlDocument();
    xml_Doc.Load(FileName);
    string id = xml_Doc.DocumentElement.LastChild.FirstChild.InnerText;
      

  2.   

    try:XmlDocument doc = new XmlDocument();
    doc.Load(@"e:\1.xml");
    string xPath = "//No.[not(text() < //No./text())]";
    string id = doc.SelectSingleNode(xPath).ChildNodes[0].InnerText;