DIYism schooner能逆风行驶的纵帆船是生命的极好象征,贝努利效应正是化逆为顺的经典!--呆仁 收藏本站 涂鸦本站 来信本站 跟我MSN 跟我QQ GTalk 思想农业天文生物文化饮食娱乐硬件健康语言心理网络物理政治个人编程软件工具 php学习笔记
javascript学习笔记
flash学习笔记
css学习笔记
xsl学习笔记
sql学习笔记
ubuntu安装配置
centos安装配置
damnsmall安装配置
python学习笔记
呓语录
(no96)
==================================================================
如果相似页面模块是在一块的话,可以用一次模板就可以解析循环出来,
如果在不同位置只能分别在不同位置用该模板解析
==================================================================
每个item可以用category和template属性分别进行内容分组(关乎显示位置)和模板分组(关乎显示样式)
==================================================================
xsl:for-each不光是嵌套作用,也有循环作用(即只有一次的循环可以不用模板);
节点名同样可以像参数一样直接用大括号嵌到html的属性字串内里
类似样式块可以通过带参数(样式参数而非数据参数)的模板来适应
==================================================================
浏览器解析xml的时候会自动根据顶层标签名寻找模板(模板定义:<xsl:template match='模板名'>),
如果找不到就直接输出值, 直到后续节点找到模板, 该节点就用该模板来解析(其底层节点不再自动根据标签调用模板),
其后续节点仍然根据名字自动调用模板.
==================================================================
ie解析空tag和含注释tag不正确(错误解析了结束尖括号), 而firefox没有这个问题
==================================================================
检查xml tag的正则表达式:
/^(?:[A-Za-z_:]|[^\x00-\x7F])(?:[A-Za-z0-9_:.-]|[^\x00-\x7F])*(?: (?:[A-Za-z_:]|[^\x00-\x7F])(?:[A-Za-z0-9_:.-]|[^\x00-\x7F])*=(?:"[^<"]*"))*$/
==================================================================
对于普通htm
<li>jack</li>
<li>tom</li>
与
<li>jack</li>          <li>tom</li>
与
<li>jack</li><li>tom</li>
第一\二两例是相同的
(连续回车(\r\n或\r(\x0d:mac)或\n(\x0a:unix))或空格或tab会被firefox和dreamweaver解析成一个空格(ie也是解析成空格但li外的文字都置于其前一个li内)),
第三例的两个li则是相接的

firefox和dreamweaver忽略没有其它文字时的连续空格或回车或tab(有其它文字时仍解析成一个空格)
/ie不忽略任何连续空格或回车或tab(仍解析成空格置于li内)

显然firefox的解析更合理

li换成div时, ie的解析也是对的
==================================================================
float: none!important;
float: right;
firefox和dreamweaver解析成float: none, 但ie解析成了float: right;
(网上说在ie6里html加严格doctype声明ie能正常解析!important, 但实际上xsl或htm加严格doctype声明都没有用)
==================================================================
xml强制注释: <!--- -->, 这样注释里就可以含有">"了
==================================================================
xsl内写js:
<script>
<xsl:text disable-output-escaping="yes">
<![CDATA[
...
]]>
</xsl:text>
</script>
==================================================================
style="position:absolute;"根据w3c规则如果未定义left等则不激活, ie是不激活的(仍relative), firefox会自动激活
==================================================================
firefox并不支持<xsl:value-of>里的disable-output-escaping="yes"属性
可以用如下方法解决:
<div class="page" id="page_list">
<xsl:value-of select="item[@category='page_list']/title" disable-output-escaping="yes"/>
<xsl:if test="system-property('xsl:vendor')='Transformiix'">
<script language="javascript">
el = document.getElementById("page_list");
el.innerHTML = el.firstChild.data;
</script>
</xsl:if>
</div>
==================================================================
xsl里的取余: <xsl:if test="position() mod '5' = '0' and position() != last()"><hr /></xsl:if>
加法:+, 减法:-, 除法:div, 乘法*
注意position()是从1开始的
==================================================================
用<xsl:copy-of select="..." />以及xml中不用<![CDATA[...]]>可以将xml节点内的数据当作xsl的节点直接解析到xsl中
显然这个xml节点的数据必须是符合xml格式的(没用CDATA)
==================================================================
如果使用xsl子模板和内联style(子模板无法使用内部css和外部css),连框架都可以重用了, 更不用担心样式重用了,
也不用担心运行空间扩大, 因为最终所有页面元素都要创建完整的对象, 而不管它们的属性是从哪里来到
==================================================================
不同根节点名相同内部结构的节点可以调用同一命名模板:
a.命名模板
<xsl:template name="mylink">
<tr><td height="21" align="left" width="330"><a href="{link}"><xsl:value-of select="title"/></a></td></tr>
</xsl:template>
b.调用模板
<xsl:for-each select="item[@category='link']">
<xsl:call-template name="mylink"/>
</xsl:for-each>
==================================================================
内含document.open();document.write("hell");document.close();的xsl在firefox下执行则完全覆写整页代码,
正确写法是:
document.getElementById("container").appendChild(document.createTextNode("hell"));
或document.getElementById("container").innerHTML="hell";//这个里面写的script或script defer不会被执行
再复杂点的用ajax做
==================================================================
xml内的非法字符:
[\x00-\x08\x0b\x0c\x0e-\x1f]
即0到255内只有上述29个字符非法,
0到31内只有tab,return,newline这三个字符合法.
==================================================================
注意xml内的&字符要写成"&amp;"的形式:
<script language="javascript" src="http://www.verystat.com/statscript.php?countid=128&amp;logo=0"></script>
==================================================================
<xsl:choose>
<xsl:when test="@category='shanghai'">上海</xsl:when>
<xsl:when test="@category='internal'">国内</xsl:when>
</xsl:choose>
==================================================================
随意指定循环次数(不大于//*的所有个数):
<xsl:value-of select="'&lt;span&gt;'" disable-output-escaping="yes"/>
<xsl:for-each select="(//*)[position() &lt;= 6]">
hello<xsl:if test="position() = '1'"><xsl:value-of select="'&lt;br&gt;&lt;/span&gt;'" disable-output-escaping="yes"/></xsl:if>
</xsl:for-each>
==================================================================
嵌套循环:
<xsl:for-each select="(//*)[position() &lt;= 6]">
<xsl:variable name="pos" select="position()"/>
<xsl:for-each select="/rss/channel/item[@category='right_pic']/item[@category='sub'][position() &gt; =($pos -1)*3+1 and position() &lt;= ($pos - 1)*3+3]">
<xsl:value-of select="{title}" />
</xsl:for-each>
</xsl:for-each>
注意里面的循环要写全路径
==================================================================

  您的网址:(可能:)呆元:2385年03月19日(17-04-23)访客总人次:433220(自k5a1)  
Copyleft 2364-2378 DIYism
Powered by Ubuntu Server & ZPC-GX
全民备TOR 安全上网