本文作者brian schaffner是富士通咨询公司的副主任。他为富士通的技术咨询公司提供架构、设计和开发支持。
在本篇文章里,我们会使用一个简单的web表单,它会列出某个目录下的一些xml文件。然后,我们会从这个目录里选择一个文件,将它发送到另一个web表单里,后者会使用被选中的xml文件来填充某些文本字段。
示例xml
我们的示例xml文档包含有一组含有基本信息的元素,如listing a所示:
listing a: sample.xml
<sample>
<name>john doe</name>
<address>900 n. michigan ave</address>
<city>chicago</city>
<state>il</state>
<zip>60614</zip>
<phone>630-555-5555</phone>
</sample>
为了让本文的说明更加有趣,我们会再创建两个含有不同数据的示例文件,如listing b和listing c所示:
listing b: sample2.xml
<sample>
<name>george w. bush</name>
<address>1600 pennsylvania ave nw</address>
<city>washington</city>
<state>dc</state>
<zip>20500</zip>
<phone>202-456-1111</phone>
</sample>
listing c: sample3.xml
<sample>
<name>bill gates</name>
<address>1 microsoft way</address>
<city>redmond</city>
<state>wa</state>
<zip>98052</zip>
<phone>425-882-8080</phone>
</sample>
创建一个叫做c:\xmldocs的目录,并将所有三个示例文件放到这个目录下。
web表单
我们会为我们的应用程序创建两个web表单。我们要用第一个表单来选择xml文件,用第二个表单来显示xml数据。
首先要用visual studio .net创建一个新的asp.net web应用程序。然后将最初的表单保存为selectfile.aspx。如果你双击这个表单,代码编辑器就会被打开。
你首先需要把下面这一行加到代码的最前面,才能够将io包添加到你的应用程序里:
usingsystem.io;
然后,找到代码内的page_load()方法。你需要将这个方法编辑成像下面listing d里的代码一样:
listing d: selectfilespage_load() method
private void page_load(object sender, system.eventargs e) {
system.io.directoryinfo dir;
system.io.fileinfo[] files;
system.io.fileinfofinfo;
system.collections.ienumeratorfileenum;
dir = new directoryinfo ("c:\\xmldocs");
files = dir.getfiles ("*.xml");
fileenum = files.getenumerator();
response.write("please select the xml file to load: <br><br>\n");
while (fileenum.movenext()) {
finfo = (fileinfo) fileenum.current;
response.write("<a href=\"showdata.aspx?filename=" + finfo.name + "\">" + finfo.name + "</a><br>\n");
}
}
现在向你的项目里添加一个新的web表单——showdata.aspx。在这个表单里放置六个文本框,并将其命名为:txtname、txtaddress、txtcity、txtstate、txtzip和txtphone。同样的,在表单里创建六个标签,并将其标题栏分别命名为name(姓名)、address(地址)、city(城市)、state(州)、zip(邮政编码)和phone(电话)。
双击showdata表单来启动代码编辑器。你需要编辑showdata表单的page_load()方法,使其看起来就像listing e里的一样:
listing e: showdataspage_load() method
private void page_load(object sender, system.eventargs e) {
string filename;
xmltextreaderxmlreader;
filename = "c:\\xmldocs\\" + request.params.get("filename");
xmlreader = new xmltextreader(filename);
while (xmlreader.read()) {
if (xmlreader.nodetype == xmlnodetype.element) {
switch (xmlreader.localname) {
case "name":
txtname.text = xmlreader.readstring();
break;
case "address":
txtaddress.text = xmlreader.readstring();
break;
case "city":
txtcity.text = xmlreader.readstring();
break;
case "state":
txtstate.text = xmlreader.readstring();
break;
case "zip":
txtzip.text = xmlreader.readstring();
break;
case "phone":
txtphone.text = xmlreader.readstring();
break;
}
}
}
}
你还需要把下面这一行加到代码的最前面,才能够将xml包添加到你的应用程序里:
usingsystem.xml;
这段代码在本质上同我们在c#表单例子里所使用的代码相同。其主要的不同之处在于,我们不再利用按钮来调用这段代码,而且我们也不再需要使用openfiledialog控件来寻找xml文件。文件名是由selectfile的web表单所提供的,这段代码在showdata表单被加载的时候被调用。
我们使用xmltextreaders read()方法在xml文档里迭代。随着每次对read()的调用,我们都会处理另一个xml节点。我们只用简单地检查一下,以确保该节点是一个元素,然后就可以使用xml元素节点里的字符串数据来填充我们表格里相应的文本框了。
运行演示程序
一旦你完成了演示表单的编码和编译,你就已经准备好使用它们了。将你的web浏览器指向selectfile表单。当页面被载入的时候,它就应该能够列出我们先前创建的示例文件了。只用简单地点击其中一个文件名,你就会看到数据填充在showdata表单里。
