.NET下如何完成xml文檔的讀寫操作

 一  .Net框架中與XML有關的命名空間

System.Xml
包含了一些和XML文檔的讀寫操作相關的類,它們分別是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter、XmlTextWriter 以及 XmlNode(它的子類包括:XmlDocument、XmlDataDocument、XmlDocumentFragment)等類。

System.Xml.Schema
包含了和XML模式相關的類,這些類包括XmlSchema、XmlSchemaAll、XmlSchemaXPath以及XmlSchemaType等類。

System.Xml.Serialization
包含了和XML文檔的序列化和反序列化操作相關的類。
序列化:將XML格式的數據轉化爲流格式的數據,並能在網絡中傳輸;
反序列化:完成相反的操作,即將流格式的數據還原成XML格式的數據。

System.Xml.Xpath
包含了XPathDocument、XPathExression、XPathNavigator以及XPathNodeIterator等類,這些類能完成XML文檔的導航功能。
(在XPathDocument類的協助下,XPathNavigator類能完成快速的XML文檔導航功能,該類爲程序員提供了許多Move方法以完成導航功能。)

System.Xml.Xsl
完成XSLT的轉換功能。

二  寫XML文檔的方法

用XmlWriter類實現寫操作,該類包含了寫XML文檔所需的方法和屬性,它是XmlTextWriter類和XmlNodeWriter類的基類。

寫操作的有些方法是成對出現的,比如你要寫入一個元素,首先調用WriteStartElement方法—>寫入實際內容—>調用WriteEndElement方法結束。

下面通過其子類 XmlTextWriter 來說明如何寫XML文檔。

XmlTextWriter textWriter = New XmlTextWriter("C:\\myXmFile.xml", null);

在創建完對象後,我們調用WriterStartDocument方法開始寫XML文檔;
在完成寫工作後,就調用WriteEndDocument結束寫過程,並調用Close方法將它關閉。

在寫的過程中,我們可以:
調用WriteComment方法來添加說明;
通過調用WriteString方法來添加一個字符串;
通過調用WriteStartElement和WriteEndElement方法對來添加一個元素;
通過調用WriteStartAttribute和WriteEndAttribute方法對來添加一個屬性;
通過調用WriteNode方法來添加整的一個節點;
其它的寫的方法還包括WriteProcessingInstruction和WriteDocType等等。

下面的示例介紹如何具體運用這些方法來完成XML文檔的寫工作。

using System;
using System.Xml;  

namespace WriteXML
{
 
class Class1
 
{
  
static void Main( string[] args )
  
{
   
try
   
{
    
// 創建XmlTextWriter類的實例對象
    XmlTextWriter textWriter = new XmlTextWriter("C:\\w3sky.xml"null);
    textWriter.Formatting 
= Formatting.Indented;

    
// 開始寫過程,調用WriteStartDocument方法
    textWriter.WriteStartDocument();  

    
// 寫入說明
    textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
    textWriter.WriteComment(
"w3sky.xml in root dir");   

    
//創建一個節點
    textWriter.WriteStartElement("Administrator");
    textWriter.WriteElementString(
"Name""formble");
    textWriter.WriteElementString(
"site""w3sky.com");
    textWriter.WriteEndElement();
    
    
// 寫文檔結束,調用WriteEndDocument方法
    textWriter.WriteEndDocument();

    
// 關閉textWriter
    textWriter.Close();
   }

   
catch(System.Exception e)
   
{
    Console.WriteLine(e.ToString());
   }

  }


 }

}


三  讀XML文檔的方法

用XmlTextReader類的對象來讀取該XML文檔。在創建新對象的構造函數中指明XML文件的位置即可。

XmlTextReader textReader = new XmlTextReader("C:\\books.xml");

XmlTextReader 類中的屬性 NodeType 可以知道其節點的節點類型。通過與枚舉類型 XmlNodeType 中的元素的比較,可以獲取相應節點的節點類型並對其完成相關的操作。

枚舉類型 XmlNodeType 中包含了諸如XmlDeclaration、Attribute、CDATA、Element、Comment、Document、DocumentType、Entity、ProcessInstruction以及WhiteSpace等XML項的類型。

下面的示例是以讀取"books.xml"文件創建對象,通過該xml對象的Name、BaseURI、Depth、LineNumber等屬性來獲取相關信息,並顯示在控制檯中。(運用VS.net開發工具附帶的"books.xml"文件來作爲示例)

using System;
using System.Xml;  

namespace ReadXml
{
    
class Class1
    
{
        
static void Main( string[] args )
        
{
            
// 創建一個XmlTextReader類的對象並調用Read方法來讀取XML文件
            XmlTextReader textReader  = new XmlTextReader("C:\\books.xml");
            textReader.Read();
            
// 節點非空則執行循環體
            while ( textReader.Read() )
            
{
                
// 讀取第一個元素
                textReader.MoveToElement();
                Console.WriteLine(
"XmlTextReader Properties Test");
                Console.WriteLine(
"===================");  

                
// 讀取該元素的屬性並顯示在控制檯中
                Console.WriteLine("Name:" + textReader.Name);
                Console.WriteLine(
"Base URI:" + textReader.BaseURI);
                Console.WriteLine(
"Local Name:" + textReader.LocalName);
                Console.WriteLine(
"Attribute Count:" + textReader.AttributeCount.ToString());
                Console.WriteLine(
"Depth:" + textReader.Depth.ToString());
                Console.WriteLine(
"Line Number:" + textReader.LineNumber.ToString());
                Console.WriteLine(
"Node Type:" + textReader.NodeType.ToString());
                Console.WriteLine(
"Attribute Count:" + textReader.Value.ToString());
            }

        }

    }

}


四  運用XmlDocument類

XmlDocument類代表了XML文檔,它能完成與整個XML文檔相關的各類操作,同時和其相關的XmlDataDocument類也是非常重要的,值得深入研究。 該類包含了Load、LoadXml以及Save等重要的方法。

Load方法: 可以從一個字符串指定的XML文件或是一個流對象、一個TextReader對象、一個XmlReader對象導入XML數據。
LoadXml方法: 則完成從一個特定的XML文件導入XML數據的功能。
Save方法: 則將XML數據保存到一個XML文件中或是一個流對象、一個TextWriter對象、一個XmlWriter對象中。

下面的示例中,用到了XmlDocument類對象的LoadXml方法,它從一個XML文檔段中讀取XML數據並調用其Save方法將數據保存在一個文件中。

// 創建一個XmlDocument類的對象
XmlDocument doc = new XmlDocument();
doc.LoadXml((
"<Student type='regular' Section='B'><Name>Tommy Lex</Name></Student>"));

// 保存到文件中
doc.Save("C:\\student.xml");
 
// 還可以通過改變Save方法中參數,將XML數據顯示在控制檯中,方法如下: 
doc.Save(Console.Out);

下面的示例中,用到了一個XmlTextReader對象,通過它讀取"books.xml"文件中的XML數據。然後創建一個XmlDocument對象並載入XmlTextReader對象,這樣XML數據就被讀到XmlDocument對象中了。最後,通過該對象的Save方法將XML數據顯示在控制檯中。
 
XmlDocument doc = new XmlDocument();
// 創建一個XmlTextReader對象,讀取XML數據
XmlTextReader reader = new XmlTextReader("c:\\books.xml");
reader.Read();

// 載入XmlTextReader類的對象
doc.Load(reader);
// 將XML數據顯示在控制檯中
doc.Save(Console.Out);


五  附錄
books.xml 文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章