日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 简单的XML读取修改写入

發(fā)布時間:2023/12/18 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 简单的XML读取修改写入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
??

    XML概念
    Root XML根節(jié)點,只能且必須有一個(以上為LinkLibrary)
    Element 節(jié)點元素(如Link)
    Attribute 節(jié)點屬性(如Cat, Url, Desc)
    Content 內(nèi)容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)節(jié)點

    System.Xml空間
    以下類適合快速流式讀寫XML文件(注:DOM適合隨機讀寫)
    XmlReader, XmlWriter,
    XmlTextReader, XmlTextWriter
    XmlValidatingReader, XmlValidatingWriter 添加了DTD和模式驗證,因此提供了數(shù)據(jù)的有效性驗證
    XmlNodeReader, XmlNodeWriter 把XmlNode作為其源

    節(jié)點類型(public enum XmlNodeType)
    XmlDeclaration XML 聲明(例如,<?xml version="1.0"?>)。
    Attribute 屬性(例如,id="123")。
    CDATA CDATA 節(jié)(例如,<![CDATA[my escaped text]]>)。
    Comment 注釋(例如,<!-- my comment -->)
    Document 作為文檔樹的根的文檔對象提供對整個 XML 文檔的訪問。
    DocumentFragment 文檔片段。
    DocumentType 由以下標記指示的文檔類型聲明(例如,<!DOCTYPE...>)。
    Element 元素(例如,<item>)。
    EndElement 末尾元素標記(例如,</item>)。
    Entity 實體聲明(例如,<!ENTITY...>)。
    EndEntity 由于調(diào)用 ResolveEntity 而使 XmlReader 到達實體替換的末尾時返回。
    EntityReference 實體引用(例如,&num;)。
    None 如果未調(diào)用 Read 方法,則由 XmlReader 返回。
    Notation 文檔類型聲明中的表示法(例如,<!NOTATION...>)。
    ProcessingInstruction 處理指令(例如,<?pi test?>)。
    SignificantWhitespace 混合內(nèi)容模型中標記間的空白或 xml:space="preserve" 范圍內(nèi)的空白。
    Text 節(jié)點的文本內(nèi)容。
    Whitespace 標記間的空白。


    ?------------------------------------------------------------------------
    使用XmlTextWriter快速寫入
    ------------------------------------------------------------------------
    開閉
    XmlTextWriter writer = new XmlTextWriter(@"c:/mywriter.xml", null);
    writer.Close();

    起止XML文檔 (<?xml version="1.0"?>
    writer.WriteStartDocument();
    writer.EndDocument();

    聲明XML格式
    writer.Formatting = Formatting.Indented;
    writer.Indentation = 縮進字符數(shù)
    writer.IndentChar = 縮進字符
    writer.QuoteChar = 單引號|雙引號

    輸出注釋 (<!-- comment text -->)
    writer.WriteComment("comment text");

    輸出元素 (<Element>ElementVal</Element>)
    writer.WriteElementString("Element", "ElementVal");
    或者
    writer.StartElement("Element");
    writer.WriteString("ElementVal");
    writer.EndElement();

    輸出元素屬性 (<Element Property="PropertyVal">ElementVal</Element>)
    writer.StartElement("Element");
    writer.WriteAttributeString("Property", "PropertyVal");
    writer.WriteString("ElementVal");
    writer.EndElement();

    輸出CDATA (<!CDATA>....</CDATA>
    WriteCData("....")

    輸出字符緩沖區(qū)文本
    WriteChars(char[], startPos, length)

    ?

    ??已知有一個XML文件(bookstore.xml)如下:

    ?

    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    ? <book genre="fantasy" ISBN="2-3631-4">
    ??? <title>Oberon's Legacy</title>
    ??? <author>Corets, Eva</author>
    ??? <price>5.95</price>
    ? </book>
    </bookstore>


    ?
    ? 1、往<bookstore>節(jié)點中插入一個<book>節(jié)點:

    ?

    ?? XmlDocument xmlDoc=new XmlDocument();
    ?? xmlDoc.Load("bookstore.xml");
    ?? XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
    ?? XmlElement xe1=xmlDoc.CreateElement("book");//創(chuàng)建一個<book>節(jié)點
    ?? xe1.SetAttribute("genre","李贊紅");//設(shè)置該節(jié)點genre屬性
    ?? xe1.SetAttribute("ISBN","2-3631-4");//設(shè)置該節(jié)點ISBN屬性
    ?
    ?? XmlElement xesub1=xmlDoc.CreateElement("title");
    ?? xesub1.InnerText="CS從入門到精通";//設(shè)置文本節(jié)點
    ?? xe1.AppendChild(xesub1);//添加到<book>節(jié)點中
    ?? XmlElement xesub2=xmlDoc.CreateElement("author");
    ?? xesub2.InnerText="候捷";
    ?? xe1.AppendChild(xesub2);
    ?? XmlElement xesub3=xmlDoc.CreateElement("price");
    ?? xesub3.InnerText="58.3";
    ?? xe1.AppendChild(xesub3);
    ?
    ?? root.AppendChild(xe1);//添加到<bookstore>節(jié)點中
    ?? xmlDoc.Save("bookstore.xml");


    ? //================
    ? 結(jié)果為:

    ?

    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    ? <book genre="fantasy" ISBN="2-3631-4">
    ??? <title>Oberon's Legacy</title>
    ??? <author>Corets, Eva</author>
    ??? <price>5.95</price>
    ? </book>
    ? <book genre="李贊紅" ISBN="2-3631-4">
    ??? <title>CS從入門到精通</title>
    ??? <author>候捷</author>
    ??? <price>58.3</price>
    ? </book>
    </bookstore>


    2、修改節(jié)點:將genre屬性值為“李贊紅“的節(jié)點的genre值改為“update李贊紅”,將該節(jié)點的子節(jié)點<author>的文本修改為“亞勝”。

    ?

    ??? XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//獲取bookstore節(jié)點的所有子節(jié)點
    ?? foreach(XmlNode xn in nodeList)//遍歷所有子節(jié)點
    ?? {
    ??? XmlElement xe=(XmlElement)xn;//將子節(jié)點類型轉(zhuǎn)換為XmlElement類型
    ??? if(xe.GetAttribute("genre")=="李贊紅")//如果genre屬性值為“李贊紅”
    ??? {
    ???? xe.SetAttribute("genre","update李贊紅");//則修改該屬性為“update李贊紅”
    ?
    ???? XmlNodeList nls=xe.ChildNodes;//繼續(xù)獲取xe子節(jié)點的所有子節(jié)點
    ???? foreach(XmlNode xn1 in nls)//遍歷
    ???? {
    ????? XmlElement xe2=(XmlElement)xn1;//轉(zhuǎn)換類型
    ????? if(xe2.Name=="author")//如果找到
    ????? {
    ?????? xe2.InnerText="亞勝";//則修改
    ?????? break;//找到退出來就可以了
    ????? }
    ???? }
    ???? break;
    ??? }
    ?? }
    ?
    ?? xmlDoc.Save("bookstore.xml");//保存。



    ? //=================

    ? 最后結(jié)果為:

    ?

    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    ? <book genre="fantasy" ISBN="2-3631-4">
    ??? <title>Oberon's Legacy</title>
    ??? <author>Corets, Eva</author>
    ??? <price>5.95</price>
    ? </book>
    ? <book genre="update李贊紅" ISBN="2-3631-4">
    ??? <title>CS從入門到精通</title>
    ??? <author>亞勝</author>
    ??? <price>58.3</price>
    ? </book>
    </bookstore>


    ?
    ? 3、刪除 <book genre="fantasy" ISBN="2-3631-4">節(jié)點的genre屬性,刪除 <book genre="update李贊紅" ISBN="2-3631-4">節(jié)點。

    ?

    XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
    ?
    ?? foreach(XmlNode xn in xnl)
    ?? {
    ??? XmlElement xe=(XmlElement)xn;


    ?? if(xe.GetAttribute("genre")=="fantasy")
    ??? {
    ???? xe.RemoveAttribute("genre");//刪除genre屬性
    ??? }
    ??? else if(xe.GetAttribute("genre")=="update李贊紅")
    ??? {
    ???? xe.RemoveAll();//刪除該節(jié)點的全部內(nèi)容
    ??? }
    ?? }
    ?? xmlDoc.Save("bookstore.xml");

    ? //====================
    ?
    ? 最后結(jié)果為:

    ?<?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    ? <book ISBN="2-3631-4">
    ??? <title>Oberon's Legacy</title>
    ??? <author>Corets, Eva</author>
    ??? <price>5.95</price>
    ? </book>
    ? <book>
    ? </book>
    </bookstore>

    ?
    ? 4、顯示所有數(shù)據(jù)。

    ?

    ?XmlNode xn=xmlDoc.SelectSingleNode("bookstore");
    ?
    ?? XmlNodeList xnl=xn.ChildNodes;
    ??
    ?? foreach(XmlNode xnf in xnl)
    ?? {
    ??? XmlElement xe=(XmlElement)xnf;
    ??? Console.WriteLine(xe.GetAttribute("genre"));//顯示屬性值
    ??? Console.WriteLine(xe.GetAttribute("ISBN"));
    ?
    ??? XmlNodeList xnf1=xe.ChildNodes;
    ??? foreach(XmlNode xn2 in xnf1)
    ??? {
    ???? Console.WriteLine(xn2.InnerText);//顯示子節(jié)點點文本
    ??? }
    ?? }

    ?

    ?

    ------------------------------------------------------------------------
    寫例程
    ------------------------------------------------------------------------

    [c-sharp] view plaincopy print?
  • XmlTextWriter?writer?=?new?XmlTextWriter?(filename,?null);??
  • //Use?indenting?for?readability.??
  • writer.Formatting?=?Formatting.Indented;??
  • //xml聲明(Write?the?XML?delcaration.?)??
  • writer.WriteStartDocument();??
  • //預(yù)處理指示(Write?the?ProcessingInstruction?node.)??
  • String?PItext="type="text/xsl"?href="book.xsl"";??
  • writer.WriteProcessingInstruction("xml-stylesheet",?PItext);??
  • //文檔類型(Write?the?DocumentType?node.)??
  • writer.WriteDocType("book",?null?,?null,?"<!ENTITY?h?"hardcover">");??
  • //注釋(Write?a?Comment?node.)??
  • writer.WriteComment("sample?XML");??
  • //根元素(Write?a?root?element.)??
  • writer.WriteStartElement("book");??
  • //屬性值(Write?the?genre?attribute.)??
  • writer.WriteAttributeString("genre",?"novel");??
  • //屬性值(Write?the?ISBN?attribute.)??
  • writer.WriteAttributeString("ISBN",?"1-8630-014");??
  • //Write?the?title.??
  • writer.WriteElementString("title",?"The?Handmaid"s?Tale");??
  • //Write?the?style?element.??
  • writer.WriteStartElement("style");??
  • writer.WriteEntityRef("h");??
  • writer.WriteEndElement();???
  • //文本元素節(jié)點(Write?the?price.)??
  • writer.WriteElementString("price",?"19.95");??
  • //[CDATA]??
  • writer.WriteCData("Prices?15%?off!!");??
  • //Write?the?close?tag?for?the?root?element.??
  • writer.WriteEndElement();??
  • writer.WriteEndDocument();??
  • //Write?the?XML?to?file?and?close?the?writer.??
  • writer.Flush();??
  • writer.Close();???
  • //Load?the?file?into?an?XmlDocument?to?ensure?well?formed?XML.??
  • XmlDocument?doc?=?new?XmlDocument();??
  • //Preserve?white?space?for?readability.??
  • doc.PreserveWhitespace?=?true;??
  • //Load?the?file.??
  • doc.Load(filename);???
  • //Display?the?XML?content?to?the?console.??
  • Console.Write(doc.InnerXml);???
  • 總結(jié)

    以上是生活随笔為你收集整理的C# 简单的XML读取修改写入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。