How to dynamic create xml element use XSLT (loop + javascript)

本文介绍如何使用XSLT及JavaScript实现根据起始日期和结束日期参数自动生成XML元素,通过递归方式创建日期范围内的所有日期节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Today, I am here to show you how to automatically create xml element use XSLT, out target is base on input parameters (startdate and enddate) then print out all the dates in between.

 

for example:

 

Parameters :

 

startDate = 03/20/2011

endDate-03/26/2011

 

Target XML Result:

       <result>

              <day>03/20/2011</day>

              <day>03/21/2011</day>

              <day>03/22/2011</day>

              <day>03/23/2011</day>

              <day>03/24/2011</day>

              <day>03/25/2011</day>

              <day>03/26/2011</day>

       <result>

 

Skill:

      We will use recursive way to implement dynamic create xml element and use javascript to compare the date and add day.

 

Code:

 

<?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:fo="http://www.w3.org/1999/XSL/Format"
      xmlns:user="my-utility-function"

>

 <xsl:template match="/">
   <xsl:element name="result">
        <xsl:call-template name="for.loop">
            <xsl:with-param name="startDate">03/20/2011</xsl:with-param>
            <xsl:with-param name="endDate">03/26/2011</xsl:with-param>
        </xsl:call-template>
    </xsl:element>
 </xsl:template>
 
<xsl:template name="for.loop">
    <xsl:param name="startDate" />
    <xsl:param name="endDate" />
   
    <xsl:if test="user:CompareDate(string ($startDate),string ($endDate))='1'">
        <xsl:element name="day"><xsl:value-of select="$startDate" /></xsl:element>
    </xsl:if>
   
    <!--begin_: Resursive -->

    <xsl:if test="user:CompareDate(string($startDate),string($endDate))='1'">    
        <xsl:call-template name="for.loop">
            <xsl:with-param name="startDate"> <xsl:value-of select="user:AddDate(string($startDate),1)"/> </xsl:with-param>
            <xsl:with-param name="endDate"> <xsl:value-of select="$endDate"/></xsl:with-param>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

<msxsl:script language="javascript" implements-prefix="user">

<![CDATA[
 function CompareDate(a,b)
 {
   var dateArray = a.split("/");
   var d=new Date(dateArray[2], dateArray[0], dateArray[1]);
  
   var dateArray2 = b.split("/");
   var d2=new Date(dateArray2[2], dateArray2[0], dateArray2[1]);
   if(d>d2)
   {
      return "0";
   }
  return "1";
 }
 
 function AddDate(a,b)
 {
    var dateArray = a.split("/");
    var d=new Date(dateArray[2], dateArray[0], dateArray[1]);
    var curr_date = d.getDate();
    var curr_month = d.getMonth();
    curr_date++;
    var curr_year = d.getFullYear();
    return(curr_month + "/" + curr_date + "/" + curr_year);
 }
]]>
</msxsl:script>
</xsl:stylesheet>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值