使用ASP与XML/XSL存储与展示数据的实战指南

本文详细介绍了如何使用经典的ASP技术结合XML文件存储用户提交的表单数据,并通过XSLT将数据动态转换为HTML表格进行展示。文中包含了完整的代码示例和分步实现过程,涵盖了表单处理、数据验证、XML节点操作以及XSL转换等核心技术。

使用ASP与XML/XSL存储与展示数据

关键词

  • 本文提供了关于如何使用ASP表单向XML文件添加数据、检索数据并以表格格式显示的详细指南。数据包括用户的姓名、年龄、性别和邮政编码。
  • 作者建议将ASP页面分为两部分以便于理解和管理:一部分用于表单,第二部分用于保存数据的ASP代码。
  • 该指南包含了关于如何从表单检索数据、将其保存到XML文件以及使用XSL进行显示的分步过程。该过程涉及创建变量、检查错误、将数据保存到XML文件,最后显示数据。
  • 文章还强调了XSL的通用性,这是一种将XML转换为HTML的语言,可用于使Web表单具有专业的外观和更好的结构。它还提到了XSL的其他功能,如排序、过滤以及处理变量和条件。

引言

存储和显示数据是处理应用程序时的一项基本任务。无论您处理的是桌面应用程序还是Web应用程序,保存和显示过程几乎总是必需的。 在本文中,我将展示如何轻松地使用ASP表单将数据添加到XML文件,如何检索这些数据,以及如何在结构良好的表格中显示它们。 我们将创建一个示例ASP页面,用户可以在其中输入其姓名、年龄、性别和邮政编码。这些数据将存储在XML文件中,并使用XSL显示。示例ASP页面和生成的表格将如下所示:

ASP页面结构

一些程序员喜欢混合他们的ASP和HTML代码,但我不建议这样做。我发现只要有可能,将ASP页面分为两部分总是很有帮助的,我建议您也这样做。 以下是我的ASP页面的结构: 第一部分包含一个简单的表单,第二部分包含将为我们执行保存操作的ASP代码。为了更好地理解,让我们从表单开始看。

表单

您可以使用您喜欢的任何控件创建一个简单的表单。除了您包含的控件外,我们还需要一个提交按钮和一个重置按钮。 在这个例子中,我创建了一个名为 frmPerson 的简单表单,它包含三个文本字段和一个下拉字段。我们将使用POST方法来处理输入到此表单的数据。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<form action="VerifyPerson.asp" method="post" name="frmPerson" id="frmPerson">
  <INPUT name=Name>
  <INPUT name=Age>
  <SELECT style="WIDTH: 154px" name=Gender>
    <OPTION value=Male selected>Male</OPTION>
    <OPTION value=Female>Female</OPTION>
  </SELECT>
  <INPUT name=Postalcode>
  <INPUT type=submit value=Submit name=submit>
  <INPUT type=reset value=Reset name=reset>
</form>

为每个将保存数据的标签指定一个变量名非常重要。例如,姓名文本字段 <INPUT name=Name> 包含变量 Name。为了从表单中检索数据,我们将在下一个ASP段落中使用这个变量和其他变量。为了熟悉ASP和XML,我建议您下载示例并仔细研究。 好了,ASP页面的第一部分完成了。第二部分将更加简单!

ASP代码

现在,我将通过7个简单的步骤向您展示如何从表单中检索数据,并将其保存到XML文件中。

  1. 第一步当然是检查用户是否按下了提交按钮!为此,我们将使用JScript函数 count
1
2
3
4
5
6
7
8
var submit = Request.Form("submit").Count;
if( submit > 0 ){
  // 用户按下了提交按钮
  // 保存数据的代码将在这里执行。
}
else {
  // 我们也可以将表单放在这部分代码中,但这部分代码必须用Jscript编写,尽管不推荐这样做。
}
  1. 第二步,我们需要从表单中检索数据,并将其存储在适当的变量中。为了检索数据,我们将使用 Request.Form("variable_name"); 函数。 所以让我们创建4个变量,并检索所需的数据:
1
2
3
4
var name = Request.Form("Name");
var age = Request.Form("Age");
var gender = Request.Form("Gender");
var pcode = Request.Form("PostalCode");
  1. 第三步是检查用户是否在表单中输入了任何数据。为此,我们只需检查第2步中的变量是否为空。
1
2
3
4
5
6
7
var error = "";
if ( name == "" )
  error = "Name ";
if ( age == "" )
  error += "Age ";
if ( pcode == "")
  error += "PostalCode ";
  1. 在第3步中,我们将结果保存在 var error 中。现在我们需要检查error是否包含任何数据。如果有,那么我们知道我们找到了一个错误,并将其显示为错误。如果error为空,那么我们将继续执行保存过程。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
if(error!=""){
  //我们发现了错误,所以向用户显示!
  Response.Write("请输入以下数据:<br>");
  Response.Write("<b>");
  Response.Write(error);
  Response.Write("</b>");
}
else{
  //一切正常,让我们开始保存数据。
}
  1. 现在我们已经执行了必要的检查,我们可以保存数据了。 为此,我们将把 Person.xml 文件加载到XML文档中。然后,我们将加载当前节点列表以获取当前根节点,使用函数 xmlDoc.getElementsByTagName。 完成后,我们将需要创建所需的节点。这可以通过函数 xmlDoc.createElement("AnyNodeName") 实现。最后,我们需要将输入到表单中的数据保存到适当的XML变量中。这是您需要的代码:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
else{
  // 加载所需的xml文件
  var xmlDoc=Server.CreateObject("MICROSOFT.FreeThreadedXMLDOM");
  xmlDoc.async="false";
  xmlDoc.load(Server.MapPath("Person.xml"));

  // 获取当前根节点
  var nodeList = xmlDoc.getElementsByTagName("PersonList");
  if(nodeList.length > 0){
    var parentNode = nodeList(0) ;

    // 创建所需的节点
    var personNode = xmlDoc.createElement("Person");
    var nameNode = xmlDoc.createElement("Name");
    var ageNode = xmlDoc.createElement("Age");
    var genderNode = xmlDoc.createElement("Gender");
    var pcodeNode = xmlDoc.createElement("PostalCode");

    // 将我们在第2步中检索到的变量分配给xml变量
    nameNode.text = name;
    ageNode.text = age;
    genderNode.text= gender;
    pcodeNode.text = pcode;
  1. 第六步! 首先,我们将把创建的节点附加到父节点。这可以通过函数 parentNode.appendChild("personNode"); 来完成。
1
2
3
4
5
    parentNode.appendChild(personNode);
    personNode.appendChild(nameNode);
    personNode.appendChild(ageNode);
    personNode.appendChild(genderNode);
    personNode.appendChild(pcodeNode);
  1. 最后,我们将使用函数 xmlDoc.save(Server.MapPath("Person.xml")); 将节点保存到XML文件。
1
2
    // 7) 现在将节点保存到文件
    xmlDoc.save(Server.MapPath("Person.xml"));

使用XSL显示数据

到目前为止,我们已经看到了如何保存网站用户通过我们的表单提交的数据。但我们如何显示它呢?我们将使用ASP和XSL来显示数据。 我们需要做的第一件事是加载XML文件,这可以通过XML解析器轻松实现。Microsoft的XML解析器随Internet Explorer 5.0提供。 将XML文件加载到文档对象后,您可以通过DOM对象检索XML数据。首先,我们必须加载XSL文件:

1
2
3
4
5
6
7
8
      // 此部分用于显示数据
      var objXMLDoc = Server.CreateObject("MICROSOFT.FreeThreadedXMLDOM");
      objXMLDoc.async = false;
      objXMLDoc.load(Server.MapPath("person.xml"));

      var xsl=Server.CreateObject("MICROSOFT.FreeThreadedXMLDOM");
      xsl.async = false;
      xsl.load(Server.MapPath("person.xsl"));

现在我们已经将两个文件分别加载到它们自己的DOM对象中。接下来,我们需要创建一个查询来为我们选择节点。当然,我们可以选择特定的节点,但现在,我们只选择根节点,这样,所有其他节点将自动被选中。

1
2
        var xmlQuery="//Person";
        var docHeadlines=objXMLDoc.documentElement.selectNodes(xmlQuery);

接下来我们只需要遍历节点以显示每个存储的项目。

1
2
3
4
5
6
7
8
        var numNodes;
        numNodes=docHeadlines.length;

        var nn;
        for(var i=0;i<numNodes;i++){
          nn = docHeadlines.nextNode();
          Response.Write(nn.transformNode(xsl));
        }

现在您知道了如何将XSL文件加载到DOM对象中。但是XSL文件是什么样子的呢?XSL还能为您做什么? XSL是一种将XML转换为HTML的语言。当然,您也可以使用简单的HTML和ASP来显示数据,但为了使Web表单具有专业的外观和更好的结构,您需要使用XSL。 然而,XSL能提供的比我们在这里探索的要多得多。例如,它可以提供排序和过滤等功能。在一个简单的ASP网站中,您还可以使用XSL来处理变量、条件以及循环。当然,我无法在本文中涵盖所有内容,但您应该了解XSL能提供什么。 现在,这是我们构建的XSL文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
      <xsl:stylesheet xmlns:xsl="https://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="Person">
      <tr>
      <td><font face="verdana" size="2"><xsl:value-of select="Name"/></font></td>
      <td><font face="verdana" size="2"><xsl:value-of select="Age"/></font></td>
      <td><font face="verdana" size="2"><xsl:value-of select="Gender"/></font></td>
      <td><font face="verdana" size="2"><xsl:value-of select="PostalCode"/></font></td>
      </tr>
    </xsl:template>
  </xsl:stylesheet>

在第一行,我们使用 <xsl:stylesheet> 元素告诉文档这是一个XSL样式表。然后,我们告诉XSL它必须从XML文件的哪个元素开始,使用 <xsl:template match="Person"> 我们选择了 Person 元素,因为这是最重要的元素。其下的所有数据都将被自动选择。 最后,为了显示XML元素的值,我们只需实现 <xsl:value-of-select="element name"/> 标签,该标签会检索元素的值。

结论

就这样!现在您已经创建了一个功能完善的系统,可以保存、读取和显示表单中的数据。您已经了解了ASP、XML和XSL的优势。为了进一步练习,我建议您修改ASP页面以创建自己的地址簿。 下载本教程中使用的示例文件,编程愉快!

关于使用ASP和XML/XSL显示数据的常见问题(FAQ)

如何在经典ASP中存储连接字符串? 存储经典ASP的连接字符串有几种方法。一种常见的方法是将其存储在ASP页面引用的包含文件中。出于安全原因,此文件应存储在无法直接从Web访问的目录中。然后,您可以在ASP页面中使用 Server.MapPath 方法来引用此文件。此方法允许您在一个地方更改连接字符串,并在所有页面中更新它。

我可以在ASP.NET页面中使用经典ASP的include virtual吗? 是的,您可以在ASP.NET页面中使用经典ASP的 include virtual。但是,需要注意的是,包含指令是由ASP引擎在ASP.NET引擎之前处理的。这意味着包含文件中的任何ASP.NET代码都不会被处理。要包含ASP.NET代码,您应该使用ASP.NET的用户控件(.ascx)或母版页(.master)功能。

.NET中的System.Web.UI.WebControls.Xml类是什么? .NET中的 System.Web.UI.WebControls.Xml 类是一个服务器控件,允许您在网页上显示XML数据。您可以使用此控件绑定到XML文件或包含XML数据的字符串。您还可以使用 TransformSourceTransform 属性对XML数据应用XSL转换。

Azure虚拟桌面的定价如何运作? Azure虚拟桌面是一项Microsoft服务,允许您在云中运行虚拟桌面。该服务的定价基于您使用的资源,例如虚拟机数量和存储量。您可以选择即用即付,也可以预先预留资源以获得更低的成本。

如何使用XSL在ASP中显示XML文件的数据? 要使用XSL在ASP中显示XML文件的数据,首先需要将XML文件加载到XMLDOM对象中。然后,您可以将XSL文件加载到另一个XMLDOM对象中。然后,您可以使用XMLDOM对象的 transformNode 方法将XSL转换应用于XML数据。然后可以将结果输出到网页。

使用ASP和XML/XSL显示数据时如何处理错误? ASP中的错误处理可以使用 On Error Resume Next 语句完成。此语句允许脚本即使在发生错误时也继续运行。然后,您可以使用 Err 对象检查是否发生了错误并相应地处理它。

我可以使用ASP显示数据库中的数据吗? 是的,您可以使用ASP显示数据库中的数据。您可以使用 ADODB.ConnectionADODB.Recordset 对象连接到数据库并检索数据。然后,您可以使用 Response.Write 方法将此数据输出到网页。

如何提高ASP页面的性能? 有几种方法可以提高ASP页面的性能。一种方法是谨慎使用服务器端包含,因为它们会减慢页面速度。另一种方法是使用 Response.Buffer 属性缓冲页面的输出,这样可以减少到服务器的往返次数。

我可以将ASP与其他编程语言一起使用吗? 是的,您可以将ASP与其他编程语言一起使用。ASP是一种用于创建动态网页的脚本语言。您可以将其与JavaScript、VBScript和C#等其他编程语言一起使用。

如何保护我的ASP页面? 保护您的ASP页面有几种方法。一种是使用SSL加密在客户端和服务器之间发送的数据。另一种方法是使用表单验证来防止SQL注入攻击。您还可以使用会话变量来跟踪用户身份验证并限制对某些页面的访问。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计