在 .NET Framework 中表示 XML 的最佳做法
返回页首
准则初探
在三种主要情况下,开发人员需要考虑使用何种 API 来表示 XML。下面简要介绍一下这
些情况和准则:
• 类的字段或属性中包含 XML:如果类的字段或属性是 XML 文档或片段,则该类应提供
将其属性同时作为字符串和 XmlReader 进行操作的机制。
• 方法可以接受 XML 输入或返回 XML 作为输出:可以接受或返回 XML 的方法应有助于
返回 XmlReader 或 XPathNavigator,除非用户希望能够编辑 XML 数据(此时应使用
XmlDocument)。
• 将对象转换成 XML:如果对象出于序列化目的要以 XML 来表示其自身,当其需要获得
的 XML 序列化进程控制比 XmlSerializer 所提供的更多时,则应使用 XmlWriter。如果对象
要以 XML 来表示其自身,以便能够完全以 XML 世界成员的身份参与到其中(如允许在此
对象上进行 XPath 查询或 XSLT 转换),则此对象应实现 IXPathNavigable 接口。
在下面各部分中,介绍了上面提到的几种情况,并解释了如何获得这些准则的。
返回页首
常见疑点
当您决定使用方法或属性接受或返回 XML 时,您的大脑中会出现 .NET Framework 中的
许多类,它们都适用于此任务。下面列出了 .NET Framework 中最适合于表示 XML 输入或
输出的五个类,并且给出了其正反两方面的简要说明。
1.
System.Xml.XmlReader(英文):XmlReader 是 .NET Framework 的拉模型 XML 分析程
序。在拉模型处理过程中,XML 用户通过根据需要从 XML 制造者那里请求事件来控制程
序流。拉模型 XML 分析程序(如 XmlReader)以只进的流方式进行操作,同时只显示单个
节点在任意给定时间的相关信息。事实上,XmlReader 不需要整个 XML 文档加载到内存并
且是只读的,这使其成为以非 XML 数据源创建 XML 外观的一个不错选择。这种以非
XML 数据源创建 XML 外观的一个示例是 XmlCsvReader(英文)。有人可能将 XmlReader
的只进特性视为一种局限性,因为它使用户无法通过 XML 文档的各个部分进行多次传递。
2.
System.Xml.XPath.XPathNavigator(英文):XPathNavigator 是 XML 数据源上的只读光
标。XML 光标就像是一个透镜,一次聚焦于一个 XML 节点上,但与基于拉的 API(如
XmlReader)不同,它可以在任意给定时间将光标定位在 XML 文档的任意位置。在某种程
度上,拉模型 API 是光标模型的只进版本。XPathNavigator 还是以非 XML 数据实现 XML