0

我对 XSLT 有一个小问题......

基本上我有以下xml:

<Root>
 <Node>
  <Prop1></Prop1>
  <Prop2></Prop2>
  <Date>03/05/2013</Date>
  ...
 </Node>
 <Node>
  <Prop1></Prop1>
  <Prop2></Prop2>
  <Date>01/01/2012</Date>
  ...
 </Node>
</Root>

从这里我生成一个表,它看起来像这样:

<table>
<tr>       
    <th colspan="2" style="text-align:left;">
        <u>
        Table: 
        </u>    
    </th>
</tr> 
<xsl:for-each select="Root/Node[current-date() < date]">    
    <xsl:sort select="date" />          
            <tr>                
                <td><xsl:value-of select="prop1"/></td>
                <td>
                        ...       
                </td>
                <td><xsl:value-of select="date"/></td>
            </tr> 
</xsl:for-each>
</table>

我只想获取日期过期的节点,基本上是 date < currentdate

知道如何实现吗?

4

1 回答 1

1

请首先记住,XPath 区分大小写,Node如果元素的名称实际上是Node1or ,它将不匹配元素Node2

假设您正在使用 XSLT 1.0,没有内置方法可以获取当前日期,因此您需要将其作为参数传递。如果你能让它工作,这样的事情应该可以解决问题:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:param name="currentDate" />

  <xsl:template match="/">
    <table>
      <tr>
        <th colspan="2" style="text-align:left;">
          <u>
            Table:
          </u>
        </th>
      </tr>
      <xsl:apply-templates select="Root/*[translate($currentDate, 'T:-', '') &lt; 
                                          translate(Date, 'T:-', '')]">
        <xsl:sort select="Date" />
      </xsl:apply-templates>
    </table>
  </xsl:template>

  <xsl:template match="Root/*">
    <tr>
      <td>
        <xsl:value-of select="Prop1"/>
      </td>
      <td>
        ...
      </td>
      <td>
        <xsl:value-of select="Date"/>
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>
于 2013-03-14T08:35:57.467 回答