C#-XML-文件操作.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XML 文件 操作
- 资源描述:
-
C#读写XML(一) public void writer() { XmlTextWriter xtw = new XmlTextWriter(Server.MapPath("~/test1.xml"), System.Text.Encoding.UTF8); xtw.WriteStartDocument(); xtw.WriteStartElement("Root"); for (int i = 0; i < 3; i++) { xtw.WriteStartElement("img"); xtw.WriteAttributeString("width", "400"); xtw.WriteAttributeString("height", "266"); xtw.WriteEndElement(); } xtw.WriteEndElement(); xtw.WriteEndDocument(); xtw.Close(); } System.Xml.XmlDocument dom = new System.Xml.XmlDocument(); dom.Load("test.xml");//转载xml System.Xml.XmlNodeList xnl = dom.GetElementsByTagName("sheng");//获取所有sheng节点 foreach (System.Xml.XmlNode node in xnl) { List<System.Xml.XmlNode> list = new List<System.Xml.XmlNode>(); foreach (System.Xml.XmlNode node2 in node.ChildNodes) //查找所有dian节点 { if (node2.Name == "dian") list.Add(node2); } foreach (System.Xml.XmlNode node2 in list) //删除节点 { node.RemoveChild(node2); } } dom.Save("out.xml"); 下表给出了这些方法的名字和描述情况: 方法描述: WriteStartDocument书写版本为“1.0”的 XML 声明 WriteEndDocument关闭任何打开的元素或属性 Close关闭流 WriteDocType写出具有指定名称和可选属性的 DOCTYPE 声明 WriteStartElement写出指定的开始标记 WriteEndElement关闭一个元素 WriteFullEndElement关闭一个元素,并且总是写入完整的结束标记 WriteElementString写出包含字符串值的元素 WriteStartAttribute书写属性的起始内容 WriteEndAttribute关闭上一个 WriteStartAttribute 调用 WriteRaw手动书写原始标记 WriteString书写一个字符串 WriteAttributeString出具有指定值的属性 WriteCData写出包含指定文本的 <![CDATA[...]]> 块 WriteComment写出包含指定文本的注释 <!--...--> WriteWhiteSpace写出给定的空白 WriteProcessingInstruction写出在名称和文本之间带有空格的处理指令,如下所示:<?name text?> 如果你对于XML十分熟悉,那么你一定能很好的理解上面的这些方法。 下面我们将给出一个例子,在这个例子中,我们将先创建一个文档,添加一些元素,然后关闭这个文档。添加了元素后你还可以添加子元素,属性和其他内容。 下面的代码就是这样的一个例子,它创建了一个文件名为title的XML文件。 using System; using System.IO; using System.Xml; public class Sample { public static void Main() { XmlTextWriter writer = new XmlTextWriter("titles.xml", null); //写入根元素 writer.WriteStartElement("items"); //加入子元素 writer.WriteElementString("title", "Unreal Tournament 2003"); writer.WriteElementString("title", "C&C: Renegade"); writer.WriteElementString("title", "Dr. Seuss's ABC"); //关闭根元素,并书写结束标签 writer.WriteEndElement(); //将XML写入文件并且关闭 XmlTextWriter writer.Close(); } } 如果你编译并且执行上面的代码,你将创建这个XML文件,文件中包含如下内容: <items> <title>Unreal Tournament 2003</title> <title> C&C: Renegade</title> <title>Dr. Seuss's ABC </title> </items> 上面的代码创建了一个名为writer的XmlTextWriter对象。当这个对象被创建时,它被关联到一个名为titles.xml的文件。接着,程序创建了一个叫做items的根属性,WriteStartElement方法创建了这个属性的开始标签。接下来,程序调用了WriteElementString方法创建了三个子元素。从上面的代码你还可以看到,这个方法使用第一个参数(在上面的程序中是title)作为元素的标签;使用第二个参数作为元素的值。 当你添加了所有的元素后,你需要关闭根元素。这时你可以调用WriteEndElement方法关闭那个最近被打开的元素;在本例中,这个最近被打开的元 素就是根元素。当所有的数据都已经写好,根元素也已经关闭时,你可以将信息传送给你的XmlTextWriter。这意味着这时候你可以调用Close方 法关闭它了。 上面的代码相对十分的简单,下面我们看一个使用了XmlTextWriter类中更多方法,功能更加完善的例子。 using System; using System.IO; using System.Xml; public class Sample { public static void Main() { XmlTextWriter writer = new XmlTextWriter("myMedia.xml", null); //使用自动缩进便于阅读 writer.Formatting = Formatting.Indented; //书写根元素 writer.WriteStartElement("items"); //开始一个元素 writer.WriteStartElement("item"); //向先前创建的元素中添加一个属性 writer.WriteAttributeString("rating", "R"); //添加子元素 writer.WriteElementString("title", "The Matrix"); writer.WriteElementString("format", "DVD"); //关闭item元素 writer.WriteEndElement(); // 关闭元素 //在节点间添加一些空格 writer.WriteWhitespace("n"); //使用原始字符串书写第二个元素 writer.WriteRaw("<item>" + "<title>BloodWake</title>" + "<format>XBox</format>" + "</item>"); //使用格式化的字符串书写第三个元素 writer.WriteRaw("n <item>n" + " <title>Unreal Tournament 2003</title>n" + " <format>CD</format>n" + " </item>n"); // 关闭根元素 writer.WriteFullEndElement(); //将XML写入文件并关闭 writer writer.Close(); } } 上面代码编译运行后将得到myMedia.xml文件,文件的内容为: <items> <item rating="R"> <title>The Matrix</title> <format>DVD</format> </item> <item> <title>BloodWake</title> <format>XBox</format> </item> <item> <title>Unreal Tournament 2003</title> <format>CD</format> </item> 写的一个XML操作类,包括读取/插入/修改/删除。 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml; namespace PuTianCheng { /// <summary> /// XmlHelper 的摘要说明 /// </summary> public class XmlHelper { public XmlHelper() { } /// <summary> /// 读取数据 /// </summary> /// <param name="path">路径</param> /// <param name="node">节点</param> /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param> /// <returns>string</returns> /************************************************** * 使用示列: * XmlHelper.Read(path, "/Node", "") * XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute") ************************************************/ public static string Read(string path, string node, string attribute) { string value = ""; try { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode xn = doc.SelectSingleNode(node); value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value); } catch { } return value; } /// <summary> /// 插入数据 /// </summary> /// <param name="path">路径</param> /// <param name="node">节点</param> /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param> /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param> /// <param name="value">值</param> /// <returns></returns> /************************************************** * 使用示列: * XmlHelper.Insert(path, "/Node", "Element", "", "Value") * XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value") * XmlHelper.Insert(path, "/Node", "", "Attribute", "Value") ************************************************/ public static void Insert(string path, string node, string element, string attribute, string value) { try { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode xn = doc.SelectSingleNode(node); if (element.Equals("")) { if (!attribute.Equals("")) { XmlElement xe = (XmlElement)xn; xe.SetAttribute(attribute, value); } } else { XmlElement xe = doc.CreateElement(element); if (attribute.Equals("")) xe.InnerText = value; else xe.SetAttribute(attribute, value); xn.AppendChild(xe); } doc.Save(path); } catch { } } /// <summary> /// 修改数据 /// </summary> /// <param name="path">路径</param> /// <param name="node">节点</param> /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param> /// <param name="value">值</param> /// <returns></returns> /************************************************** * 使用示列: * XmlHelper.Insert(path, "/Node", "", "Value") * XmlHelper.Insert(path, "/Node", "Attribute", "Value") ************************************************/ public static void Update(string path, string node, string attribute, string value) { try { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode xn = doc.SelectSingleNode(node); XmlElement xe = (XmlElement)xn; if (attribute.Equals("")) xe.InnerText = value; else xe.SetAttribute(attribute, value); doc.Save(path); } catch { } } /// <summary> /// 删除数据 /// </summary> /// <param name="path">路径</param> /// <param name="node">节点</param> /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param> /// <param name="value">值</param> /// <returns></returns> /************************************************** * 使用示列: * XmlHelper.Delete(path, "/Node", "") * XmlHelper.Delete(path, "/Node", "Attribute") ************************************************/ public static void Delete(string path, string node, string attribute) { try { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode xn = doc.SelectSingleNode(node); XmlElement xe = (XmlElement)xn; if (attribute.Equals("")) xn.ParentNode.RemoveChild(xn); else xe.RemoveAttribute(attribute); doc.Save(path); } catch { } } } } ================================================== XmlFile.xml: <?xml version="1.0" encoding="utf-8"?> <Root /> ================================================== 使用方法: string xml = Server.MapPath("XmlFile.xml"); //插入元素 //XmlHelper.Insert(xml, "/Root", "Studio", "", ""); //插入元素/属性 //XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "小路工作室"); //XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "丁香鱼工作室"); //XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "谱天城工作室"); //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Master", "", "红尘静思"); //插入属性 //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='小路工作室']", "", "Url", " //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "", "Url", " //XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "", "Url", " //修改元素值 //XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']/Master", "", "RedDust"); //修改属性值 //XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Url", " //XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Name", "PuTianCheng Studio"); //读取元素值 //Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site/Master", "") + "</div>"); //读取属性值 //Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site", "Url") + "</div>"); //读取特定属性值 //Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "Url") + "</div>"); //删除属性 //XmlHelper.Delete(xml, "/Root/Studio/Site[@Name='小路工作室']", "Url"); //删除元素 //XmlHelper.Delete(xml, "/Root/Studio", ""); Xml中SelectSingleNode方法中的xpath用法[转] 转自: 最常见的XML数据类型有:Element, Attribute,Comment, Text. Element, 指形如<Name>Tom<Name>的节点。它可以包括:Element, Text, Comment, ProcessingInstruction, CDATA, and EntityReference. Attribute, 指在<Employee >中的粗体部分。 Comment,指形如:<!-- my comment --> 的节点。 Text,指在<Name>Tom<Name>的粗体部分。 在XML中,可以用XmlNode对象来参照各种XML数据类型。 2.1 查询已知绝对路径的节点(集) objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee”) 或者 objNodeList = objNode.SelectNodes(“/Company/Department/Employees/Employee”) 以上两种方法可返回一个NodeList对象,如果要返回单个节点可使用SelectSingleNode方法,该方法如果查询到一个或多个节点,返回第一个节点;如果没有查询的任何节点返回 Nothing。例如: objNode = objNode.SelectSingleNode(“/Company/Department/Employees/Employee”) If Not (objNode is Nothing) then ‘- Do process End If 2.2 查询已知相对路径的节点(集) 可使用类似于文件路径的相对路径的方式来查询XML的数据 objNode = objDoc.SelectSingleNode(“Company/Department”) objNodeList = objNode.SelectNodes(“../Department) objNode = objNode.SelectNode(“Employees/Employee”) 2.3 查询已知元素名的节点(集) 在使用不规则的层次文档时,由于不知道中间层次的元素名,可使用//符号来越过中间的节点,查询其子,孙或多层次下的其他所有元素。例如: objNodeList = objDoc.SelectNodes(“Company//Employee”) 2.4 查询属性(attribute)节点 以上的各种方法都返回元素(element)节点(集),返回属性(attribute),只需要采用相应的方法,在属性名前加一个@符号即可,例如: objNodeList = objDoc.SelectNodes(“Company/Department/Employees/Employee/@id”) objNodeList = objDoc.SelectNodes(“Company//@id”) 2.5 查询Text节点 使用text()来获取Text节点。 objNode = objDoc.SelectSingleNode(“Company/Department/Deparmt_Name/text()”) 2.6 查询特定条件的节点 使用[]符号来查询特定条件的节点。例如: a. 返回id号为 10102的Employee节点 objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee[@id=’10102’]”) b. 返回Name为Zhang Qi的Name 节点 objNode = objDoc.SelectSingleNode(“Company/Department/Employees/Employee/Name[text()=’Zhang Qi’]”) c. 返回部门含有职员22345的部门名称节点 objNode = objDoc.SelectSingleNode("Company/Department[Employees/Employee/@id='22345']/Department_Name") 2.7 查询多重模式的节点 使用 | 符号可以获得多重模式的节点。例如: objNodeList = objDoc.SelectNodes(“Company/Department/Department_Name | Company/Department/Manager”) 2.8 查询任意子节点 使用*符号可以返回当前节点的所有子节点。 objNodeList = objDoc.SelectNodes(“Company/*/Manager) 或者 objNodeList = objNode.ChildNodes 3 XML数据的编辑 3.1 增加一个元素的属性(attribute)节点 Dim objNodeAttr As XmlNode objNodeAttr = objDoc.CreateAttribute("id", Nothing) objNodeAttr.InnerXml = "101" objNode.Attributes.Append(objNodeAttr) 3.2 删除一个元素的属性 objNode.Attributes.Remove(objNodeAttr) 3.3 增加一个子元素(Element) Dim objNodeChild As XmlNode objNodeChild = objDoc.CreateElement(Nothing, "ID", Nothing) objNodeChild.InnerXml = "101" objNode.AppendChild(objNodeChild) 3.4 删除一个子元素 objNode.RemoveChild(objNodeChild) 3.5 替换一个子元素 objNOde.ReplaceChild(newChild,oldChild) 4 参考数据 <?xml version="1.0" encoding="UTF-8"?> <Company> <Department > <Department_Name>Cai WuBu</Department_Name> <Manager>Zhang Bin</Manager> <Employees> <Employee > <Employee_ID>12345</Employee_ID> <Name>Zhang Bin</Name> <Gender>male</Gender> </Employee> <Employee > <Employee_ID>10101</Employee_ID> <Name>Zhang QI</Name> <Gender>female</Gender> </Employee> <Employee > <Employee_ID>10102</Employee_ID> <Name>Zhang Xia</Name> <Gender>male</Gender> </Employee> <Employee > <展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




C#-XML-文件操作.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/11739272.html