我尝试进行使用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;
谢谢!
答案 0 :(得分:2)
首先,如果要使用xs:date
和le
运算符,则需要使用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(., '-', '') <= 20160603]"/>
。
答案 1 :(得分:0)
如果您使用的是XSLT 1.0处理器,则需要按照以下方式进行比较:
translate(lprog:ProdDate, '-', '') < 20160603
注意:样式表中还有其他错误。很难在不知道你想要在这里完成什么的情况下列出所有内容。
答案 2 :(得分:0)
我正在处理一个非常相似的问题 - 我认为答案是转换为朱利安时代(我的样式表仍然是一个原始草案)。 这是一个绝对的日期,它应该适用于XSL 1.0,它不需要扩展。
我在这里找到了公式: