2024年6月10日发(作者:)
读取XML到ListBox/ComboBox
1,知识需求:
(1)访问XML文件的两个基本模型:
一,DOM模型;使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中
的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档
到内存中,对于大型的文档,这会造成资源问题。
二,流模型;流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,
也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前
的,不能在文档中执行向后导航操作。虽然是各有千秋,但我们也可以在程序中两者并
用实现优劣互补。C#采用流模型。
流模型每次迭代XML文档中的一个节点,适合于处理较大的文档,所耗内存空
间小。流模型中有两种变体——“推”push模型和pull“拉”模型。
推模型也就是常说的SAX,SAX是一种靠事件驱动的模型,也就是说:它每发现一
个节点就用推模型引发一个事件,而我们必须编写这些事件的处理程序,这样的做法非
常的不灵活,也很麻烦。
.NET中使用的是基于“拉”模型的实现方案,“拉”模型在遍历文档时会把感兴趣的文
档部分从读取器中拉出,不需要引发事件,允许我们以编程的方式访问文档,这大大的
提高了灵活性,在性能上“拉”模型可以选择性的处理节点,而SAX每发现一个节点都会
通知客户机,从而,使用“拉”模型可以提高Application的整体效率。在.NET中“拉”模型
是作为XmlReader类(抽象类)实现的
(2)XmlReader类
Represents a reader that provides fast, non-cached, forward-only access to XML data.
该类中有三个重要的衍生类:XmlTextReader;XmlTextValidatingReader;XmlNodeReader
(3)XmlNodeType枚举
该枚举里面有很多实用的数。
2,案例(VS2008+XML)
*
using System;
using c;
using entModel;
using ;
using g;
using ;
using ;
using ;
using ;
namespace DemoXmlReader
{
public partial class XmlForm : Form
{
public XmlForm()
{
InitializeComponent();
}
private void btnReaderXML_Click(object sender, EventArgs e)
{
XmlReader xr = new XmlReader(,lbxml);
try
{
// lToListBox();
lTextToListBox();
//l();
}
catch (XmlException xe)
{
(ng(), "Error", , );
}
catch (Exception exp)
{
(ng(), "Error", , );
}
finally
{
e();
}
}
发布评论