这个教程是用Visual Studio.net 2008建立,也可以使用VS2005,但你需要从这里下载安装Microsoft's ASP.NET AJAX Extensions,AJAX和LINQ是微软目前主要焦点,两个看上去不足为奇,但背后都隐藏着巨大的潜力和力量。在这个示例中,我们将看到如何用AJAX同LINQ,XML创建一个Web应用程序,我们能用看到瞬间存储数据,也能瞬间增加数据。AJAX提供简单易用的方式平稳高效地创建应用程序。如果是一个桌面应用程序,而LINQ提供了一种方式与XML文件和数据存储进行交流和互动。
    首先,我们需要做的是创建我们的XML文件。对于这个例子中,我们将使用像这样:

<?xml version="1.0" encoding="utf-8"?>
<Persons> 
<Person> 
<Name>Paxton</Name>
<City>Munich</City>
<Age>29</Age>
</Person>
<Person> 
<Name>Mike</Name>
<City>Orlando</City>
<Age>33</Age>
</Person>
</Persons>

我们将创建一种既读取和写入XML文件:我们将需要三个Textbox和一个增加的Button,然后是另一个button和一个用于读去的textbox。我们将构建一个这样类似的Form:

<form id="form1" runat="server"> 
<strong>Add to XML</strong><br />
Name:<br />
<asp:TextBox ID="txtName" runat="server" /><br />
City:<br />
<asp:TextBox ID="txtCity" runat="server" /><br />
Age:<br />
<asp:TextBox ID="txtAge" runat="server" /><br />
<asp:Button ID="butAdd" runat="server" Text="Add" onclick="butAdd_Click" /><br />
<asp:Label ID="lblStatus" runat="server" />
<br /><br />
<strong>Read XML:</strong><br />
<asp:Button ID="butRead" runat="server" Text="Read" onclick="butRead_Click" /><br />
<asp:TextBox ID="txtResults" runat="server" Columns="25" Rows="10" 
TextMode="MultiLine" />
</form> 

注意那是我们的buttons有一个OnClick 句柄指向一个方法。我们将这几分钟完成,但首先,让我们完成我们的ASPX页面。剩下的事儿是使页面的AJAX生效。我们增加一个ScriptManager和一个UpdatePanel,像这样:

<form id="form1" runat="server"> 
<asp:ScriptManager id="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="updAdd" runat="server">
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="butAdd" EventName="Click" />
</Triggers>
<ContentTemplate> 
<strong>Add to XML</strong><br />
Name:<br />
<asp:TextBox ID="txtName" runat="server" /><br />
City:<br />
<asp:TextBox ID="txtCity" runat="server" /><br />
Age:<br />
<asp:TextBox ID="txtAge" runat="server" /><br />
<asp:Button ID="butAdd" runat="server" Text="Add" onclick="butAdd_Click" /><br />
<asp:Label ID="lblStatus" runat="server" />
<br /><br />
<strong>Read XML:</strong><br />
<asp:Button ID="butRead" runat="server" Text="Read" onclick="butRead_Click" /><br />
<asp:TextBox ID="txtResults" runat="server" Columns="25" Rows="10" 
TextMode="MultiLine" />
</ContentTemplate>
</asp:UpdatePanel>
</form>

在我们开始编码之前,我们应该务必使用正确的名称空间。我们将使用LINQ TO XML,所以我们需要 System.Xml.Linq。代码看上去像这样:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

现在回到Buttons,我们已经增加了一个Button的句柄,所以我们现在完成了ASPX页面,现在可以编写我们方法了,我们将创建一个读去XML文件的方法,这个方法使一次或更多(你过会儿将看其它button的Click就知道为什么了)。我们的方法写成像这样:

        protected void readXML()
        {
            XDocument xmlDoc = XDocument.Load(Server.MapPath("People.xml"));

var persons = from person in xmlDoc.Descendants("Person")
                          select new
                          {
                              Name = person.Element("Name").Value,
                              City = person.Element("City").Value,
                              Age = person.Element("Age").Value,
                          };

txtResults.Text = "";
            foreach (var person in persons)
            {
                txtResults.Text = txtResults.Text + "Name: " + person.Name + "\n";
                txtResults.Text = txtResults.Text + "City: " + person.City + "\n";
                txtResults.Text = txtResults.Text + "Age: " + person.Age + "\n\n";
            }

if (txtResults.Text == "")
                txtResults.Text = "No Results.";
        }

这方法使用了LINQ连接XML文件,然后选择文件里全部数据。一个选取,我们循环每条“record”输出到textbox控件。我们这种方法为button的Click的事件:

       protected void butRead_Click(object sender, EventArgs e)
        {
            readXML();
            lblStatus.Text = "";
        }

接下来是增加数据到XML文件。这实际上需要比读去更少的代码量,我们将在button的click事件下直接编码。就这儿一样:

       protected void butAdd_Click(object sender, EventArgs e)
        {
            try
            {
                XDocument xmlDoc = XDocument.Load(Server.MapPath("People.xml"));
              
                xmlDoc.Element("Persons").Add(new XElement("Person", new XElement("Name", txtName.Text),
                new XElement("City", txtCity.Text), new XElement("Age", txtAge.Text)));

xmlDoc.Save(Server.MapPath("People.xml"));
                lblStatus.Text = "Data successfully added to XML file.";
                readXML();
            }
            catch
            {
                lblStatus.Text = "Sorry, unable to process request. Please try again.";
            }
        }

我们使用try,catch语句减少错误处理。接着,我们使用LINQ增加数据到XML文件。当我们第一次加载文件时,然后我们简单增加了一个新的element到父element,请看到前面提及XML结构有助于理解。

完整的code-behind是这样的:

code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;

namespace THttpModule.LinqtoXml
{
    public partial class Add : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

}

protected void butRead_Click(object sender, EventArgs e)
        {
            readXML();
            lblStatus.Text = "";
        }

protected void butAdd_Click(object sender, EventArgs e)
        {
            try
            {
                XDocument xmlDoc = XDocument.Load(Server.MapPath("People.xml"));
              
                xmlDoc.Element("Persons").Add(new XElement("Person", new XElement("Name", txtName.Text),
                new XElement("City", txtCity.Text), new XElement("Age", txtAge.Text)));

xmlDoc.Save(Server.MapPath("People.xml"));
                lblStatus.Text = "Data successfully added to XML file.";
                readXML();
            }
            catch
            {
                lblStatus.Text = "Sorry, unable to process request. Please try again.";
            }
        }

protected void readXML()
        {
            XDocument xmlDoc = XDocument.Load(Server.MapPath("People.xml"));

var persons = from person in xmlDoc.Descendants("Person")
                          select new
                          {
                              Name = person.Element("Name").Value,
                              City = person.Element("City").Value,
                              Age = person.Element("Age").Value,
                          };

txtResults.Text = "";
            foreach (var person in persons)
            {
                txtResults.Text = txtResults.Text + "Name: " + person.Name + "\n";
                txtResults.Text = txtResults.Text + "City: " + person.City + "\n";
                txtResults.Text = txtResults.Text + "Age: " + person.Age + "\n\n";
            }

if (txtResults.Text == "")
                txtResults.Text = "No Results.";
        }

}
}

下载示例项目

原文:Using AJAX, LINQ and XML in C#
http://www.ajaxtutorials.com/ajax-tutorials/using-ajax-linq-and-xml-in-c/

另:实际上判断字符串空可以用String.IsNullOrEmpty方法。
翻译:Petter  (版权归原作者)
http://wintersun.cnblogs.com

转载于:https://www.cnblogs.com/wintersun/archive/2008/10/04/1303893.html

一个简单的LINQ TO XML, AJAX 例子[译]相关推荐

  1. 2021-05-19 一个简单有趣的LQR控制可视化例子及代码

    来源:https://github.com/aerojunkie/control-tools/blob/master/ufo_rotate.m 一个简单的LQR例子 close all% Initia ...

  2. BoltDB 一个简单的纯 Go key/value 存储 [译]

    作者:wolf4j 链接:https://www.jianshu.com/p/cb1b05aa7dd2 boltDB Blot Bolt 是由 Howard Chu 的 LMDB 项目启发的一个纯粹的 ...

  3. python入侵数据库数据库_一个简单的Python访问Mysql数据库例子

    2020/11/3操作记录 搭建好Python的数据环境之后,接下来就是在Python代码中访问数据库我先在Navicat图形化界面创建一个数据库命名为pythontest,再在数据库中创建了一个表s ...

  4. 一个简单的css网页换色例子(盒子模型)

    原始的代码来自北京林业大学的MOOC课程:web前端开发,我自己把这个例子又写了一遍,主要是对css部分做了修改(盒子模型杀我),js和HTML部分与课程的源代码基本相同.现在记录一下,首先是代码: ...

  5. 一个简单的DELPHI自定义事件的例子(转)

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  6. java ajax简单实例_JAVA编写的AJAX例子,很简单,但是很容易理解详解

    非原创,但是从哪来的我也忘了,呵呵! window.onload = function() { CreateDateSelect(); } var xmlHttp = false; var e; // ...

  7. 词法分析程序 LEX和VC6整合使用的一个简单例子

    词法分析的理论知识不少,包括了正规式.正规文法.它们之间的转换以及确定的有穷自动机和不确定的有穷自动机等等... 要自己写一个词法分析器也不会很难,只要给出了最简的有穷自动机,就能很方便实现了,用if ...

  8. 如何写一个简单java接口的例子(内容详细,适合初学者)

    这里说一个简单的java接口的小例子(一个接口类,两个实现类) 先新建一个动态web工程: 我的项目目录是这样子的(接口写完之后目录) 先在test0609_test1包下new 一个interfac ...

  9. [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之jetty篇(一)...

    上次介绍了怎么在eclipse中添加本地依赖类,这次带来的是一个简单的SSH2整合maven-jetty-plugin的例子,jetty估计都不陌生了,它是一个基于是一个开源的servlet容器,它为 ...

最新文章

  1. mysql merge 分区
  2. tomcat下manager配置
  3. excel公式中的$(美元符号)的作用
  4. 基类指针和子类指针相互赋值
  5. spring自动装配依赖包_解决Spring自动装配中的循环依赖
  6. laravel redis_php session 存储到redis里
  7. Java-XML解析第一篇主流开源类库解析XML
  8. Gson将json转Map的那些坑
  9. VARCHART XGantt系列教程:如何在分组视图中更好地显示节点
  10. cad 绘制直线 设定长度 角度
  11. 建立TCP连接的时候,syn包什么情况下会被对端rst?
  12. 自我管理-贝尔宾团队角色理论
  13. html公用页脚使用代码,页脚在HTML
  14. 正则改造VS Code里React类组件的自定义snippet
  15. java html5 cms,企业内部cms业务管理系统html5简洁的模板
  16. Core Animation (2)
  17. vue2引入阿里巴巴图标字体库的lottie动画
  18. System.Diagnostics.Process.Start的妙用
  19. 融汇小学计算机课程,《小学信息技术行走课堂》读书心得
  20. 2022Q3手机配件增长榜:手机壳、数据线等供求不断增加

热门文章

  1. [BZOJ3992]序列统计
  2. 管控研发部门USB设备
  3. zabbix自动发现监控磁盘(iops和读写量)
  4. 由单例模式造成的内存泄漏
  5. C#:委托基础与事件
  6. 圆环划痕检测halcon
  7. OpenCV学习笔记(五十四)——概述FaceRecognizer人脸识别类contrib
  8. java测试类生成对象,java编写student类 用Java编写一段测试程序,生成student类的两个对象,并输出每个对象基本信息?...
  9. java 单例设计_Java 之单例设计模式
  10. python替换img的路径为新的路径_以“五智”为核心 南宁电信打造5G时代数字家庭新路径...