NET实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXX
(程序设计类课程)
实验报告
课程名称:C#.NET程序设计姓名:XXX
系:电子信息工程专业:电子信息工程年级:2007级
学号:********* 指导教师:Xxx
职称:助教
2010 年12 月14 日
实验项目列表
序号实验项目名称成绩指导教师
1 实验一 Web窗体和Web应用程序
2 实验二 数据库访问技术
3 实验三 Windows窗体及数据访问
4 实验四验证XML类
5 实验五 CLR原理验证
6
7
8
9
10
11
12
XXX实验报告
系:电子信息工程专业:电子信息工程年级:2007级
姓名:XXX 学号:实验室号__实验楼1 607 计算机号56
实验时间:09.11.16 指导教师签字:成绩:
实验一 Web窗体和Web应用程序
一、实验目的和要求
1、掌握使用Visual Studio 2005开发Web应用程序的方法;
2、理解应用程序状态和应用程序缓存的作用;
3、了解在使用Cookie的情况下,会话状态和Cookie的关系;
4、学习使用应用程序缓存编程。

二、实验内容和原理
1、使用Visual Studio 2005设计一个基于Web的抵押付款计算器;
2、测试AppCounter.aspx和SmartQuotes.aspx
3、测试SessionSpy.aspx
4、深入理解
(1)分析和理解Web.config、Global.asax、Congo.aspx、ViewCart.aspx和Congo.cs代码
(2)测试状态服务器模式下的会话状态存储
(3)应用缓存编程
三、实验环境
Mrcrosoft Visual Studio 2005
四、算法描述及实验步骤
(1)设计一个基于Web的抵押付款计算器:
1.创建虚拟目录
2.创建一个WEB应用程序
3.更改为流布局模式
4.添加一个表
5.插入文本
6.添加TWXBOX控件
7.添加一个BUTTON控件
8.添加一个LABEI控件
9.编辑HTML
10.添加一个CLICK事件处理程序
11.生成和测试
实验所需代码:
AppCounter.aspx代码为:
<%@ Page Language="C#" %>
<html>
<body>
<%
// Fetch the count and increment it by 1. Lock application state
// to prevent the count from changing as it's being updated.
Application.Lock ();
int count = (int) Application["Count"] + 1;
Application["Count"] = count;
Application.UnLock ();
// Write the count to the page
Response.Write ("Pages in this application " +
"have been requested " + count + " time");
if (count > 1)
Response.Write ("s");
Response.Write (".");
%>
</body>
</html>
测试。

2、SmartQuotes.aspx代码为:
<%@ Import Namespace="System.IO" %>
<html>
<body>
<asp:Label ID="Output" RunAt="server" />
</body>
</html>
<script language="C#" runat="server">
void Page_Load (Object sender, EventArgs e)
{
ArrayList quotes = (ArrayList) Cache["Quotes"];
if (quotes != null) {
Random rand = new Random ();
int index = rand.Next (0, quotes.Count - 1);
Output.Text = (string) quotes[index];
}
else {
Output.Text = "Server busy";
}
}
</script>
测试。

3、SessionSpy.aspx代码为:
<%@ Page Language="C#" %>
<html>
<body>
<%
if (Session.IsNewSession || Session["Count"] == null) {
Session["Count"] = 1;
Response.Write ("Welcome! Because this is your first " +
"visit to this site, a new session has been created " +
"for you. Y our session ID is " + Session.SessionID +
".");
}
else {
Session["Count"] = (int) Session["Count"] + 1;
Response.Write ("Y ou have visited this site " +
Session["Count"] + " times. Y our session ID is still " +
Session.SessionID + ".");
}
%>
</body>
</html>
测试。

五、调试过程
调试各代码程序生成结果
六、实验结果
(1)基于Web的抵押付款计算器运行结果:
(2)AppCounter.aspx和SmartQuotes.aspx的测试结果分别如下:AppCounter.aspx测试结果:
SmartQuotes.aspx测试结果:
七、总结
通过此次试验让我初步掌握了使用Visual Studio 2005开发Web应用程序的方法;预习以及实验中我理解了应用程序状态和应用程序缓存的作用;还有了解在使用Cookie的情况下,会话状态和Cookie的关系;学会了使用应用程序缓存编程。

跟单纯的看书本理论是完全不同的体会!感觉很切实。

XXX实验报告
系:电子信息工程专业:电子信息工程年级:2007级
姓名:XXX 学号:072230056 实验室号__实验楼1 607 计算机号56
实验时间:09.11.23 指导教师签字:成绩:
实验二 数据库访问技术
一、实验目的和要求
1、熟悉使用两种不同数据库访问提供程序;
2、学会使用命令类进行基本的数据库查询操作;
3、掌握基于集的数据库访问技术。

4、初步掌握在控制台托管程序以及 Web应用程序中使用访问数据库的方法。

二、实验内容和原理
1、使用ExecuteNonQuery方法对数据库进行记录的插入、更新和删除操作。

2、使用ExecuteScalar方法对数据库查询字段最值/平均值。

3、使用ExecuteReader方法对数据库进行查询。

4、使用DataSet和DataAdapter对数据库进行操作。

5、利用技术在ASPX页中显示数据库表的内容。

三、实验环境
Microsoft SQL Server 2005
四、算法描述及实验步骤
五、调试过程
调试运行个程序代码得到结果如图。

六、实验结果
七、总结
此次实验,同过实验前准备,有比较充分的预习,遇到问题比较少,问题也解决的比较快。

通过此次试验,让我能够比较我熟悉的使用两种不同数据库访问提供程序;同时在此次实验中我学会了使用命令类进行基本的数据库查询操作;开始掌握基于集的数据库访问一些技术,也初步掌握在控制台托管程序以及 Web应用程序中使用访问数据库的方法。

XXX实验报告
系:电子信息工程专业:电子信息工程年级:2007级
姓名:XXX 学号:072230056 实验室号__实验楼1 607 计算机号56
实验时间:09.11.30 指导教师签字:成绩:
实验三 Windows窗体及数据访问
一、实验目的和要求
1、掌握在Visual Studio .NET IDE下创建Windows窗体应用程序的方法
2、学习使用常用的Windows窗体控件
3、了解Windows窗体数据控件以及数据访问可视化编程
二、实验内容和原理
1、阅读WindowsEvent项目,理解Windows窗体中的常见事件,创建并调试程序。

2、理解Anchor、Dock属性,界面控件布局等功能。

3、阅读LoginApp项目,理解模式对话框的应用,创建并调试程序
4、阅读CircleShapeW项目,理解RadioButton单选按钮控件,CheckBox复选框控件的使用,创建并调试程序。

5、阅读ListBoxSample项目,理解ListBox控件和ComboBox控件,以及它们的DataSource、DisplayMember和ValueMember属性的使用,创建并调试程序。

6、阅读StripSample项目,理解MenuStrip、ToolStrip、StatusStrip和对话框的使用,创建并调试程序。

7、阅读ProductSample项目,创建简单的数据Windows应用程序。

8、阅读TableAdapterSample项目,使用TableAdapter创建查询、全局查询,执行各种SQL命令,创建并调试程序。

9、阅读DataBindSample项目,理解BindingSource控件DataGridView、ListBox 控件等数据绑定,创建并调试程序。

10、阅读LookupTable项目,理解通过ComboBox和DataGridView控件创建查找表,创建并调试程序。

三、实验环境
Mrcrosoft Visual Studio 2005
四、算法描述及实验步骤
1、WindowsEvent项目创建步骤如下:
(1)新建一个名为WindowsEvent的C#windows应用程序项目。

(2)在Form1窗体双击,添加Form1窗体Load事件处理代码程序如下:
在Form1.cs文件的Form1类下: private void Form1_Load(object sender, EventArgs e){ this.Text = "窗体标题在Load事件中修改"; }
(3)在Form1窗体的属性窗口的事件列表,双击FormClosing事件,添加处理
代码:
private void Form1_FormClosing(object sender, FormClosingEventArgs e){
if(DialogResult.No== MessageBox.Show("关闭吗?","退出提示", MessageBoxButtons.YesNo)) e.Cancel = true; }
(4)在Form1窗体的属性窗口的事件列表,双击Click事件,添加处理代码: #13;
private void Form1_Click(object sender, EventArgs e) {this.Close(); }
(5)调试运行。

2、LoginApp项目创建步骤如下:
(1)新建一个C#windows应用程序项目,给项目命名为LoginApp。

(2)在解决方案资源管理器中,右击项目LoginApp,在弹出的快捷菜单中选择“添加”-“添加windows窗体”,名称默认为form2.cs,更改LoginForm.cs。

(3)设计LoginForm的界面,用作登录对话框。

从工具箱中向LoginForm设计
窗口中添加2个Label控件,2个Textbox控件和2个Button控件。

(4)设计Form1的界面,从工具箱中向Form1设计窗口中添加1个Label控件,并将其Text属性设为“欢迎”。

(5)修改LoginForm和各个控件的属性。

(6)在Form1设计窗口中直接双击Form1窗体,添加Load事件处理代码:
private void Form1_Load(object sender, EventArgs e)
{
LoginForm frmLogin = new LoginForm();
frmLogin.ShowDialog(this);
if (frmLogin.DialogResult != DialogResult.OK)
Application.Exit();
}
(7)在LoginForm设计窗口中双击“登录”按钮,添加用户名和密码验证代码:
private void btnLogin_Click(object sender, EventArgs e){
if (txtUserName.Text != "guest")//判断用户名是否等于“guest”
{
MessageBox.Show("错误的用户名!请重试", "登录");
txtUserName.SelectionStart = 0;
txtUserName.SelectionLength = txtUserName.TextLength; //选中用户名txtUserName.Focus();//使用户名文本框拥有焦点
}
else if (txtPwd.Text != "pass"){//判断密码是否等于“pass”MessageBox.Show("错误密码!请重试", "登录");
txtPwd.Focus();//使密码文本框拥有焦点
txtPwd.Text = "";
} else { //用户名和密码正确,关闭模式对话框
this.DialogResult = DialogResult.OK;
}
}
(8)调试运行。

3、CircleShapeW项目创建步骤如下:
(1)新建一个名为CircleShapeW的C#windows应用程序项目。

(2)设计Form1的界面,从工具箱中向Form1设计窗口中添加两个Label控件,两个Textbox控件、一个GroupBox控件、三个RadioButton控件、一个CheckBox 控件和一个Button控件,并调整到合理的位置。

(3)修改各控件属性。

(4)在Form1设计窗口中双击“计算体积”按钮,添加处理代码:
double CalCube(double dblR)//边长为圆直径的立方体积
{ return 8 * dblR * dblR * dblR; }
private void btnCompute_Click(object sender, EventArgs e){
double r,dblHalf,dblVol;//声明局部变量
if (double.TryParse(txtR.Text, out r)){
if (chkHalf.Checked) dblHalf = 0.5;//如果计算一半体积
else dblHalf = 1;
if (rdoBall.Checked) dblVol = dblHalf * CalBall(r); //球体积
else if (rdoCube.Checked) dblVol = dblHalf * CalCube(r); //立方体积
else if (rdoCylin.Checked)
dblVol = dblHalf * CalCylinder(r); //圆柱体积
else {
MessageBox.Show("请选择立体形状");
return;
}
this.txtVol.Text = dblVol.ToString("f3");
}
}
(5)调试程序。

4、项目创建步骤如下:
(1)新建一个名为ListBoxSample的C#windows应用程序项目。

(2)设计Form1的界面,从工具箱中向Form1设计窗口中添加一个ListBox控件和一个ComboBox控件,并调整到合理的位置。

(3)在Form1.cs,添加处理代码:
public class USState
{
private string myShortName;
private string myLongName;
public USState(string strLongName, string strShortName)
{
this.myShortName = strShortName;
this.myLongName = strLongName;
}
public string ShortName
{
get { return myShortName; }
}
public string LongName
{
get { return myLongName; }
}
public override string ToString()
{
return this.ShortName + " - " + this.LongName;
}
}
public Form1()
{
InitializeComponent();
InitForm();
}
void InitForm()
{
List<USState> USStates = new List<USState>();
USStates.Add(new USState("Alabama", "AL"));
USStates.Add(new USState("Washington", "WA"));
USStates.Add(new USState("West Virginia", "WV"));
listBox1.DataSource = USStates;
//listBox1.DisplayMember = "LongName";//改变注释观察显示变化
//listBox1.ValueMember = "ShortName";//改变注释观察显示变化comboBox1.DataSource = USStates;
comboBox1.DisplayMember = "LongName";
comboBox1.ValueMember = "ShortName";
}
(4)调试程序。

5、项目创建步骤如下:
(1)创建一个名为“StripSample”的 Windows 应用程序项目。

(2)打开其Form1设计界面。

添加MenuStrip 控件,选择“插入标准项”。

MenuStrip 控件会用标准菜单项进行填充。

选择“嵌入ToolStripContainer 中”,以添加ToolStripContainer。

再选择MenuStrip 控件,在菜单项“工具”|“选项”下面添加“颜色”的菜单项。

(3)在窗体的顶侧面板添加ToolStrip 控件,选择“插入标准项”,插入标准工具栏按钮。

在ToolStrip 控件中添加两个子项:“开启进程”Button和“颜色”TextBox。

(4)单击ToolStripContainer的底侧面板展开以添加StatusStrip控件。

在StatusStrip控件添加两个子项ToolStripProgressBar和ToolStripStatusLabel子项。

(5)添加OpenFileDialog、SaveFileDialog、ColorDialog、RichTextBox和Timer控件。

具体控件布局参考如下图所示。

(6)在窗体Form1编码菜单项“文件”|“退出”Click事件处理程序如下:
private void 退出XToolStripMenuItem_Click(object sender, EventArgs e) {
if (MessageBox.Show("真的退出", "Form1", MessageBoxButtons.OKCancel) == DialogResult.OK)
Close();}
(7)编码Timer控件的Tick事件(调用Timer.Start()可触发)如下:
private void timer1_Tick(object sender, EventArgs e)
{//对StatusStrip控件ToolStripProgressBar的value递增,达到时重新由开始。

this.toolStripProgressBar1.Value = (this.toolStripProgressBar1.Value == 100) ? 0 : this.toolStripProgressBar1.Value + 10;
}
(8)编码菜单项“文件”|“打开”Click事件(双击“打开”菜单项)如下:
private void 打开OToolStripMenuItem_Click(object sender, EventArgs e) { // 设置文件对话框的属性
openFileDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";//文件过滤器
openFileDialog1.InitialDirectory = "c:";//初始目录
openFileDialog1.Title = "打开文件";
// 显示对话框,并且如果在对话框中单击【打开】按钮关闭对话框
// 则richTextBox1显示用户在对话框中选择的文件
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText); // PlainText可用于*.txt文件类型
}
}
(9)编码工具栏“打开”按钮的Click事件处理与“打开”菜单项执行相同代码即使用相同的“打开OToolStripMenuItem_Click()”方法。

操作如下:选择
“打开”按钮,在属性窗口选择Click事件,在右边下拉窗口选择“打开OToolStripMenuItem_Click()”,可实现两个事件使用同一事件处理方法。

(10)编码菜单项“文件”|“保存”Click事件(工具栏“保存”按钮的Click 事件相同):
private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) { // 设置对话框的属性
saveFileDialog1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"; saveFileDialog1.InitialDirectory = "c:";
saveFileDialog1.Title = "保存文件";
// 显示对话框,并且如果在对话框中单击【保存】按钮关闭对话框,
// 则将文本框的内容保存在用户在对话框中选择的文件中
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
}
}
(11)编码工具栏“颜色”按钮Click事件(菜单项“工具”|“颜色”的Click 事件相同):
private void toolStripTextBox1_Click(object sender, EventArgs e)
{
colorDialog1.Color = richTextBox1.ForeColor;
if (colorDialog1.ShowDialog() == DialogResult.OK)
{ // 如果在颜色对话框选择颜色并单击【确定】按钮关闭对话框,richTextBox1.ForeColor = colorDialog1.Color;// 文本框赋值所选颜色
}
}
(12)编码工具栏“开启进程”按钮Click事件如下:
private void toolStripButton1_Click(object sender, EventArgs e)
{//sender是发动事件的“开启进程”按钮ToolStripButton
ToolStripButton tButton = (ToolStripButton)sender;
if (tButton.Checked)
{// Checked属性指示按钮是否按下
tButton.Text = "停止进程";
timer1.Start();//启动Timer,来启动状态栏进程条显示进程
}
else
{
tButton.Text = "启动进程";
timer1.Stop();//停止Timer,来停止状态栏进程条显示进程
this.toolStripProgressBar1.Value = this.toolStripProgressBar1.Minimum; }
}
五、调试过程
调试个项目程序代码得出运行结果
六、实验结果
1、 WindowsEvent项目的实验结果:
(1)运行后弹出的窗口,如图所示:
3、运行该项目后,在用户名输入“guest”,在密码框输入“pass”,就可通过用户名和密码验证,进入主窗体的欢迎界面,如下图所示:
6、StripSample的实验结果:
(1)当选择菜单“文件”│“退出”时,出现如下图所示对话框:
(2)当选择菜单“文件”│“打开”时,出现如下图所示对话框:
七、总结
通过此次试验我初步掌握了在Visual Studio .NET IDE下创建Windows窗体应用程序的一些方法,对常用的Windows窗体控件也会了使用还有Windows窗体数据控件以及数据访问可视化编程也有了些许了解。

阅读各个实验项目的过程中让我,理解了各种常见事件、按钮控件、对话框等。

对一些程序并的创建以及调试也能够有一定的了解。

XXX实验报告
系:电子信息工程专业:电子信息工程年级:2007级
姓名:XXX 学号:072230056 实验室号__实验楼1 607 计算机号56
实验时间:09.12.7 指导教师签字:成绩:
实验四验证XML类
一、实验目的和要求
(1)熟悉XML文档的结构;
(2)了解FCL对XML的支持。

二、实验内容和原理
1、编译运行ReadXml.exe读取xml文档中的信息。

2、编译运行XmlView.exe,分析xml文档结构。

3、使用XmlTextReader提取xml文档中的信息。

4、运行Validate控制台应用程序,用XSD架构验证XML文档。

5、使用XmlTextWriter类创建XML文档。

6、编译运行XpathDemo.cs,读取xml文档中的信息。

7、编译运行Expressalyzer.exe求解XPath表达式并显示结果。

8、用IE测试在客户端不用和使用XSLT时显示XML页的不同。

9、使用Quotes.aspx在服务器端实现从XML到HTML的转换。

10、编译运行Transform.cs,根据Quotes.xsl将Quotes.xml转换生成HTML文档。

三、实验环境
Mrcrosoft Visual Studio 2005
四、算法描述及实验步骤
1、编译运行ReadXml.exe读取xml文档中的信息。

代码:using System;
using System.Xml;
class MyApp
{
static void Main ()
{
XmlDocument doc = new XmlDocument ();
doc.Load ("Guitars.xml");
XmlNodeList nodes = doc.GetElementsByTagName ("Guitar");
foreach (XmlNode node in nodes) {
Console.WriteLine ("{0} {1}", node["Make"].InnerText,
node["Model"].InnerText);
}
}
}
2、编译运行XmlView.exe,分析xml文档结构。

代码为:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
class XmlViewForm : Form
{
GroupBox DocumentGB;
TextBox Source;
Button LoadButton;
ImageList NodeImages;
TreeV iew XmlView;
XmlViewForm ()
{
// Initialize the form's properties
Text = "XML Viewer";
ClientSize = new System.Drawing.Size (488, 422);
// Instantiate the form's controls
DocumentGB = new GroupBox ();
Source = new TextBox ();
LoadButton = new Button ();
XmlView = new TreeV iew ();
// Initialize the controls
Source.Anchor =
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
Source.Location = new System.Drawing.Point (16, 24);
Source.Size = new System.Drawing.Size (336, 24);
Source.TabIndex = 0;
= "Source";
LoadButton.Anchor = AnchorStyles.Top | AnchorStyles.Right;
LoadButton.Location = new System.Drawing.Point (368, 24);
LoadButton.Size = new System.Drawing.Size (72, 24);
LoadButton.TabIndex = 1;
LoadButton.Text = "Load";
LoadButton.Click += new System.EventHandler (OnLoadDocument);
DocumentGB.Anchor =
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
DocumentGB.Location = new Point (16, 16);
DocumentGB.Size = new Size (456, 64);
DocumentGB.Text = "Document";
DocumentGB.Controls.Add (Source);
DocumentGB.Controls.Add (LoadButton);
NodeImages = new ImageList ();
NodeImages.ImageSize = new Size (12, 12);
NodeImages.Images.AddStrip (new Bitmap (GetType (), "Buttons"));
NodeImages.TransparentColor = Color.White;
XmlView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
XmlView.Location = new System.Drawing.Point (16, 96);
XmlView.Size = new System.Drawing.Size (456, 308);
XmlView.ImageList = NodeImages;
XmlView.TabIndex = 2;
= "XmlView";
// Add the controls to the form
Controls.Add (DocumentGB);
Controls.Add (XmlView);
}
void OnLoadDocument (object sender, EventArgs e)
{
try {
XmlDocument doc = new XmlDocument ();
doc.Load (Source.Text);
XmlView.Nodes.Clear ();
AddNodeAndChildren (doc.DocumentElement, null);
}
catch (Exception ex) {
MessageBox.Show (ex.Message);
}
}
void AddNodeAndChildren (XmlNode xnode, TreeNode tnode) {
TreeNode child = AddNode (xnode, tnode);
if (xnode.Attributes != null) {
foreach (XmlAttribute attribute in xnode.Attributes)
AddAttribute (attribute, child);
}
if (xnode.HasChildNodes) {
foreach (XmlNode node in xnode.ChildNodes)
AddNodeAndChildren (node, child);
}
}
TreeNode AddNode (XmlNode xnode, TreeNode tnode)
{
string text = null;
TreeNode child = null;
TreeNodeCollection tnodes = (tnode == null) ?
XmlView.Nodes : tnode.Nodes;
switch (xnode.NodeType) {
case XmlNodeType.Element:
case XmlNodeType.Document:
tnodes.Add (child = new TreeNode (, 0, 0));
break;
case XmlNodeType.Text:
text = xnode.V alue;
if (text.Length > 128)
text = text.Substring (0, 128) + "...";
tnodes.Add (child = new TreeNode (text, 2, 2));
break;
case XmlNodeType.CDA TA:
text = xnode.V alue;
if (text.Length > 128)
text = text.Substring (0, 128) + "...";
text = String.Format ("<![CDA TA]{0}]]>", text);
tnodes.Add (child = new TreeNode (text, 3, 3));
break;
case ment:
text = String.Format ("<!--{0}-->", xnode.V alue);
tnodes.Add (child = new TreeNode (text, 4, 4));
break;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
text = String.Format ("<?{0} {1}?>", ,
xnode.V alue);
tnodes.Add (child = new TreeNode (text, 5, 5));
break;
case XmlNodeType.Entity:
text = String.Format ("<!ENTITY {0}>", xnode.V alue);
tnodes.Add (child = new TreeNode (text, 6, 6));
break;
case XmlNodeType.EntityReference:
text = String.Format ("&{0};", xnode.V alue);
tnodes.Add (child = new TreeNode (text, 7, 7));
break;
case XmlNodeType.DocumentType:
text = String.Format ("<!DOCTYPE {0}>", xnode.V alue);
tnodes.Add (child = new TreeNode (text, 8, 8));
break;
case XmlNodeType.Notation:
text = String.Format ("<!NOTA TION {0}>", xnode.V alue);
tnodes.Add (child = new TreeNode (text, 9, 9));
break;
default:
tnodes.Add (child =
new TreeNode (xnode.NodeType.ToString (), 1, 1));
break;
}
return child;
}
void AddAttribute (XmlAttribute attribute, TreeNode tnode)
{
string text = String.Format ("{0}={1}", ,
attribute.V alue);
tnode.Nodes.Add (new TreeNode (text, 1, 1));
}
static void Main ()
{
Application.Run (new XmlViewForm ());
}
}
3、使用XmlTextReader提取xml文档中的信息。

代码为:
Code1:
XmlTextReader reader = null;
try {
reader = new XmlTextReader ("Guitars.xml");
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read ()) {
Console.WriteLine ("Type={0}\tName={1}\tV alue={2}",
reader.NodeType, , reader.V alue);
}
}
finally {
if (reader != null)
reader.Close ();
}
Code2: XmlTextReader reader = null;
try {
reader = new XmlTextReader ("Guitars.xml");
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read ()) {
Console.WriteLine ("Type={0}\tName={1}\tV alue={2}",
reader.NodeType, , reader.V alue);
if (reader.AttributeCount > 0) {
while (reader.MoveToNextAttribute ()) {
Console.WriteLine ("Type={0}\tName={1}\tV alue={2}",
reader.NodeType, , reader.V alue); } }
}
}
finally {
if (reader != null)
reader.Close ();
}
Code3: XmlTextReader reader = null;
try {
reader = new XmlTextReader ("Guitars.xml");
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read ()) {
if (reader.NodeType == XmlNodeType.Element &&
== "Guitar" &&
reader.AttributeCount > 0) {
while (reader.MoveToNextAttribute ()) {
if ( == "Image") {
Console.WriteLine (reader.V alue);
break;
}
}
}
}
}
finally {
if (reader != null)
reader.Close ();
}
4、运行V alidate控制台应用程序,用XSD架构验证XML文档。

V alidate.cs代码为:using System;
using System.Xml;
using System.Xml.Schema;
class MyApp
{
static void Main (string[] args)
{
if (args.Length < 2) {
Console.WriteLine ("Syntax: V ALIDA TE xmldoc schemadoc");
return;
}
XmlV alidatingReader reader = null;
try {
XmlTextReader nvr = new XmlTextReader (args[0]);
nvr.WhitespaceHandling = WhitespaceHandling.None;
reader = new XmlV alidatingReader (nvr);
reader.Schemas.Add (GetTargetNamespace (args[1]), args[1]);
reader.V alidationEventHandler +=
new V alidationEventHandler (OnV alidationError);
while (reader.Read ());
}
catch (Exception ex) {
Console.WriteLine (ex.Message);
}
finally {
if (reader != null)
reader.Close ();
}
}
static void OnV alidationError (object sender, V alidationEventArgs e) {
Console.WriteLine (e.Message);
}
static string GetTargetNamespace (string src)
{
XmlTextReader reader = null;
try {
reader = new XmlTextReader (src);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read ()) {
if (reader.NodeType == XmlNodeType.Element &&
reader.LocalName == "schema") {
while (reader.MoveToNextAttribute ()) {
if ( == "targetNamespace")
return reader.V alue;
}
}
}
return "";
}
finally {
if (reader != null)
reader.Close ();
}
}
}
命令行代码:validate guitars.xml guitars.xsd
5、使用XmlTextWriter类创建XML文档。

Code为:XmlTextWriter writer = null;
try {
writer = new XmlTextWriter ("Guitars.xml", System.Text.Encoding.Unicode);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument ();
writer.WriteStartElement ("Guitars");
writer.WriteStartElement ("Guitar");
writer.WriteAttributeString ("Image", "MySG.jpeg");
writer.WriteElementString ("Make", "Gibson");
writer.WriteElementString ("Model", "SG");
writer.WriteElementString ("Y ear", "1977");
writer.WriteElementString ("Color", "Tobacco Sunburst");
writer.WriteElementString ("Neck", "Rosewood");
writer.WriteEndElement ();
writer.WriteEndElement ();
}
finally {
if (writer != null)
writer.Close ();
}
6、编译运行XpathDemo.cs,读取xml文档中的信息。

XpathDemo.cs:
using System;
using System.Xml.XPath;
class MyApp
{
static void Main()
{
XPathDocument doc = new XPathDocument("Guitars.xml");
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator iterator = nav.Select("/Guitars/Guitar");
while (iterator.MoveNext())
{
XPathNodeIterator it = iterator.Current.Select("Make");
it.MoveNext();
string make = it.Current.V alue;
it = iterator.Current.Select("Model");
it.MoveNext();
string model = it.Current.V alue;
Console.WriteLine("{0} {1}", make, model);
}
}
}
7、编译运行Expressalyzer.exe求解XPath表达式并显示结果。

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Xml.XPath;
class AnalyzerForm : Form
{
GroupBox DocumentGB;
TextBox Source;
Button LoadButton;
GroupBox ExpressionGB;
TextBox Expression;
Button ExecuteButton;
ImageList NodeImages;
TreeV iew XmlView;
XPathNavigator Navigator;
AnalyzerForm ()
{
// Initialize the form's properties
Text = "XPath Expression Analyzer";
ClientSize = new System.Drawing.Size (488, 422);
// Instantiate the form's controls
DocumentGB = new GroupBox ();
Source = new TextBox ();
LoadButton = new Button ();
ExpressionGB = new GroupBox ();
Expression = new TextBox ();
ExecuteButton = new Button ();
XmlView = new TreeV iew ();
// Initialize the controls
Source.Anchor =
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; Source.Location = new System.Drawing.Point (16, 24);
Source.Size = new System.Drawing.Size (336, 24);
Source.TabIndex = 0;
= "Source";
LoadButton.Anchor = AnchorStyles.Top | AnchorStyles.Right; LoadButton.Location = new System.Drawing.Point (368, 24); LoadButton.Size = new System.Drawing.Size (72, 24); LoadButton.TabIndex = 1;
LoadButton.Text = "Load";
LoadButton.Click += new System.EventHandler (OnLoadDocument);
DocumentGB.Anchor =
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; DocumentGB.Location = new Point (16, 16);
DocumentGB.Size = new Size (456, 64);
DocumentGB.Text = "Document";
DocumentGB.Controls.Add (Source);
DocumentGB.Controls.Add (LoadButton);
Expression.Anchor =
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; Expression.Location = new System.Drawing.Point (16, 24); Expression.Size = new System.Drawing.Size (336, 24); Expression.TabIndex = 2;
= "Expression";
ExecuteButton.Anchor = AnchorStyles.Top | AnchorStyles.Right; ExecuteButton.Location = new System.Drawing.Point (368, 24); ExecuteButton.Size = new System.Drawing.Size (72, 24); ExecuteButton.TabIndex = 3;
ExecuteButton.Text = "Execute";
ExecuteButton.Enabled = false;
ExecuteButton.Click +=
new System.EventHandler (OnExecuteExpression);
ExpressionGB.Anchor =
AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; ExpressionGB.Location = new System.Drawing.Point (16, 96); = "ExpressionGB";
ExpressionGB.Size = new System.Drawing.Size (456, 64);
ExpressionGB.Text = "Expression";
ExpressionGB.Controls.Add (Expression);
ExpressionGB.Controls.Add (ExecuteButton);
NodeImages = new ImageList ();
NodeImages.ImageSize = new Size (12, 12);
NodeImages.Images.AddStrip (new Bitmap (GetType (), "Buttons"));
NodeImages.TransparentColor = Color.White;
XmlView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
XmlView.Location = new System.Drawing.Point (16, 176);
XmlView.Size = new System.Drawing.Size (456, 232);
XmlView.ImageList = NodeImages;
XmlView.TabIndex = 4;
= "XmlView";
// Add the controls to the form
Controls.Add (DocumentGB);
Controls.Add (ExpressionGB);
Controls.Add (XmlView);
}
void OnLoadDocument (object sender, EventArgs e)
{
try {
XPathDocument doc = new XPathDocument (Source.Text);
Navigator = doc.CreateNavigator ();
ExecuteButton.Enabled = true;
}
catch (Exception ex) {
MessageBox.Show (ex.Message);
}
}
void OnExecuteExpression (object sender, EventArgs e)
{
try {
XPathNodeIterator iterator =
Navigator.Select (Expression.Text);
XmlView.Nodes.Clear ();
while (iterator.MoveNext ())
AddNodeAndChildren (iterator.Current, null);
}
catch (Exception ex) {
MessageBox.Show (ex.Message);
}
}
void AddNodeAndChildren (XPathNavigator nav, TreeNode tnode) {
TreeNode child = AddNode (nav, tnode);
if (nav.HasAttributes) {
nav.MoveToFirstAttribute ();
do {
AddAttribute (nav, child);
} while (nav.MoveToNextAttribute ());
nav.MoveToParent ();
}
if (nav.HasChildren) {
nav.MoveToFirstChild ();
do {
AddNodeAndChildren (nav, child);
} while (nav.MoveToNext ());
nav.MoveToParent ();
}
}
TreeNode AddNode (XPathNavigator nav, TreeNode tnode)
{
string text = null;
TreeNode child = null;
TreeNodeCollection tnodes = (tnode == null) ?
XmlView.Nodes : tnode.Nodes;
switch (nav.NodeType) {
case XPathNodeType.Root:
case XPathNodeType.Element:
tnodes.Add (child = new TreeNode (, 0, 0));
break;
case XPathNodeType.Attribute:
text = String.Format ("{0}={1}", , nav.V alue);
tnodes.Add (child = new TreeNode (text, 1, 1));
break;
case XPathNodeType.Text:
text = nav.V alue;
if (text.Length > 128)
text = text.Substring (0, 128) + "...";
tnodes.Add (child = new TreeNode (text, 2, 2));
break;
case ment:
text = String.Format ("<!--{0}-->", nav.V alue);
tnodes.Add (child = new TreeNode (text, 4, 4));
break;
case XPathNodeType.ProcessingInstruction:
text = String.Format ("<?{0} {1}?>", , nav.V alue);
tnodes.Add (child = new TreeNode (text, 5, 5));
break;
}
return child;
}
void AddAttribute (XPathNavigator nav, TreeNode tnode)
{
string text = String.Format ("{0}={1}", , nav.V alue);
tnode.Nodes.Add (new TreeNode (text, 1, 1));
}
static void Main ()
{
Application.Run (new AnalyzerForm ());
}
}
命令行:csc /t:winexe /res:buttons.bmp,Buttons Expressalyzer.cs
8、用IE测试在客户端不用和使用XSL T时显示XML页的不同。

9、使用Quotes.aspx在服务器端实现从XML到HTML的转换。

Quotes.aspx为:<%@ Page Language="C#" %>
<%@ Import Namespace="System.Xml.XPath" %>
<%@ Import Namespace="System.Xml.Xsl" %>
<%
XPathDocument doc =
new XPathDocument (Server.MapPath ("Quotes.xml")); XslTransform xsl = new XslTransform ();。

相关文档
最新文档