小弟最近学习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;
}现求各位大侠,有没有比以上方法更简单、速度更快的方法?
不吝赐教,谢谢!
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;
}现求各位大侠,有没有比以上方法更简单、速度更快的方法?
不吝赐教,谢谢!
xml_Doc.Load(FileName);
string id = xml_Doc.DocumentElement.LastChild.FirstChild.InnerText;
doc.Load(@"e:\1.xml");
string xPath = "//No.[not(text() < //No./text())]";
string id = doc.SelectSingleNode(xPath).ChildNodes[0].InnerText;