一个简单的LINQ TO XML, AJAX 例子[译]

      这个教程是用Visual Studio.net 2008建立,也可以使用VS2005,但你需要从这里下载安装Microsoft's ASP.NET AJAX ExtensionsAJAXLINQ是微软目前主要焦点,两个看上去不足为奇,但背后都隐藏着巨大的潜力和力量。在这个示例中,我们将看到如何用AJAXLINQ,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文件的方法,这个方法使一次或更多(你过会儿将看其它buttonClick就知道为什么了)。我们的方法写成像这样:

        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控件。我们这种方法为buttonClick的事件:

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

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

       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是这样的:

ContractedBlock.gifExpandedBlockStart.gifcode
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3性能还低吗_Python3 vs. Python2 大作战,谁将是性能之王?

渲染 HTML 模板 django_html 测试将使用 Django 模板渲染引擎来构建一个 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 类。如图所示&#xff0c;Python 3.7 比 Python 2.7 快 1.19 倍&#xff0c;但除此之外&#xff0c;其他 Python 3 版本都没有 Pyth…

python day08

一 文件处理补充 控制文件中光标移动 1 f.read(n): l.文件打开方式为文本模式的时,代表读取N个字符 ll.文件打开方式为b模式时,读取N个字节 强调:只有在read(n)模式下 N代表字符个数,除此之外的是以字节为单位 2 f.seek(): 光标移动是以字节为单位的整数移动. 三种模式:(分别为…

VSCode 小鸡汤 第00期 —— 安装和入门

简介 这将是一个新的系列&#xff0c;将会以 Visual Studio Code&#xff08;后文都简称为 VSCode 啦&#xff09;的操作&#xff0c;环境配置&#xff0c;插件介绍为主&#xff0c;为大家不定期的介绍 VSCode 的一些操作技巧&#xff0c;所以取名 VSCode 小鸡汤&#xff0c;本…

一次缓存性能问题排查

概述以下分享的都跳过了很多坑&#xff0c;包括redis、tomcat环境配置、机器硬件配置等等问题&#xff08;与线上保持一致&#xff0c;或者硬件性能减配系数&#xff0c;例如线上&#xff1a;8C16G&#xff0c;压测&#xff1a;4C8G&#xff0c;系数简单相差2倍&#xff09;&am…

再读新疆系列(六)——吹拂“卡拉库里湖”的风

一下飞机&#xff0c;导游王雪作了简短的自我介绍&#xff0c;马不停蹄地带着我们经喀什市区直接向帕米尔高原的“卡拉库里”湖走。 问午饭在哪吃&#xff1f; 答&#xff1a;“湖边”。 “几点能到&#xff1f;” “大约下午二点多。”妈呀&#xff0c;又经历一次残酷的饥饿历…

记录一次webpack3升级到webpack4过程

升级之前也参考了一些网上的教程。借鉴之&#xff0c;进行的自己的升级。一些版本为什么设为那个版本号也是参考别人的结果。 整体是按照先升级npm run dev&#xff1b;在升级npm run build的顺序。 首先升级webpack&#xff0c;在package.json文件中将webpack版本号修改为4.8.…

plsql如何执行存储过程_如何理解Spark应用的执行过程

从Spark应用的提交到执行完成有很多步骤&#xff0c;为了便于理解&#xff0c;我们把应用执行的整个过程划分为三个阶段。而我们知道Spark有多种运行模式&#xff0c;不同模式下这三个阶段的执行流程也不相同。本文介绍这三个阶段的划分&#xff0c;并概要介绍不同模式下各个阶…

vc如何打开plt图像_图像基本操作-open cv

import cv2 import matplotlib.pyplot as plt import numpy as np %matplotlib inline img cv2.imread(revolte.jpg) img # 读取的是array 格式 array([[[240, 243, 255],[239, 242, 255],[238, 241, 255],...,def cv_show(name,image):cv2.imshow(name,image)cv2.waitKey(0)c…

python调用api应用接口_Python接口测试之urllib2库应用

在接口测试中或者说在网络爬虫中&#xff0c;urllib2库是必须要掌握的一个库&#xff0c;当然还有优秀的requests库&#xff0c;今天重点来说urllib2库在接口测试中的应用。urllib2定义了很多的函数和类&#xff0c;这些函数和类能够帮助我们在复杂情况下获取URLS的内容。这些情…

CSS3透明背景表单

在线演示 本地下载

r-studio扫描后各种颜色_iPhone手机备忘录,原来还隐藏着扫描仪,你不会还不知道吧?...

大家好&#xff0c;今天就来给大家讲一讲&#xff0c;iPhone手机备忘录里面的一个隐藏功能&#xff0c;大家对手机备忘录应该都不陌生吧&#xff0c;iPhone手机的备忘录里有一个扫描仪的功能&#xff0c;可以将纸质文档变成电子档&#xff0c;不知道的小伙伴就和我一起来看看吧…

今早新闻的翻译

踏切で人身事故 東上線乱れ&#xff14;万人に影響  &#xff11;&#xff15;日午前&#xff17;時&#xff12;&#xff10;分ごろ、東京都板橋区常盤台&#xff13;丁目の東武東上線ときわ台―上板橋間の踏切で遮断機の下をくぐった女性が成増発池袋行き普通電車にはねられ…

TiDB 在小米的应用实践

作者&#xff1a;张良&#xff0c;小米 DBA 负责人&#xff1b;潘友飞&#xff0c;小米 DBA&#xff1b;王必文&#xff0c;小米开发工程师。一、应用场景介绍 MIUI 是小米公司旗下基于 Android 系统深度优化、定制、开发的第三方手机操作系统&#xff0c;也是小米的第一个产品…

java图片识别查看器模拟_[转载]windows照片查看器无法显示图片内存不足

问题描述最近在使用Windows照片查看器打开一个jpg文件的时候异常Windows照片查看器无法显示此图片&#xff0c;因为计算机上的可用内存可能不足。请关闭一些目前没有使用的程序或者释放部分硬盘空间(如果硬盘几乎已满)&#xff0c;然后重试问题分析这时我们按F11或者图片下方中…

智能云改-docker云迁移实战

本次安装的linux版本是centos7.4&#xff0c;docker安装不依赖任何环境&#xff0c;但是必须要连接网络&#xff0c;满足这一点就可以进行docker安装了。 一、安装&#xff1a; 1.删除就版本的docker输入命令&#xff1a;yum -y remove docker \docker-common \docker-selinux …

python词频统计代码_python统计词频

一、程序分析 &#xff08;1&#xff09;将文件读入缓冲区&#xff08;dst指文本文件存放路径&#xff0c;设置成形参&#xff0c;也可以不设&#xff0c;具体到函数里设置&#xff09; def process_file(dst): # 读文件到缓冲区try: # 打开文件 txtopen(dst,"r") ex…

Oracle的resouce、unlimited tablespace 及如何把数据导入不同的表空间

resouce是角色&#xff0c;unlimited tablespace是权限。 很多人在进行数据迁移时&#xff0c;希望把数据导入不同于原系统的表空间&#xff0c;在导入之后却往往发现&#xff0c;数据被导入了原表空间。本例举例说明解决这个问题:1.如果缺省的用户具有DBA权限那么导入时会按照…

.net开发是做什么的_软件开发是什么, 该怎么做?

软件开发是什么, 该怎么做&#xff1f;1 引子关于什么是软件开发存在很多观点&#xff0c;有的认为软件开发即服务&#xff0c;有的认为软件开发即产品&#xff0c;有的认为软件开发即平台&#xff0c;这些观点各有各的侧重点。这篇文章我们来学习和探讨一下软件开发。2 软件…

使用HTML5、CSS3和jQuery增强网站用户体验

记得几年前如果你需要添加一些互动元素到你的网站中用来改善用户体验&#xff1f;是不是立刻就想到了flash实现&#xff1f;这彷佛年代久远的事了。使用现在最流行的Web技术HTML5&#xff0c;CSS3和jQuery&#xff0c;同样也可以实现类似的用户体验。而且使用这些特性将会比使用…

python中loop函数_python + Django 的forloop功能试验讲解

一、forloop功能详解记录 遇到一个问题困扰了我好久&#xff0c;结果还是知识盲区造成的。下边记录一下。 通过return forloop可以返回前端循环中的索引值 二、forloop大概功能 forloop是Django模板中一个功能&#xff0c;主要是可以计算循环的对象的索引值&#xff08;大白话大…