【转自happyhippy】
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû0. 有关JS、XMLDOM、XSLT的基础知识,可以参考作者前面的三篇学习笔记:
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû《JS学习笔记》
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçûhttp://www.cnblogs.com/happyhippy/archive/2007/07/24/829007.html ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû《XML DOM学习笔记(JS) 》
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçûhttp://www.cnblogs.com/happyhippy/archive/2007/07/24/829001.html ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû《XSLT学习笔记 》
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçûhttp://www.cnblogs.com/happyhippy/archive/2007/07/25/831576.html ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû1. 中英文切换:
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû原本打算是用一个XML文件(Language.xml)作为语言的配置文件,然后在HTML/JS中传入所选择得语言种类,来加载不同的XML节点,我最原始的思路:
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<!--langg传文件名:zh或en-->
<xsl:param name="langg"></xsl:param>
<xsl:variable name="languag" select="document($filename)/language/$langg"></xsl:variable> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7ÐçûLanguage.XML
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<?xml version="1.0" encoding="gb2312"?>
<language>
<zh>
<title>员工信息</title>
<btnAdd>新建员工</btnAdd>
<column1>姓名</column1>
<column2>部门</column2>
<column3>备注</column3>
<column4>删除</column4>
<CurrentPage>当前页码</CurrentPage>
<TotelPage>总页数</TotelPage>
<TotelCount>总记录数</TotelCount>
<FirstPage>首页</FirstPage>
<PrevPage>前一页</PrevPage>
<NextPage>后一页</NextPage>
<LastPage>最后一页</LastPage>
</zh>
<en>
<title>Employee Information</title>
<btnAdd>Add New Employee</btnAdd>
<column1>Name</column1>
<column2>Department</column2>
<column3>Memo</column3>
<column4>Delete</column4>
<CurrentPage>Current Page</CurrentPage>
<TotelPage>Totel Page Count</TotelPage>
<TotelCount>Totel Record Count</TotelCount>
<FirstPage>First Page</FirstPage>
<PrevPage>Previous Page</PrevPage>
<NextPage>Next Page</NextPage>
<LastPage>Last Page</LastPage>
</en>
</language> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû但在实践过程中,发现XSL中document函数后的Xpath不能带参数变量,只好改成两个文件(zh.xml和en.xml),通过HTML/JS传入所选择的语言的种类,来加载不同的语言所对应的配置文件:
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<!--langg传文件名:zh或en-->
<xsl:param name="langg"></xsl:param>
<xsl:variable name="filename" select="concat($langg,'.xml')"></xsl:variable>
<xsl:variable name="languag" select="document($filename)/language"></xsl:variable> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçûzh.xml
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<?xml version="1.0" encoding="gb2312"?>
<language>
<title>员工信息</title>
<btnAdd>新建员工</btnAdd>
<column1>姓名</column1>
<column2>部门</column2>
<column3>备注</column3>
<column4>删除</column4>
<CurrentPage>当前页码</CurrentPage>
<TotelPage>总页数</TotelPage>
<TotelCount>总记录数</TotelCount>
<FirstPage>首页</FirstPage>
<PrevPage>前一页</PrevPage>
<NextPage>后一页</NextPage>
<LastPage>最后一页</LastPage>
<add>
<NotNull>员工姓名不能为空!</NotNull>
<NameRepeat>姓名重复,请重新输入姓名!</NameRepeat>
<Save>保存</Save>
<Cancel>取消</Cancel>
<Title>员工信息</Title>
<Name>姓名</Name>
<Dept>部门</Dept>
<Memo>备注</Memo>
</add>
<del>
<Text1>确定删除 </Text1>
<Text2> 记录吗?</Text2>
</del>
<edit>
</edit>
</language> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçûen.xml
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<?xml version="1.0" encoding="gb2312"?>
<language>
<title>Employee Information</title>
<btnAdd>Add New Employee</btnAdd>
<column1>Name</column1>
<column2>Department</column2>
<column3>Memo</column3>
<column4>Delete</column4>
<CurrentPage>Current Page</CurrentPage>
<TotelPage>Totel Page Count</TotelPage>
<TotelCount>Totel Record Count</TotelCount>
<FirstPage>First Page</FirstPage>
<PrevPage>Previous Page</PrevPage>
<NextPage>Next Page</NextPage>
<LastPage>Last Page</LastPage>
<add>
<NotNull>You must enter employee name!</NotNull>
<NameRepeat>Name is already exists,please input again!</NameRepeat>
<Save>Save</Save>
<Cancel>Cancel</Cancel>
<Title>Employee Information</Title>
<Name>Name</Name>
<Dept>Department</Dept>
<Memo>Memo</Memo>
</add>
<del>
<Text1>Do you confirm to delete </Text1>
<Text2> record?</Text2>
</del>
</language> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû2. 分页:
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7ÐçûJS中
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
xslProcessor.addParameter("currentPage", currentPage);
xslProcessor.addParameter("totelPage", GetTotlePage());
xslProcessor.addParameter("totelEmployee", GetTotleEmplyee());
xslProcessor.addParameter("pageSize", pageSize);
//定义要读取的Employee记录的范围
xslProcessor.addParameter("startEmployee", (currentPage-1)*pageSize);
xslProcessor.addParameter("endEmployee", currentPage*pageSize); ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçûxsl中,只读取一定范围的节点(startEmployee<position()<=endEmployee):
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<xsl
or-each select="//employee[position()>$startEmployee and position()<=$endEmployee]"> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû3. 排序:
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûJS中:
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
xslProcessor.addParameter("order", order);//order是排序依据的列名
xslProcessor.addParameter("scending", scending);//顺序还是倒序,做得很粗糙,尚待完善 ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7ÐçûXSL中
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<xsl:sort select="*[name()=$order]" order="{$scending}"/> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû//很多文章介绍说可以这样<xsl:sort select="$order" order="{$scending}"/>,但在我自己的机器上测试不行的说
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû4. 增删查改:基本的XMLDOM操作,直接看代码吧...
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçûemployee.xml
ªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<?xml version="1.0" encoding="gb2312"?>
<employees>
<employee>
<name>a</name>
<dept>dept1</dept>
<memo>1</memo>
</employee>
<employee>
<name>b</name>
<dept>dept2</dept>
<memo>2</memo>
</employee>
<employee>
<name>c</name>
<dept>dept3</dept>
<memo>3</memo>
</employee>
<employee>
<name>d</name>
<dept>dept4</dept>
<memo>4</memo>
</employee>
<employee>
<name>e</name>
<dept>dept5</dept>
<memo>5</memo>
</employee>
<employee>
<name>f</name>
<dept>dept6</dept>
<memo>6</memo>
</employee>
<employee>
<name>g</name>
<dept>dept7</dept>
<memo>7</memo>
</employee>
<employee>
<name>h</name>
<dept>dept8</dept>
<memo>8</memo>
</employee>
</employees> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçûemployee.xsl
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet xmlns
sl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com
slt"
version="1.0">

<xsl:param name="currentPage"></xsl:param>
<xsl:param name="totelPage"></xsl:param>
<xsl:param name="totelEmployee"></xsl:param>
<xsl:param name="pageSize"></xsl:param>
<xsl:param name="startEmployee"></xsl:param>
<xsl:param name="endEmployee"></xsl:param>
<xsl:param name="order"></xsl:param>
<xsl:param name="scending"></xsl:param>
<xsl:param name="langg"></xsl:param>

<xsl:variable name="filename" select="concat($langg,'.xml')"></xsl:variable>
<xsl:variable name="languag" select="document($filename)/language"></xsl:variable>
<xsl:template match="/">
<table border="1" cellspacing="0" style="font-size:14pt">
<tbody>
<tr align="center" bgcolor="#33CCCC">
<th><a href="javascript:sort('name')"><xsl:value-of select="$languag/column1"/></a></th>
<th><a href="javascript:sort('dept')"><xsl:value-of select="$languag/column2"/></a></th>
<th><a href="javascript:sort('memo')"><xsl:value-of select="$languag/column3"/></a></th>
<th> </th>
</tr>
<xsl
or-each select="//employee[position()>$startEmployee and position()<=$endEmployee]">
<xsl:sort select="*[name()=$order]" order="{$scending}"/>
<tr align="center">
<xsl:variable name="name" select="name"></xsl:variable>
<td><a href="javascript:Edit('{$name}')"><xsl:value-of select="name"/></a></td>
<td><xsl:value-of select="dept"/></td>
<td><xsl:value-of select="memo"/></td>
<td><a href="javascript
elEmployee('{$name}')"><xsl:value-of select="$languag/column4"/></a></td>
</tr>
</xsl
or-each>
</tbody>
</table>
<br/>
<xsl:value-of select="$languag/CurrentPage"/>:<xsl:value-of select="$currentPage"></xsl:value-of> <xsl:value-of select="' '"></xsl:value-of>
<xsl:value-of select="$languag/TotelPage"/>:<xsl:value-of select="$totelPage"></xsl:value-of><xsl:value-of select="' '"></xsl:value-of>
<xsl:value-of select="$languag/TotelCount"/>:<xsl:value-of select="$totelEmployee"></xsl:value-of><xsl:value-of select="' '"></xsl:value-of>
<xsl:choose>
<xsl:when test="$currentPage=1">
<xsl:value-of select="$languag/FirstPage"/> | <xsl:value-of select="$languag/PrevPage"/> |
</xsl:when>
<xsl
therwise>
<a href="javascript
irstPage()"><xsl:value-of select="$languag/FirstPage"/></a> | <a href="javascript:prevPage()"><xsl:value-of select="$languag/PrevPage"/></a> |
</xsl
therwise>
</xsl:choose>

<xsl:choose>
<xsl:when test="$currentPage=$totelPage">
<xsl:value-of select="$languag/NextPage"/> | <xsl:value-of select="$languag/LastPage"/>
</xsl:when>
<xsl
therwise>
<a href="javascript:nextPage()"><xsl:value-of select="$languag/NextPage"/></a> | <a href="javascript:lastPage()"><xsl:value-of select="$languag/LastPage"/></a>
</xsl
therwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet> ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçûlist.html
ªCHí7^ö©zbbs.szblogs.comx=:7ÐçûªCHí7^ö©zbbs.szblogs.comx=:7Ðçû
<html>
<head>
<title>Employee Information</title>
</head>
<body>
<div>
<button align="middle" id="btnAdd" onclick="addEmployee()">新建员工</button>

<div align="right">
<a href="javascript:languageChange('zh')">中文版</a>|<a href="javascript:languageChange('en')">English Version</a>
</div>
</div>
<div id="divContent" align="center">
</div>

<script language="javascript" type="text/javascript">...
var lngg = new ActiveXObject("MSXML2.DOMDocument");
var langg = "zh";
var scending = "ascending";
lngg.load("language.xml");
function languageChange(str)

...{
lnggRoot = lngg.selectSingleNode("//" + str);
btnAdd.value = lnggRoot.selectSingleNode("btnAdd").childNodes[0].xml;
langg=str;
showTable();
}
//全局变量
var currentPage = 1;
var pageSize = 5;
var order = "name";
//初始化
var xml = new ActiveXObject("MSXML2.DOMDocument");
xml.load("employee.xml");
var root=xml.documentElement;
var xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
xsl.load("employee.xsl");
var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate");
xslTemplate.stylesheet = xsl;
var xslProcessor = xslTemplate.createProcessor();
xslProcessor.input = xml;
//总记录数
function GetTotleEmplyee()

