标签存档: XML

XSL中的运算符与变量名

昨天在写XSL模板的时候,在模板中使用了一个变量,结果在调试的时候却怎么也不行,我的变量名是$ItemCount,然后在模板中使用了这个变量 :

  • <xsl:value-of select="Tag[position() = $ItemCount-1]" />

在调试时却总是提示“无法解析到变量或参数 'ItemCount-1'的引用。变量或参数可能没有被定义,或它可能不在范围内。”,我就奇怪了,这名字明明是对的,怎么会有错呢,然后就又在变量定义的地方把变量名给复制过来,看看还是不是会出错,结果还是一样的错误。

这下郁闷了,懒得伺候了,把东西扔一边,玩去了~

今天想到这个事,再不行这个模板总是要写完的,于是又开了EditPlus,找到那一句,就在想怎么改它,突然脑子里来了一点点灵光,在减号的两边各加了一个半角空格,Firefox里打开,bingo!正确执行。

在解决了这个问题之后才想到,短划线也就是“-”在XML里是符合命令规范的,也就是说,我在写成“$ItemCount-1”的时候,XSL Parser 把“$ItemCount-1”认为是一个变量,而不会认为是一个表达式,因此,就会提示找不到变量,出错。

找到问题的原因所在,就好解决了,直接把减号给独立出来:

  • <xsl:value-of select="Tag[position() = $ItemCount - 1]" />

解决问题,继续写模板。

XML+XSL+CSS+ASP打造留言簿

前段时间无意间看到一个博客的RSS可以用XSL格式输出并且能在Firefox里浏览,想到自己以前写的一个XML留言簿因为不兼容Firefox所不了了之了,现在看到他的能在Firefox浏览就觉得很好奇,看了一下代码,一句一句的比对,最后终于找到了原因,也就把这个留言簿给完成了。因为是一个简单的XML留言簿,所以取名SXGB(Simple XML GuestBook)。

查看留言本演示,管理密码为test:

首先定义留言簿的XML文档的格式。作为一个留言簿,不需要太复杂的内容,于是我就给留言内容分为3个部分:留言者姓名、留言者主页和留言内容。另外,一个留言簿还需要有使用者的一些信息,包括用户名和用户主页。再有,在留言比较多时还需要分页信息。大致结构完成后就可以开始写XML文档模板了。

XML文档根元素定义为gbook

XML文档模板gbook.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- DTD file -->
<!DOCTYPE gbook SYSTEM "sxgb.dtd">
<!-- XSL file -->
<?xml-stylesheet type="text/xsl" href="gbook.xsl"?>
<gbook>
<!-- 留言簿相关信息 -->
<info>
<!-- 用户名 -->
<user>HotHeart</user>
<!-- 用户主页 -->
<home>http://www.xujiwei.cn</home>
<!-- 分页信息,分别为目前所在页,总页数,上一页,下一页 -->
<pagenow>1</pagenow>
<pagetotal>1</pagetotal>
<pageprev>1</pageprev>
<pagenext>2</pagenext>
<!-- 是否已经登陆,用来处理是否显示登陆框 -->
<logined>NO</logined>


阅读全文 »

AJAX初体验之上手篇

AJAX是这两年蛮热的东西,我也凑凑热闹,前些天去找了些教程学学,下面就按整个处理过程把自己学的东西写写,不过,因为是初学,所以有错误就请见谅啦,也欢迎指正,vipxjw#163.com。

PS.写完了之后看了下,结果再次验证自己写教程真是乱得可以,东说一块西说一块,条理不太清楚的说:)。

1.创建 XMLHttpRequest 对象

现在的浏览器有很多种,创建 XMLHttpRequest 的方法也不相同,所以为了兼容各种浏览器,在创建 XMLHttpRequest 时也应该考虑到各种浏览器的情况。目前主流的浏览器在Windows下有IE、Firefox及Opera,所以我们写的代码要尽量兼容这几个浏览器。在参考了一些资料后,我用下面的方法来创建 XMLHttpRequest 对象:

// 先定义一个变量,并赋初值为 false,方便后面判断对象是否创建成功
var xmlObj = false;
// 使用 try 来捕获创建失败,再换个方法来创建
try {
// 在 Mozilla 中使用这种方式来创建 XMLHttpRequest 对象
xmlObj=new XMLHttpRequest;
}
catch(e) {
try {
// 如果不成功,那么尝试在较新 IE 里的方式
xmlObj=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e2) {
try {
//


阅读全文 »

[JavaScript] 静态的动态续篇之来点XML

在搞定了基本的伪动态之后,我马上把它应用到了网站,但随后就发现了一个问题:我如何来管理新闻列表呢?要是让我在每次要加新闻时去修改源文件然后再上传我可是千万个不愿,不仅麻烦而且容易出错,懒人怎么能可以这么做。动动脑子,于是想到了用XML,这个早已存在,但近些年才流行起来的技术。

在HTML里,可以使用数据岛来使用XML数据,一个使用方法就是在HTML里加入一句:

<xml id="data">

<!-- 在此为XML数据 -->

</xml>

这样,就可以在HTML里使用XML提供的数据。不过,这样还是显得麻烦了,还是要上传整个文件,那么用方便点的吧~~

<xml id="data" src="data.xml"/>

这样处理之后,我就可以只用修改一个XML文件然后上传到服务器了。

接下来,就是搞定在客户端对XML数据的处理了~~

首先,我得设计一个新闻的数据结构。这个简单,毕竟在列表时只需要用到新闻的标题和时间,但为了链接,需要加上一个ID,结果如下:

<newslist>

<news>

<id>1</id>

<title>第一个新闻</title>

<date>2005-11-16</date>

</news>

</newslist>

数据结构搞定了,继续!

在客户端对数据处理当然首选JavaScript了,再么这篇文章讲的也是用JavaScript来实现伪动态。

在JS里,对数据岛的访问可以使用记录集:

var rs=data.recordset;

这个记录集的使用方法和ASP中类似,这下方便我了:),可以很方便地实现新闻的列表及链接了~在显示新闻,还需要显示的是上一条新闻的标题及下一条新闻的标题,而且显示新闻列表时,就不需要显示上一条及下一条新闻了。于是我放了两个层分别用来显示新闻和上一条及下一条新闻的信息,并在需要的时候设置是否显示。其中newsmain用来显示新闻或者新闻列表,newspage用来显示上一条及下一条新闻的信息。接着把对应ID的新闻存为网页文件,在显示时使用iframe嵌入。

先写个函数来从网址中获取新闻ID,这个在前一篇文章已经讲过,拿来用~~

function getid() {

var str,len,pos,id,fn;     // 定义一些变量

str=top.window.location.href;    //获取当然文件地址

len=str.length;     // 得到地址长度

pos=str.indexOf("?id=",0);   // 得到"?id="的起始地址

// 判断是否存在"?id="

if(pos>0) {

id=str.substring(pos+4,len);   // …

阅读全文 »