代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何从XML文件中读取日期并使用XSL对其进行解析

  •  0
  • Thorin Oakenshield  · 技术社区  · 14 年前

        <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet type="text/xsl" href="TestFile.xsl"?>
    <RootElement>  
      <Date FileModified="7/2/2010 12:54:53 PM" />
      <Child Name="A"/>
      <Child Name="B"/>
      <Child Name="C"/>
      <Child Name="D"/>
      <Child Name="E"/>
    </RootElement>
    

    我需要从文件中读取日期属性值并将

    var d=new Date(  date ); 
    

    这是我的xsl文件

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/">
    <html>
    <head></head>
      <body>
        <center>
          <b>
            <script type="text/javascript">
              var d_names = new Array("Sunday", "Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday");
              var m_names = new Array("January", "February", "March","April", "May", "June", "July", "August","September","October","November", "December");
    
              var d = new Date(-----------); // here i need to get the date from the xsl file
    
              var curr_day = d.getDay();
              var curr_date = d.getDate();
              var sup = "";
              if (curr_date == 1 || curr_date == 21 || curr_date ==31)
              {
              sup = "st";
              }
              else if (curr_date == 2 || curr_date == 22)
              {
          sup = "nd";
          }
              else if (curr_date == 3 || curr_date == 23)
              {
              sup = "rd";
              }
              else
              {
              sup = "th";
              }
              var curr_month = d.getMonth();
              var curr_year = d.getFullYear();
              var curr_hour=d.getHours();
              var curr_period="AM"
              if(curr_hour>12)
              {
              curr_hour=curr_hour-12;
              curr_period="PM"
              }
              document.write(d_names[curr_day]+ "&#160;&#160;&#160;&#160;&#160;" +curr_date + "<sup>"+ sup + "  </sup> " + m_names[curr_month] + "&#160;&#160;" + curr_year+ "&#160;&#160;&#160;&#160;&#160;&#160;"+curr_hour+" : "+d.getMinutes()+" : "+d.getSeconds()+" "+curr_period);
            </script>
          </b>
          <xsl:choose>
            <xsl:when test="//Child">
              <br/>
              <br/>
              <br/>
              <b>SampleTable</b>
              <br/>
              <br/>
              <table border="1">
                <tr bgcolor="RGB(0,0,127)" >
                  <th width="5">
                    <font color="white">S.No</font>
                  </th>
                  <th width="250">
                    <font color="white"> Name</font>
                  </th>
                </tr>
                <xsl:for-each select ="//Child">
                  <tr>
                    <td>
                      <xsl:number value="position()" format="01"/>
                    </td>
                    <td>
                      <xsl:value-of select="@Name"/>
                    </td>
                  </tr>
                </xsl:for-each>
              </table>
            </xsl:when >
            <xsl:otherwise ></xsl:otherwise>
          </xsl:choose >
        </center>
      </body >
    </html>
    </xsl:template>
    </xsl:stylesheet>
    

    2 回复  |  直到 14 年前
        1
  •  1
  •   Martin Honnen    14 年前
    var d = new Date('<xsl:value-of select="RootElement/Date/@FileModified"/>')
    
        2
  •  0
  •   user357812 user357812    14 年前

    此外,您还可以使用纯XSLT获得DeDeDesire结果,如下所示:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:variable name="m_names">
            <January/><February/><March/><April/><May/><June/><July/><August/><September/><October/><November/><December/>
        </xsl:variable>
        <xsl:variable name="d_names">
            <Sunday/><Monday/><Tuesday/><Wednesday/><Thursday/><Friday/><Saturday/>
        </xsl:variable>
        <xsl:variable name="modules" select="'033614625035034025036146'"/>
        <xsl:variable name="date" select="/*/*/@FileModified"/>
        <xsl:variable name="day" select="substring-before($date,'/')"/>
        <xsl:variable name="month" select="substring-before(substring-after($date,'/'),'/')"/>
        <xsl:variable name="year" select="substring($date,7 + string-length($date) - 22,4)"/>
        <xsl:variable name="calc-day" select="(($year - 1) mod 7 +
                                           (floor(($year - 1) div 4) - 3 * floor((floor(($year - 1) div 100) + 1) div 4)) mod 7 +
                                           substring($modules,
                                                     12 * ($year mod 4 = 0 and $year mod 100 != 0) + $month,
                                                     1) +
                                           $day mod 7)
                                           mod 7 + 1"/>
        <xsl:template match="/">
            <html>
                <head></head>
                <body>
                    <center>
                        <b>
                            <xsl:value-of select="concat(
                                                         name(document('')/*/xsl:variable[@name='d_names']/*[$calc-day]),
                                                         '&#160;&#160;&#160;&#160;&#160;',
                                                         $day
                                                        )"/>
                            <sup>
                                <xsl:choose>
                                    <xsl:when test="$day = 1 or $day = 21">st</xsl:when>
                                    <xsl:when test="$day = 2 or $day = 22">nd</xsl:when>
                                    <xsl:when test="$day = 3 or $day = 23">rd</xsl:when>
                                    <xsl:otherwise>th</xsl:otherwise>
                                </xsl:choose>
                            </sup>
                            <xsl:value-of select="concat(
                                                         '&#160;&#160;&#160;&#160;&#160;',
                                                         name(document('')/*/xsl:variable[@name='m_names']/*[number($month)]),
                                                         '&#160;&#160;',
                                                         $year,
                                                         '&#160;&#160;&#160;&#160;&#160;',
                                                         substring($date,12 + string-length($date) - 22,2),
                                                         ' : ',
                                                         substring($date,15 + string-length($date) - 22,2),
                                                         ' : ',
                                                         substring($date,18 + string-length($date) - 22,2),
                                                         ' ',
                                                         substring($date,string-length($date)-1)
                                                        )"/>
                        </b>
                        <xsl:apply-templates/>
                    </center>
                </body >
            </html>
        </xsl:template>
        <xsl:template match="Child[1]">
            <br/>
            <br/>
            <br/>
            <b>SampleTable</b>
            <br/>
            <br/>
            <table border="1">
                <tr bgcolor="RGB(0,0,127)" >
                    <th width="5">
                        <font color="white">S.No</font>
                    </th>
                    <th width="250">
                        <font color="white"> Name</font>
                    </th>
                </tr>
                <xsl:apply-templates select="../Child" mode="child"/>
            </table>
        </xsl:template>
        <xsl:template match="Child" mode="child">
            <tr>
                <td>
                    <xsl:number value="position()" format="01"/>
                </td>
                <td>
                    <xsl:value-of select="@Name"/>
                </td>
            </tr>
        </xsl:template>
    </xsl:stylesheet>
    

    :如果使用更好的日期格式,则日期提取可能不会太冗长。