比较日期的XPATH错误

时间:2016-05-28 18:24:21

标签: xslt xpath

我尝试进行使用xpath

比较Dates的转换

以下是我的XML示例:

 <?xml version="1.0" encoding="UTF-8"?><shop xmlns="http://www.dei.isep.ipp.pt/lprog"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xmlns:lprog="http://www.dei.isep.ipp.pt/lprog"         xsi:schemaLocation="http://www.dei.isep.ipp.pt/lprog TraXSD.xsd">        
        <Category nome="Fish">        
            <Article id="1" nome="fish1">                     
                <ProdDate>2018-10-02</ProdDate>                  
            </Article>              
        </Category >
    </shop>

这是带有

的xslt的示例
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:lprog="http://www.dei.isep.ipp.pt/lprog">
    <xsl:output method="html"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>List of Products out of Time</title>
            </head>
            <body>
                <table border="1">
                    <tr bgcolor="#9acd32">
                        <th style="text-align:left">Category</th>
                    </tr>                 

                    <tr>          
                        <td>
                            <xsl:apply-templates select="//lprog:Category/lprog:Article"/>                   
                        </td>    

                    </tr>
                </table>
            </body>
        </html>
    </xsl:template>


    <xsl:template match="lprog:Category/lprog:Articleo">        
        <xsl:value-of select="@nome"/>
        <xsl:text>:</xsl:text>

        <xsl:value-of select="lprog:ProdDate[xs:date(lprog:ProdDate) le xs:date('2016-06-03')]"/>       ERROR HERE

        <xsl:text disable-output-escaping="yes">
            <p></p>   
        </xsl:text>       
    </xsl:template>

</xsl:stylesheet>

**此行错误**    lprog:ProdDate [xs:date(lprog:ProdDate)le xs:date(&#39; 2016-06-03&#39;)]&#34; /&gt;

谢谢!

3 个答案:

答案 0 :(得分:2)

首先,如果要使用xs:datele运算符,则需要使用XSLT 2.0处理器。此外,样式表当然需要声明xmlns:xs="http://www.w3.org/2001/XMLSchema"命名空间。

我还认为您要将lprog:ProdDate[xs:date(lprog:ProdDate) le xs:date('2016-06-03')]更改为lprog:ProdDate[xs:date(.) le xs:date('2016-06-03')]match="lprog:Category/lprog:Articleo"更改为match="lprog:Category/lprog:Article"

使用XSLT 1.0处理器,您可以比较所有<xsl:value-of select="lprog:ProdDate[translate(., '-', '') &lt;= 20160603]"/>

答案 1 :(得分:0)

如果您使用的是XSLT 1.0处理器,则需要按照以下方式进行比较:

translate(lprog:ProdDate, '-', '') &lt; 20160603

注意:样式表中还有其他错误。很难在不知道你想要在这里完成什么的情况下列出所有内容。

答案 2 :(得分:0)

我正在处理一个非常相似的问题 - 我认为答案是转换为朱利安时代(我的样式表仍然是一个原始草案)。 这是一个绝对的日期,它应该适用于XSL 1.0,它不需要扩展。

我在这里找到了公式:

Finding the difference between 2 dates in xslt