浅析C#操作XML处理指令(PI)

开发 后端
我们将介绍如何用C#操作XML处理指令(PI)。什么是处理指令?处理指令(Processing Instructions,PI)是用“< ? ? >”包围的一种标签,用以描述特定应用程序信息。

这里我们将介绍如何用C#操作XML处理指令(PI),XML文档的应用十分广泛,使用C#操作XML处理指令,能起到事半功倍的效果。

什么是处理指令?

处理指令(Processing Instructions,PI)是用“”包围的一种标签,用以描述特定应用程序信息。XML文档可以包含多个针对不同应用程序的处理指令。处理指令由两部分组成,target和value。target的角色类似于“名称”,紧随target之后的字符串就是value,value可以包含多个标记。
那么Xml声明是不是处理指令呢?答案是肯定的,XML声明是一个特殊的处理指令,它之所以特殊是因为它的value格式是预先定义好的。另外一个常见的处理指令示例是外部样式表。样式表处理指令也拥有预先定义好格式的value值,它由一些伪属性组成。为什么叫做“伪属性”,这是因为它的value值看上去像是几个正常的XML属性,但事实上它们只是一个字符串而已。

然而处理指令value值的格式是开放的。处理指令并不是文档数据的一部分,XML解析器并不会理会它的内容,而是直接将它传递给客户端应用程序。

微软Office套件中的InfoPath就是用了处理指令来指示Xml文件是否可以用InfoPath客户端来查看。

而另一个处理指令,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方法就可以将其删除。

下面的代码包含了本文所提及的C#操作全部内容:

  1. // Xml文件路径   
  2. string strPath = “path”   
  3.  
  4. // 加载Xml文档内容   
  5. XmlDocument doc = new XmlDocument();   
  6. doc.XmlResolver = null;   
  7. doc.Load(strPath);   
  8.  
  9. // 显示Xml文档内容   
  10. Console.WriteLine(doc.InnerXml.ToString().Replace("><"">\r\n\n<"));   
  11. // 读取Xml文档的处理指令   
  12. XmlProcessingInstruction pi = (XmlProcessingInstruction)doc.SelectSingleNode("/processing-instruction(\"mso-infoPathSolution\")");   
  13. // 显示处理指令的value   
  14. Console.WriteLine(pi.Value);   
  15.  
  16. // 更新处理指令的value   
  17. pi.Value = "updated value";   
  18.  
  19. // 显示更新后的处理指令value   
  20. Console.WriteLine(pi.Value);   
  21.  
  22. // 创建新的处理指令   
  23. XmlProcessingInstruction piNew = doc.CreateProcessingInstruction("new-pi""my new processing instruction");   
  24.  
  25. // 将处理指令添加到文档中   
  26. doc.InsertBefore(piNew, doc.ChildNodes[3]);   
  27.  
  28. // 删除处理指令   
  29. XmlNode ndDel = doc.SelectSingleNode("/processing-instruction(\"mso-application\")");   
  30. doc.RemoveChild(ndDel);   
  31.  
  32. // 显示更改后的Xml文档   
  33. Console.WriteLine(doc.InnerXml.ToString().Replace("><"">\r\n\n<")); 

原文标题:使用c#来操作XML中的处理指令(PI)

链接:http://www.cnblogs.com/xiaoshatian/archive/2009/09/17/1568226.html

【编辑推荐】

  1. C# Attribute的概念与使用浅析
  2. C# AttributeUsage的使用浅析
  3. 浅析Attribute在C# WinForm控件开发中的使用
  4. 浅谈C#控件属性串行化的实现
  5. C#实例详解TypeConverterAttribute应用
责任编辑:彭凡 来源: 博客园
相关推荐

2009-08-18 16:42:49

C# 操作XML

2009-08-18 16:30:41

C# 操作XML

2009-08-14 00:30:09

C#条件编译指令

2009-08-19 16:42:41

C#如何使用XML

2009-09-09 13:57:28

C# XML解析

2009-08-18 16:49:05

C# 操作XML

2009-08-12 15:20:21

C#事件处理

2009-08-17 13:34:02

C#异步操作

2009-08-12 15:26:38

C#读取XML文档

2009-09-07 06:07:46

C#窗体设计

2009-08-18 13:49:21

C# 操作Excel

2009-09-09 18:00:55

C# XML编程

2009-09-09 15:54:48

C# XML序列化

2009-08-12 16:26:30

C#读取XML文档

2009-08-25 14:59:39

C# XML序列化应用

2009-09-01 09:37:15

C#写文件

2009-08-20 10:53:23

C#操作内存

2009-08-18 16:04:12

C# 操作Excel

2009-08-19 09:42:52

C#操作Word书签

2009-08-20 10:25:37

C#操作内存
点赞
收藏

51CTO技术栈公众号