微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用XSLT计算XML中两个日期的天数

我已经进行了大约5个小时了,尝试在Google上找到的每个例子都有serach术语“xml xslt计算日期间的天数”我可以找到从“date.xml”文件中取两个日期并以“YYYY-MM-DD”格式计算日期间的天数(以下示例没有此格式,但这是我需要的唯一格式)

我终于找到了这个页面:: https://forums.oracle.com/thread/2432132

可在以下位置验证解决方案:http://xslttest.appspot.com/

但是,在localhost上保存“date.xml / date.xslt”试图在Internet Explorer,谷歌浏览器或Firefox中打开页面要么显示错误,要么根本没有显示错误,因为它似乎总是 – 没有任何信息是错误的.当文件在Web服务器上时也会发生同样的情况.

那么,为什么我不能尝试一个简单的例子,我发现每个人都说有解决方案或我做错了什么?

上面示例中的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="date.xslt"?>

<root>
    <date1>2012-01-11T00:00:00.000-05:00</date1>
    <date2>2012-01-15T00:00:00.000-05:00</date2>
</root>

上面例子中的XSLT文件

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet  version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions">

<xsl:template match="/">
    <xsl:variable name="date1" select="xs:dateTime(/root/date1)"/>
    <xsl:variable name="date2" select="xs:dateTime(/root/date2)"/>
    <xsl:value-of select="fn:days-from-duration($date2 - $date1)"/>
</xsl:template>

</xsl:stylesheet>

将此添加到XSLT验证程序,它会在这两个日期之间显示正确的值“4”天.

我希望能够创建一个实际上可以进行计算的文档,无论它们是日期还是数字,但此时似乎是不可能的.获取日期数,然后使用该值进行一些计算.

解决方法

您的样式表使用的是XSLT 2.0版,浏览器仅支持XSLT 1.0版. xs:dateTime等数据类型和XSLT 1.0版不支持days-from-duration等函数.因此,您需要使用XSLT 2.0处理器(如Saxon 9(适用于Java或.NET)或XmlPrime(适用于.NET)或使用 Saxon CE (in the browser))运行XSLT 2.0.

如果您想将XSLT 1.0与EXSLT一起使用,那么使用http://www.exslt.org/date/functions/difference/date.difference.template.xsl的测试http://home.arcor.de/martin.honnen/xslt/test2013121001.xml对于我的实际版本的Firefox,Opera和IE来说是完美的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。