请问:在几个xsl中如何公用同一javascript脚本库??我在html中已知如何实现。

wld 2002-03-06 10:36:13
加精
我在xsl中用
<script language='Javascript’ src='my.js'>
会出错,在html中就可以.?
...全文
41 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
karma 2002-03-07
  • 打赏
  • 举报
回复
onload() is executed on the client side after the XSLT transformation is done, the msxsl:script includes javascript code to execute during the XSLT transformation

you can always embed
<script language="javascript" src="somejs.js"></script>
in the html output, but you cannot use functions in somejs.js during the transformation

老翔 2002-03-07
  • 打赏
  • 举报
回复
to karma(无为):
我试过net_lover(孟子E章)的方法
<script language="Javascript" src="my.js"></script>又是可行的!

唯独<script language="Javascript" src="my.js" />不行!

但是插入<script language="Javascript" src="my.js"></script>标记的位置有点变化,那么xsl将无法执行。真是不爽!

为什么<script language="Javascript" src="my.js"></script>可以执行了!
wld 2002-03-07
  • 打赏
  • 举报
回复
to karma(无为):
谢谢!我试过你的方法,是可行的,已经加分。
但我是需在script.xsl自己的脚本中,如onload事件中调用外部的脚本库,
这时会跳出“缺少对象”的错误提示。请问如何解决??
to net_lover(孟子E章):
不知是否我的方法不对,按你说的在xsl中会提示:“缺少对象”,你的方法在*.html文件中是可行的。


我改动了你(无为): 的script.xsl,script2.xls 如下:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:user="http://mycompany.com/mynamespace">

<xsl:include href="script2.xsl" />

<xsl:template match="/">
<html>
<head>
<script language="JavaScript"><xsl:comment><![CDATA[
function myload()
{
var i1 = 10;
i1 = i1 + madd();
alert(i1 );
}
]]></xsl:comment></script>

</head>
<body onload="myload()">
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="customers">
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<xsl:apply-templates select="customer[1]" mode="head"/>
</thead>
<tbody>
<xsl:apply-templates select="customer" />
</tbody>
</table>

</xsl:template>

<xsl:template match="customer" mode="head">
<th>Name</th><th>Age</th>
</xsl:template>

<xsl:template match="customer">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="user:getAge(birthdate)"/></td>
</tr>
</xsl:template>

</xsl:stylesheet>

script2.xsl:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="JScript" implements-prefix="user">
function madd()
{
return 100;
}
function getAge(nodelist)
{

var s = nodelist.nextNode().text;
var dt = new Date(s);
var today = new Date();

return Math.floor((today.getTime()-dt.getTime())/(1000*3600*24*365)) + madd();
}
</msxsl:script>

</xsl:stylesheet>

karma 2002-03-07
  • 打赏
  • 举报
回复
with MSXML/XSLT, you have to use msxsl:script extension

of course, there are similar extensions in other XSLT processors
老翔 2002-03-07
  • 打赏
  • 举报
回复
to karma(无为):不能在xsl中直接使用<script language="javascript" src="my.js" />,就象xsl中使用<html>,<body>和<A>等等那样呢?
孟子E章 2002-03-07
  • 打赏
  • 举报
回复
<script language="Javascript" src="my.js"></script>
注意是"而不是单引号
karma 2002-03-07
  • 打赏
  • 举报
回复
if you are using XSLT, you can put the js code in another xsl file, and then use
<xsl:include href="..." />
to include it in other xsl files

for example:
1. script.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
<customer>
<name>John Smith</name>
<birthdate>1/1/1980</birthdate>
</customer>
<customer>
<name>Mary Jones</name>
<birthdate>12/31/1975</birthdate>
</customer>
</customers>


2. script.xsl:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:user="http://mycompany.com/mynamespace">

<xsl:include href="script2.xsl" />

<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="customers">
<table border="1" cellspacing="0" cellpadding="0">
<thead>
<xsl:apply-templates select="customer[1]" mode="head"/>
</thead>
<tbody>
<xsl:apply-templates select="customer" />
</tbody>
</table>

</xsl:template>

<xsl:template match="customer" mode="head">
<th>Name</th><th>Age</th>
</xsl:template>

<xsl:template match="customer">
<tr>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="user:getAge(birthdate)"/></td>
</tr>
</xsl:template>

</xsl:stylesheet>

3. script2.xsl:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="JScript" implements-prefix="user">
function getAge(nodelist)
{

var s = nodelist.nextNode().text;
var dt = new Date(s);
var today = new Date();

return Math.floor((today.getTime()-dt.getTime())/(1000*3600*24*365));
}
</msxsl:script>

</xsl:stylesheet>
老翔 2002-03-06
  • 打赏
  • 举报
回复
关注!
老翔 2002-03-06
  • 打赏
  • 举报
回复
<script language='Javascript’src='my.js' />呢?

8,907

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧