xml学习笔记与心得
让xsl在FF下能够正常显示
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict">
xsl格式后,用下面解决页面title在FF下被打印出来。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="eng">
xsl输入W3C文件头
<xsl:output method="html" encoding="gb2312" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
让xsl显示HTML
disable-output-escaping="yes"
如: <xsl:value-of select="Root" disable-output-escaping="yes"/>
判断是否为空值
用normalize-space
判断节点是否存在
<xsl:if test="not(节点)">
在xsl中title属性如何实现换行?
用:
xsl取xml中的序列号
类似于db的自动编号 position()
XSL运算符:
除 155 div 100
求余 155 mod 100
求和 sum() <xsl:value-of select="sum(//price)"/>
统计 count() <xsl:value-of select="count(PERSON[name=tom])"/>
字符函数
....长度 string-length(str)
....查找 substring
....查找 substring-after
转换为数值 number() <xsl:value-of select="number(book/price)"/> 如果非数值,返回空。
XSL使用自定义函数
声明:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:Missde="MissdeVBS" xmlns:MissdeJS="MissdeJS">
函数:
<msxsl:script language="VBScript" implements-prefix="Missde">
<![CDATA[
这里写VBS
]]>
</msxsl:script>
<msxsl:script language="javaScript" implements-prefix="MissdeJS">
<![CDATA[
这里写JS
]]>
调用:
<xsl:value-of select="Missde:函数名()"/>
<xsl:value-of select="MissdeJS:函数名()"/>
XSL使用自定义函数时的特殊情况
1.参数即可以是元素值、又可以是字符串
解决办法:使用自定义函数函数。
因为刚学xsl,xml,对相关属性不甚明了,所以所用方法应该有待完善。
a)用VBS判断:
function getnode(node)
dim str
if IsObject(node) then
if(Node.Length>0)then
str=node.item(0).TEXT
else
str=""
end if
else
str=node
end if
getnode=str
End function
b)用JS判断
function node(str){
return str[0]?str[0].text:str;
}
2.使用自定义函数,简化XSL代码
这里说的是特殊情况。比如说,需要在xsl引用一个动态地址,如js文件、img、url等
以引用script为例:
function script(name,a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){
name=name.toLowerCase=="js"?"javascript":"vbscript";
var url="";
var str=new Array(a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s);
for(var i=0;i<str.length;i++){
if(str[i]!=undefined){
url+=node(str[i]);
}
}
return "<script language='"+name+"' type='text/"+name+"' src='"+url+"'></script>";
}
XSL排序
<xsl:for-each select="student">
<xsl:sort select="id" order='ascending'/> 以id顺序排列
<xsl:sort select="name" order='descending'/> 以name倒序排列
</xsl:for-each>
-------------------------------------------------
下面事件中,包括了排序、条件查询、及多条件合并查询
<xsl:for-each select="body/msg[sort='pro' and position() < 4]">
<xsl:sort select="isgoodtime" order='descending'/>
</xsl:for-each>
xsl条件查询
进行大小于比较的时候,先进行编码。如>写成<
xsl模板合并
方法一(二个)
用它引用<xsl:import href=""/>
用它打印<xsl:apply-imports/>
方法二(多个)
主.xsl 调用
<xsl:import href="head.xsl"/>
<xsl:import href="foot.xsl"/>
<xsl:template match="html">
<xsl:call-template name="head"/>
本页主内容
<xsl:import href="foot.xsl"/>
</xsl:template>
子.xsl
<xsl:template name="head">
aaa
</xsl:template>
xsl模板合并时,主模板控制子模板head中的title
(暂用下面办法)
a).建全局变量title
b).head.xsl 引用自定义函数 showtitle()
c). main.xsl 引入head.xsl之前为全局变量title赋值。
JS:
var title="";
function gettitle(a,b,c,e,f,g,h){
var str=new Array(a,b,c,e,f,g,h)
for(var i=0;i<str.length;i++){
if(str[i]!=undefined){
title+=node(str[i])+ " - ";
}
}
return "";
}
function showtitle(){
return title;
}
出处:http://blog.163.com/yjvypliu1987@126/blog/static/111556231201031241835886/
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/archive/2012/07/18/2597405.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!