程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 使用c#來操作XML中的處理指令(PI)

使用c#來操作XML中的處理指令(PI)

編輯:關於C#

什麼是處理指令?處理指令(Processing Instructions,PI)是用“<? ?>”包圍的一種標簽,用以描述特定應用程序信息。Xml文檔可以包含多個針對不同應用程序的處理指令。處理指令由兩部分組成,target和 value。target的角色類似於“名稱”,緊隨target之後的字符串就是value,value可以包含多個標記。

<?target value?>

那麼Xml聲明是不是處理指令呢?答案是肯定的,Xml聲明是一個特殊的處理指令,它之所以特殊是因為它的value格式是預先定義好的。另外一個常見的處理指令示例是外部樣式表。樣式表處理指令也擁有預先定義好格式的value值,它由一些偽屬性組成。為什麼叫做“偽屬性”,這是因為它的 value值看上去像是幾個正常的Xml屬性,但事實上它們只是一個字符串而已。

<?xml-stylesheet href="standardstyle.css" title="Standard Stylesheet" type="text/css"?>

然而處理指令value值的格式是開放的。處理指令並不是文檔數據的一部分,Xml解析器並不會理會它的內容,而是直接將它傳遞給客戶端應用程序。

微軟Office套件中的InfoPath就是用了處理指令來指示Xml文件是否可以用InfoPath客戶端來查看。

<?mso-application progid="InfoPath.Document"?>

而另一個處理指令,mso-infoPathSolution,則告訴InfoPath解決方案模板的位置。該模板包含了布局Xml文件的布局轉換信息、視圖的架構信息已經數據源信息。

那麼在c#應用程序中該如何操作包含處理指令的Xml文檔呢?

我們該如何處理和讀取Xml文檔中已有的處理指令?首先,處理指令可以像文檔中的其他節點一樣被選出。XPath使用了謂詞(predicate )processing-instruction()來測試該節點是不是一個處理指令。

在System.XML命名空間中,有一個XmlProcessingInstruction類。當你從Xml文檔中選出了一個節點後,就可以把返回的 XMLNode對象轉換成這種類型,該類型提供了非常友好的接口來操作處理指令的value。想要讀取它的value,只需要訪問該對象的Value屬性即可。

想要改變處理指令的值,也只需要將新值賦給該對象的Value屬性。

想要在Xml文檔中添加一個新的處理指令,可以使用XMLDocument類的CreateProcessingInstruction方法。然後再使用 InsertBefore或InsertAfter方法來將這個XmlProcessingInstruction對象添加到Xml文檔中。

想要從Xml文檔中刪除已有的處理指令,首先選出該處理指令的XmlNode對象,但不需要將其轉換為XMLProcessingInstruction對象。然後使用XMLDocument類的RemoveChild方法就可以將其刪除。

下面的代碼包含了本文所提及的全部內容:

// Xml文件路徑
string strPath = “path”

// 加載Xml文檔內容
XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.Load(strPath);

// 顯示Xml文檔內容
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);

// 創建新的處理指令
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<"));

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved