通过 XML 集成 ASP.NET 和 ActionScript 3.0
循序渐进:使用 ASP.NET 和 Flash CS3 构建动态新闻应用程序。
目录
引言
我之所以想到写这篇文章,是因为我自己在网上搜索了很长时间,试图找到一篇关于如何使用 XML 集成 ASP.NET 和 ActionScript 的类似文章。而且,根据我的 Google 搜索结果,我没有找到任何一篇。而且,我认为没有一篇文章是关于如何在一个平台和另一个平台之间传递大量数据,以最大限度地利用这种集成所带来的巨大可能性的。我找到的唯一一篇文章是 这篇文章[^],它解释了如何通过 URL 查询字符串和其他技术传递变量的小值。在这篇文章中,我将尝试解释如何使用 Flash CS3 和 ASP.NET 构建一个基本而简单的**新闻应用程序**,以及如何使用 ASP.NET 应用程序更新 SWF 文件中的新闻标题和描述。这可以通过一个 XML 文件来实现。
使用 C# 配合 ActionScript 和 XML 能够带来巨大的力量。我喜欢称之为“开发的Triple Power”。它能激发想象力,并为利用这三种技术的强大功能创建令人惊叹的动态动画提供新的可能性。
注意:要构建这样的应用程序,您需要对 ActionScript 3.0 语言有扎实的基本知识,以及您的 C#(或其他 .NET 语言)知识。
项目步骤
我将在此解释的这个简单而深刻的项目取决于三个基本阶段
- 设计 XML 文件结构。
- 创建基本的 ASP.NET 应用程序。
- 创建 Flash 新闻应用程序。
项目详情
1. 构建 XML 文件
我在这里构建的 XML 文件非常简单。它包含在项目文件中的news.xml。我尽量使结构尽可能简单,但它是本项目的关键要素。而且,其他一切都依赖于它。应用程序的思路是创建一个可从 ASP.NET 更新的新闻阅读器应用程序。应用程序将从 XML 文件节点读取数据,并将更多新闻追加到该文件中。XML 文件基本看起来是这样的
<?xml version="1.0"?>
<news>
<headline>
<title>Information Age</title>
<body>this is the Information Age. :)</body>
</headline>
<headline>
<title>xml is amazing</title>
<body>it is really amazing working with xml.
you can link ASP.NET with Flash files easily.</body>
</headline>
<headline>
</news>
正如您所见,根节点是<news>
,在 ASP.NET 语言中是文档节点。它有一个名为<headline>
的子节点,其中包含两个子元素:新闻的<title>
和新闻的<body>
。这就是构建一个非常基本和简单的 XML 文件以连接两个平台所需的一切。
注意:当然,您可以让 XML 文件保持为空,除了基本的根<news>
和</news>
标签。我手工填充一些数据是为了基本演示文件的最终外观以及项目首次运行时它在 SWF 文件中的显示效果。
2. 构建 ASP.NET 应用程序
现在,我们来构建 ASP.NET 应用程序以将新闻添加到 XML 文件。您首先需要创建一个新页面,并向其中添加两个TextBox
控件和一个Button
,如图所示。然后,双击按钮进入Click
事件,以下是代码如何处理此事件
protected void Button1_Click(object sender, EventArgs e)
{
string newstitle = TextBox1.Text.Trim();
string newsbody = TextBox2.Text.Trim();
if (newstitle != String.Empty && newsbody != String.Empty)
{
XmlDocument news = new XmlDocument();
news.Load(Server.MapPath("news.xml"));
XmlNode headline = news.CreateNode(XmlNodeType.Element,
"headline", String.Empty);
XmlNode title = news.CreateNode(XmlNodeType.Element,
"title", String.Empty);
XmlNode body = news.CreateNode(XmlNodeType.Element,
"body", String.Empty);
body.InnerText = newsbody;
title.InnerText = newstitle;
news.DocumentElement.AppendChild(headline);
headline.AppendChild(title);
headline.AppendChild(body);
news.Save(Server.MapPath("news.xml"));
Server.Transfer(Request.Path);
}
}
该代码仅从TextBox
中提取值,并使用System.Xml
命名空间提供的XMLDocument
类将其插入 XML 文件(请记住在页面顶部放置一个using
声明)。另请注意Server.MapPath("news.xml")
函数的使用,以指定 XML 文件的路径,否则,类将无法加载它,因为它需要知道文件的完整物理路径。
我不想让 ASP.NET 应用程序更复杂,但当然,我可以让它在一个GridView
中显示新闻标题和正文,并修改GridView
,以便网站管理员能够使用相同的XmlDocument
类从 XML 文件中进行更新和删除。但是,为了保持简单,并专注于本文的主要思想,即如何将大量数据从 ASP.NET 传递到 SWF 以及反之亦然,我将把 ASP.NET 停在这个阶段,然后进入构建 SWF 新闻应用程序的细节。
3. 构建 Flash 新闻应用程序
注意:您需要熟悉 Flash CS3 设计环境并具备 ActionScript 3.0 的基本知识,才能应用以下步骤。
A. 准备舞台
启动一个启用了 ActionScript 3.0 的新文档,并根据您的喜好进行格式化。对我来说,一个 300x400 的白色背景项目就足够了。现在,创建一个新图层(将第一个图层留空,以便稍后应用 ActionScript 代码),然后放置一个TextField
控件来容纳将从 XML 文件中的<title>
标签获取的新闻标题。创建另一个图层,并放置另一个TextField
控件来容纳将从 XML 文件中的<body>
标签获取的新闻正文文本。调整两个TextField
的大小以适应其目的。现在,使用菜单选择:插入 -> 新建元件 -> 影片剪辑,并将其命名为“rightarrow”。在影片剪辑内部,添加一个小的向右箭头图像并将其居中。然后,点击主场景按钮返回主舞台。对左箭头按钮执行相同的操作。
创建另一个图层,并向其中放置两个箭头按钮影片剪辑。使用“属性”窗口,选择每个TextField
,并将它们设置为“动态文本”而不是“静态文本”,这样它们将在运行时动态更改。给它们实例名称,以便在 ActionScript 代码中引用它们。例如:titlenews
用于标题TextField
,bodynews
用于正文TextField
。您可以根据需要设置填充数据时TextField
的颜色、文本和字体大小。我还创建了一个小的动画标题“IT-Center News!”影片剪辑,并将其添加到舞台顶部,使其看起来更美观,并应用了一个简单的运动补间。现在,选择每个箭头影片剪辑并给它们实例名称。
现在,转到第一个图层,点击时间轴上的第一帧,然后按 F9 打开“动作”窗口。
B. 添加代码
首先,我们需要进行一些导入才能使用TextField
和 XML 类。
import flash.text.*;
import flash.xml.*;
然后,我们定义将在应用程序中使用的变量
var newsrequest:URLRequest = new URLRequest("news.xml");
var newsloader:URLLoader = new URLLoader();
var newsxmllist:XMLList;
var newsxml:XML;
var nodename:XMLList;
var nodename2:XMLList;
这里,基本上,我们需要使用URLLoader
类来加载 XML 文件,并在文件加载完成后触发Completed
事件。我们还需要使用 XML 类来保存加载器中的 XML 数据,以及XMLList
类来保存 XML 类的子节点,以便我们可以遍历它们并进行测试,如下面将要解释的。
然后,我们继续添加事件监听器,它们是
URLLoader
类Completed
事件的事件监听器。- 按钮影片剪辑的
MouseOver
事件,以赋予它们按钮鼠标指针。 - 按钮影片剪辑的
MouseClick
事件。
现在,通过调用load()
方法并传递我们之前声明的URLRequest
来让URLLoader
开始工作。然后,我们开始处理事件。在这里,我将只专注于解释URLLoader
事件函数背后的逻辑。
function loaded(event:Event):void
{
newsxml = new XML(event.target.data);
newsxml.ignoreWhitespace = true;
newsxmllist = newsxml.children();
nodename = newsxmllist.elements("title");
nodename2 = newsxmllist.elements("body");
titlenews.text = nodename[0];
bodynews.text = nodename2[0];
}
我们现在将 XML 类分配给一个新对象,并将来自URLLoader
对象(即此事件的目标)的数据传递给它。然后,我们将ignoreWhitespace
属性设置为true
,以忽略 XML 文档中可能包含的空格,这样它就不会将其视为新节点。
然后,我们将第一个XMLList
“newsxmllist
”赋值给保存 XML 对象的所有子节点。子节点是<news>
根标签下的子节点集合。然后,我们将第二个XMLList
“nodename
”赋值给保存newsxmllist
集合中所有<title>
标签的集合,并将第三个也是最后一个XMLList
“nodename2
”赋值给保存newsxmllist
中<body>
标签的文本。
现在,如果您想制作一个自动滚动应用程序,您将遍历XMLList
集合,并根据计时器类更改它们的x位置。但是,正如我之前所说,我不想在这里进行冗长的过程,因为我想将重点放在主要思想上,即如何在 ASP.NET 和 ActionScript 3.0 之间交换大量数据。所以,基本上,下面的代码会抓取第 0 个节点并将其显示在我们之前在舞台上分配的titlenews
和bodynews
TextField
中。这正是处理应用程序核心的 ActionScript 应用程序的主要功能。
现在,按钮函数非常简单,它们只测试当前新闻标题是否达到title
节点的长度上限。如果为真,则“Next”按钮将从头开始,再次显示第 0 个节点。对于“Previous”按钮,情况则相反,它测试当前显示的标题是否等于第 0 个节点,如果为真,则通过调用XMLList
的长度减 1 来显示最大节点标题和正文(请记住,节点数组从 0 开始计数,这使其比实际长度少 1)。
最后,调用处理MOUSE_OVER
事件并更改鼠标光标的按钮函数。
注意:对于应用程序来说,至关重要的是在函数外部声明所有XMLList
,以便其他函数可以使用它们及其当前值。如果您在URLLoader
内部定义它们,鼠标事件将无法使用它们来跟踪当前从 XML 文件中显示哪个节点。因此,请确保在任何函数外部定义它们,应用程序才能正常工作。
C. 发布 Flash
再次打开.aspx文件,并将 SWF 文件添加到其中。另外,请确保将 XML 文件与 SWF 和aspx文件放在同一个目录下,因为示例代码就是这样编写的。
注意:您可能需要关闭并重新打开浏览器才能强制其重新加载 SWF 文件。然后,您将能够在其中看到您的最新添加内容。
结论
您可以测试新闻应用程序,并体验 ASP.NET、ActionScript 和 XML 这三重力量的魔力。继续释放您的想象力,开始添加我在本文中提到的高级概念,以更好地改进新闻应用程序的功能。您可以添加更多动画和媒体,以获得更令人惊叹的外观和感觉。您可以在应用程序中创建一个管理控制面板,让管理员从其中控制 SWF 文件的内容。您甚至可以开始从 SWF 传递数据回 ASP.NET 并让 ASP.NET 接收和显示它。还可以构思更多伟大的项目和想法,使其远远超越这个简单的新闻应用程序。