本文作者Brian Schaffner是富士通咨询公司的副主任。他为富士通的技术咨询公司提供架构、设计和开发支持。
在本篇文章里,我们会使用一个简单的Web表单,它会列出某个目录下的一些XML文件。然后,我们会从这个目录里选择一个文件,将它发送到另一个Web表单里,后者会使用被选中的XML文件来填充某些文本字段。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/asp/)示例XML
我们的示例XML文档包含有一组含有基本信息的元素,如Listing A所示:
Listing A: sample.xml
<Sample
<NameJohn Doe</Name
<Address900 N. Michigan Ave</Address
<CityChicago</City
<StateIL</State
<Zip60614</Zip
<Phone630-555-5555</Phone
</Sample
为了让本文的说明更加有趣,我们会再创建两个含有不同数据的示例文件,如Listing B和Listing C所示:
Listing B: sample2.xml
<Sample
<NameGeorge W. Bush</Name
<Address1600 Pennsylvania Ave NW</Address
<CityWashington</City
<StateDC</State
<Zip20500</Zip
<Phone202-456-1111</Phone
</Sample
Listing C: sample3.xml
<Sample
<NameBill Gates</Name
<Address1 Microsoft Way</Address
<CityRedmond</City
<StateWA</State
<Zip98052</Zip
<Phone425-882-8080</Phone
</Sample
创建一个叫做C:xmldocs的目录,并将所有三个示例文件放到这个目录下。
Web表单
我们会为我们的应用程序创建两个Web表单。我们要用第一个表单来选择XML文件,用第二个表单来显示XML数据。
首先要用Visual Studio .NET创建一个新的ASP.NET Web应用程序。然后将最初的表单保存为SelectFile.aspx。如果你双击这个表单,代码编辑器就会被打开。
你首先需要把下面这一行加到代码的最前面,才能够将IO包添加到你的应用程序里:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/asp/)usingSystem.IO;
然后,找到代码内的Page_Load()方法。你需要将这个方法编辑成像下面Listing D里的代码一样:
Listing D: SelectFile'sPage_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<brn");
while (fileEnum.MoveNext()) {
finfo = (FileInfo) fileEnum.Current;
Response.Write("<a href="ShowData.aspx?filename=" + finfo.Name + """ + finfo.Name + "</a<brn");
}
}
现在向你的项目里添加一个新的Web表单——ShowData.aspx。在这个表单里放置六个文本框,并将其命名为:txtName、txtAddress、txtCity、txtState、txtZip和txtPhone。同样的,在表单里创建六个标签,并将其标题栏分别命名为Name(姓名)、Address(地址)、City(城市)、State(州)、Zip(邮政编码)和Phone(电话)。
双击ShowData表单来启动代码编辑器。你需要编辑ShowData表单的Page_Load()方法,使其看起来就像Listing E里的一样:
Listing E: ShowData'sPage_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":
txtAddr