淺析C#操作XML處理指令(PI)
這里我們將介紹如何用C#操作XML處理指令(PI),XML文檔的應(yīng)用十分廣泛,使用C#操作XML處理指令,能起到事半功倍的效果。
什么是處理指令?
處理指令(Processing Instructions,PI)是用“ ?>”包圍的一種標(biāo)簽,用以描述特定應(yīng)用程序信息。XML文檔可以包含多個針對不同應(yīng)用程序的處理指令。處理指令由兩部分組成,target和value。target的角色類似于“名稱”,緊隨target之后的字符串就是value,value可以包含多個標(biāo)記。
那么Xml聲明是不是處理指令呢?答案是肯定的,XML聲明是一個特殊的處理指令,它之所以特殊是因為它的value格式是預(yù)先定義好的。另外一個常見的處理指令示例是外部樣式表。樣式表處理指令也擁有預(yù)先定義好格式的value值,它由一些偽屬性組成。為什么叫做“偽屬性”,這是因為它的value值看上去像是幾個正常的XML屬性,但事實上它們只是一個字符串而已。
然而處理指令value值的格式是開放的。處理指令并不是文檔數(shù)據(jù)的一部分,XML解析器并不會理會它的內(nèi)容,而是直接將它傳遞給客戶端應(yīng)用程序。
微軟Office套件中的InfoPath就是用了處理指令來指示Xml文件是否可以用InfoPath客戶端來查看。
而另一個處理指令,mso-infoPathSolution,則告訴InfoPath解決方案模板的位置。該模板包含了布局Xml文件的布局轉(zhuǎn)換信息、視圖的架構(gòu)信息已經(jīng)數(shù)據(jù)源信息。
那么在C#應(yīng)用程序中該如何操作包含處理指令的Xml文檔呢?
我們該如何處理和讀取XML文檔中已有的處理指令?首先,處理指令可以像文檔中的其他節(jié)點一樣被選出。XPath使用了謂詞(predicate )processing-instruction()來測試該節(jié)點是不是一個處理指令。
在System.XML命名空間中,有一個XmlProcessingInstruction類。當(dāng)你從Xml文檔中選出了一個節(jié)點后,就可以把返回的XMLNode對象轉(zhuǎn)換成這種類型,該類型提供了非常友好的接口來操作處理指令的value。想要讀取它的value,只需要訪問該對象的Value屬性即可。
想要改變處理指令的值,也只需要將新值賦給該對象的Value屬性。
想要在XML文檔中添加一個新的處理指令,可以使用XMLDocument類的CreateProcessingInstruction方法。然后再使用InsertBefore或InsertAfter方法來將這個XmlProcessingInstruction對象添加到XML文檔中。
想要從XML文檔中刪除已有的處理指令,首先選出該處理指令的XmlNode對象,但不需要將其轉(zhuǎn)換為XMLProcessingInstruction對象。然后使用XMLDocument類的RemoveChild方法就可以將其刪除。
下面的代碼包含了本文所提及的C#操作全部內(nèi)容:
- // Xml文件路徑
- string strPath = “path”
- // 加載Xml文檔內(nèi)容
- XmlDocument doc = new XmlDocument();
- doc.XmlResolver = null;
- doc.Load(strPath);
- // 顯示Xml文檔內(nèi)容
- Console.WriteLine(doc.InnerXml.ToString().Replace("><", ">\r\n\n<"));
- // 讀取Xml文檔的處理指令
- XmlProcessingInstruction pi = (XmlProcessingInstruction)doc.SelectSingleNode("/processing-instruction(\"mso-infoPathSolution\")");
- // 顯示處理指令的value
- Console.WriteLine(pi.Value);
- // 更新處理指令的value
- pi.Value = "updated value";
- // 顯示更新后的處理指令value
- Console.WriteLine(pi.Value);
- // 創(chuàng)建新的處理指令
- XmlProcessingInstruction piNew = doc.CreateProcessingInstruction("new-pi", "my new processing instruction");
- // 將處理指令添加到文檔中
- doc.InsertBefore(piNew, doc.ChildNodes[3]);
- // 刪除處理指令
- XmlNode ndDel = doc.SelectSingleNode("/processing-instruction(\"mso-application\")");
- doc.RemoveChild(ndDel);
- // 顯示更改后的Xml文檔
- Console.WriteLine(doc.InnerXml.ToString().Replace("><", ">\r\n\n<"));
原文標(biāo)題:使用c#來操作XML中的處理指令(PI)
鏈接:http://www.cnblogs.com/xiaoshatian/archive/2009/09/17/1568226.html
【編輯推薦】