如何写这个XSLT?

chinahuman 2004-09-04 03:45:58
现在有一个XML文件,里面有一个字段为日期时间型的,比如为UpdateDateTimes
这时候我想只提取里面的日期和当前的日期的差值小于十天的来显示,这时候XSLT文档要怎么写呢?
...全文
246 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
agen10120216 2004-09-14
  • 打赏
  • 举报
回复
学习了
潜水的鱼 2004-09-09
  • 打赏
  • 举报
回复
^_^
colee 2004-09-06
  • 打赏
  • 举报
回复
:)
chinahuman 2004-09-05
  • 打赏
  • 举报
回复
业务需要,导出了一个XML数据文件,要把它格式化成为一个按日期来分组显示的文件。格式化显示XML文件,最适用的就是XSLT来做为XML的显示模板。查遍了MSDN,发现需要用XPATH的函数来对里面的数据进行判断,根据需要来处理是否让这一组数据显示。所以在里面加入了<xsl:if test="……">……</xsl:if>这样标记来做为一次过滤。因为XPATH里面并没有提供日期的处理函数,并且这个日期的判断比较复杂,所以我就自定义了一个函数来处理,为止,我引入了一个自己的命名空间 xmlns:user="http://mycompany.com/mynamespace",然后在这个空间里面定义自己的函数。好的,以下就是实现过程。
<?xml version="1.0" encoding="GB2312"?>
<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="VBScript" implements-prefix="user"><!-- 引入命名空间,定义自已的函数 -->
<![CDATA[
function CheckDate(nodelist)<!-- 自定义函数-->
……
end function
]]>
</msxsl:script>
<xsl:template match="/">
<HTML>
</head>
<BODY>
<TABLE id= "table1" border="1" style= "border-collapse:collapse" width="650">
<xsl:for-each select="Updates/Update">
<xsl:if test="user:CheckDate(string(DateTime))=1"><!-- 根据返回的结果来判断显示还是不显示 -->
<TR>
<TD width="100">文夹名</TD>
<TD width="550"><xsl:value-of select="FileName" /></TD>
</TR>
…………………………………………………………
</xsl:if>
</xsl:for-each>
</TABLE>
</BODY>

</HTML>
</xsl:template>
</xsl:stylesheet>
在代码里面可以看到我先调用了string来转换了XML中DateTime节点的数据类型,因为XML节点中的数据类型可以说是一种变体类型,没有具体的类型,而在这里的脚本函数,即使原来是弱类型的,这时候也会变成强类型,只要数据类型不一致操作就会出错,变体类型的,在里面就没有办法处理,所以先转化成为string,然后在里面再转化成为日期,再做进一步的处理。
同时,发现在XSLT中定义操作的脚本函数时,要用
<![CDATA[
function CheckDate(nodelist)
{
……
}
]]>
这样的形式把函数包围起来,不然会提示找不到函数。
附:
XPATH函数
Node set last(), position(), count(), id(), local-name(), namespace-uri(), name()
String string(), concat(), starts-with(), contains(), substring-before(), substring-after(),
substring(), string-length(),normalize-space(), translate()
Boolean boolean(), not(), true(), false(), lang()
Number number(), sum(), floor(), ceiling(), round()
XSLT 1.0 additions document(), key(), format-number(), current(), unparsed-entity-uri(), generate-id(), system-property()


chinahuman 2004-09-05
  • 打赏
  • 举报
回复
呵呵,我已经搞定了:)还是比较容易的。
看看我BLOG里面的吧
http://webuc.net/chinahuman/archive/2004/09/05/1910.aspx
梅雪香 2004-09-04
  • 打赏
  • 举报
回复
对XSL不是很了解,提两种办法参考吧
1. XML动态生成,生成时只留下符合条件的记录
2. 解析时不要管日期,写到页面上后在body的onload事件里处理,将不合条件的隐藏

不知道合不合你的要求

8,906

社区成员

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

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