想修改一个XML文件的属性值,简单的代码实现
Net中的XmlDocument类。它支持并扩展了W3C XML DOM标准。可使用此类在文档中加载、验证、编辑、添加和放置 XML。
它将整个XML文档都先装载进内存中,然后再对XML文档进行操作,所以如果XML文档内容过大,不建议使用XmlDocument类,因为会消耗过多内存。
对于很大的XML文档,可以使用XmlReader类来读取。因为XmlReader使用Steam(流)来读取文件,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作,所以不会对内存造成太大的消耗。
使用XmlDocument读取XML,并遍历根节点下的所有子节点,将XmlNode节点转为XmlElement进行处理。
1、通过继承关系XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知XmlElement是XmlNode的子类。我们知道子类继承了父类所有的属性和方法,因此,XmlNode所拥有的方法和属性,在XmlElement类中也是可以使用的。
2、XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。但是XmlElement专门指的就是元素节点。
代码如下(示例):
// 采用XmlDocument操作XML
XmlDocument doc = new XmlDocument();
doc.Load(@"Monster-S17-2-2.xml");
// 获取根节点
XmlNode root = doc.SelectSingleNode("MonsterList");
// 获取根节点下的所有子节点
XmlNodeList child = root.ChildNodes;
// 循环遍历修改XML文件
foreach (XmlNode children in child)
{
// 得到web节点的所有子节点
XmlElement xe = (XmlElement)children;//将节点转换一下类型
SetXml(xe, "MaxLife",5);
SetXml(xe, "DamageMin", 3.5f);
SetXml(xe, "DamageMax", 2.5f);
SetXml(xe, "DamageMax", 2.5f);
SetXml(xe, "ElementalDefense", 6);
SetXml(xe, "ElementalDamageMin", 1.6f);
SetXml(xe, "ElementalDamageMax", 1.6f);
}
// 保存修改
doc.Save(@"Monster-S17-2-3.xml");
public static void SetXml(XmlElement xe, string node,float times)
{
string sMaxlife = xe.GetAttribute(node);
int nodeData = int.Parse(sMaxlife);
nodeData = (int)(nodeData * times);
xe.SetAttribute(node, nodeData.ToString());
}
第一次写博客,以后想将学习到的东西都记录下来
当笔记去用。