標籤:des style blog http io color ar os for
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;namespace XmlTest{ class Program { //第一種方案 xml資料流 static void ReadOrder() { XmlReaderSettings settings = new XmlReaderSettings(); // 控制解析和驗證過程 settings.IgnoreWhitespace = true; // 忽略空白地區 settings.IgnoreComments = true; // 忽略注釋 settings.ConformanceLevel = ConformanceLevel.Document; // 是否只具有一個根節點 using (XmlReader reader = XmlReader.Create("Sample.xml", settings)) //開啟檔案 { while (reader.Read()) //xml流單位為XMNL節點並且是單向的,每次調用read()都會使節點指向下一個位置,如果為false表示檔案結束 { Console.WriteLine(new string(‘ ‘, reader.Depth * 2)); //深度 Console.WriteLine(reader.NodeType); //節點類型,參考XmlNodeType結構, switch (reader.NodeType) { case XmlNodeType.Element: //元素(例如,<item>)。 case XmlNodeType.EndElement: //末尾元素標記(例如,</item>)。 Console.WriteLine(reader.Name); break; case XmlNodeType.Text: //節點的常值內容。 case XmlNodeType.Comment: //注釋(例如,<!-- my comment -->)。 case XmlNodeType.Attribute: //屬性 Console.WriteLine(reader.Value); break; } Console.WriteLine("================================"); } } } static void readtest() { XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreWhitespace = true; using (XmlReader reader = XmlReader.Create("Sample.xml", settings)) { string str = ""; //檢查當前節點是否是內容(非空白文本、CDATA、Element、EndElement、EntityReference 或 EndEntity)節點,如果此節點不是內容節點,則讀取器向前跳至下一個內容節點或檔案結尾。 它跳過以下類型的節點:ProcessingInstruction、DocumentType、Comment、Whitespace 或 SignificantWhitespace。 reader.MoveToContent(); //檢查當前內容節點是否為具有給定 System.Xml.XmlReader.Name 的元素並將讀取器推進到下一個節點。 reader.ReadStartElement("OpenNI"); Console.WriteLine(reader["id"]); //當在衍生類別中被重寫時,移動到具有指定 System.Xml.XmlReader.Name 的屬性。 reader.MoveToAttribute("name"); //將當前位置的常值內容作為 System.String 對象讀取。 Console.WriteLine(reader.ReadContentAsString()); reader.MoveToAttribute("id"); Console.WriteLine(reader.ReadContentAsString()); //讀取屬性後,節點位於Attribute,通過查看NoteType可以進行如下方式進行處理: //第一種方式: //reader.ReadStartElement(); //str = reader.ReadElementContentAsString("price", ""); //Console.WriteLine(str); //reader.ReadEndElement(); //第二種方式: //當在衍生類別中被重寫時,移動到包含當前屬性節點的元素。 reader.MoveToElement(); str = reader.ReadElementContentAsString("title", ""); Console.WriteLine(str); reader.ReadStartElement("Licenses"); //檢查指定的本地名稱和命名空間 URI 與當前元素的本地名稱和命名空間 URI 是否匹配,然後讀取當前元素,並將內容作為 System.String str = reader.ReadElementContentAsString("price", ""); Console.WriteLine(str); reader.ReadEndElement(); reader.ReadEndElement(); } } static void writetest(string filename) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = false; using (XmlWriter writer = XmlWriter.Create(filename, settings)) { //起始元素 writer.WriteStartElement("book"); //寫屬性 writer.WriteAttributeString("name","the art of code"); writer.WriteAttributeString("time", DateTime.Now.ToString()); //節點1 writer.WriteElementString("name","the art of code"); //節點2 writer.WriteStartElement("time"); writer.WriteValue(DateTime.Now); writer.WriteEndElement(); //結束“book”節點 writer.WriteEndElement(); } } //==========================================================第二種方案 static void WriteXmlDoc(String filename) { XmlDocument xml = new XmlDocument(); //添加聲明 XmlDeclaration xmldecl = xml.CreateXmlDeclaration("1.0", "gb2312", null); xml.AppendChild(xmldecl); //建立根節點 XmlElement root = xml.CreateElement("root"); xml.AppendChild(root); //建立屬性 XmlAttribute id = xml.CreateAttribute("id"); id.Value = "1234"; //建立時間屬性 XmlAttribute time = xml.CreateAttribute("time"); time.Value = DateTime.Now.ToString(); //建立元素 XmlElement name = xml.CreateElement("name"); name.AppendChild(xml.CreateTextNode("the art of code")); XmlElement author = xml.CreateElement("author"); author.AppendChild(xml.CreateTextNode("s.b")); XmlElement book = xml.CreateElement("book"); book.AppendChild(name); book.AppendChild(author); //根節點添加屬性 root.Attributes.Append(id); root.Attributes.Append(time); //設定屬性 root.SetAttribute("num", "10000"); //跟節點添加子節點 root.AppendChild(book); xml.Save(filename); } static void ReadXmlDoc(string filename) { XmlDocument xml = new XmlDocument(); xml.Load(filename); //獲得屬性 Console.WriteLine(xml.DocumentElement.Attributes["time"].Value); //遍曆子節點 if (xml.DocumentElement.HasChildNodes) { XmlNodeList list = xml.DocumentElement.ChildNodes; foreach (XmlNode it in list) { Console.WriteLine(it.InnerXml); } } } static void Main(string[] args) { //ReadOrder(); // readtest();// writetest("test.xml"); WriteXmlDoc("doc.xml"); ReadXmlDoc("doc.xml"); Console.Read(); } }}
細雨標記: 細雨淅淅
C# Xml檔案操作,解釋見注釋