代码修改XML标签

一、问题描述:

一个XML文档,名为OriginXml.xml,示例数据如下:

  张三 18 <语文>79 <数学>90 李四 20 <语文>88 <数学>64   

 

现需要在两个文档间转换,需要将标签student修改为,其余子元素保持不变,修改的文档存入ModifyXML.xml中。

 

 

 

 

二、问题分析

    修改标签名称,实质上是对元素重命名。元素在DTDXML Schema中定义,因此修改元素名称必须修改DTDXML Schema,否则修改后的文档不是“数据有效”的。如果没有DTDXML Schema的情况下,则要简单一些。可以直接修改或在DOM模型中修改。

    直接修改就是将XML文档视为普通的文本流,读入后直接进行字符串替换操作。但是,如果内嵌DTDXML Schema定义,则不可直接替换。替换过程中,如果元素具有限定名称,则最好使用正则表达式查找、替换。

    DOM模型修改是通过读入XML文档后,根据要求解析并重构节点。相对于SAX来说,DOM是可编辑的,但并不意味着节点名称可更改。一旦创建节点后,名称即不可修改。所以只能创建新节点,将原有节点复制过去并作必要的修改,最后替换节点。

 

 

 

 

三、解决问题

    以下描述了假定没有DTDXML Schema的情况下,修改元素标签的两种方法 

 

 

(一)直接修改

代码如下:
StreamReader sr = new StreamReader("OriginXml.xml"); string str = sr.ReadToEnd(); sr.Close(); str=str.Replace("student", "pStudent"); //如果有限定名称,最好用正则表达式查询、替换 StreamWriter sw = new StreamWriter("ModifyXml.xml"); sw.Write(str); sw.Flush(); sw.Close();

(二)使用DOM模型修改
XmlDocument doc = new XmlDocument(); doc.Load("OriginXml.xml"); XmlElement oldElement,newElement; oldElement = (XmlElement)doc.GetElementsByTagName("student")[0]; //查找元素 while(oldElement !=null) { newElement = doc.CreateElement("pStudent"); //创建新元素 if (oldElement.Attributes .Count >0) //复制属性 { foreach (XmlNode attrNode in oldElement.Attributes) { newElement.SetAttribute(attrNode.Name, attrNode.Value); } newElement .InnerXml =oldElement.InnerXml ; //复制子节点 doc.DocumentElement.ReplaceChild(newElement,oldElement); //替换 oldElement = (XmlElement)doc.GetElementsByTagName("book")[0]; //查找下一个元素 } doc.Save("ModifyXml.xml");

 

 

 

 

 

你可能感兴趣的:(XML,&,WebServices)