【问题标题】:XSL: filter where a date in one field is greater/later than a date in another fieldXSL:过滤一个字段中的日期大于/晚于另一个字段中的日期
【发布时间】:2016-02-23 13:22:39
【问题描述】:

我有一个如下所示的 XML 文件 - 它是一个用户列表,每个用户都有两个日期。两个字段中的日期可能相同(我的示例文件中的第一个用户),也可能是不同的日期(第二个和第三个用户)。

我想过滤这个文件,以便它只给我那些 lastActivityDate 大于/晚于 datePrivilegeGranted 的用户

这个 XML 文件看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="activityvsprivilege2.xsl"?>
<report>
<title>Display Users</title>
<dateCreated>2016-02-23T13:58:56</dateCreated>
<dateFormat>yyyy/mm/dd</dateFormat>
<user>
<userID>0108484181</userID>
<name>
<displayName>Johansson</displayName>
</name>
<lastActivityDate>2005-08-18</lastActivityDate>
<datePrivilegeGranted>2005-08-18</datePrivilegeGranted>
</user>
<user>
<userID>4187101934</userID>
<name>
<displayName>Karlsson</displayName>
</name>
<lastActivityDate>2015-03-17</lastActivityDate>
<datePrivilegeGranted>2013-08-23</datePrivilegeGranted>
</user>
<user>
<userID>20580001535250</userID>
<name>
<displayName>Persson</displayName>
</name>
<lastActivityDate>2012-05-18</lastActivityDate>
<datePrivilegeGranted>2009-08-20</datePrivilegeGranted>
</user>
</report>

我的 XSL 样式表的初稿看起来像这样 - 我想我应该对 for-each-part 做点什么?

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <user>
    <xsl:for-each select="report/user">
    <patronline>
        <userID><xsl:value-of select="userID"/></userID>
        <displayName><xsl:value-of select="name/displayName"/></displayName>
        <lastActivityDate><xsl:value-of select="lastActivityDate"/></lastActivityDate>
        <datePrivilegeGranted><xsl:value-of select="datePrivilegeGranted"/></datePrivilegeGranted>
    </patronline>
    </xsl:for-each>
    </user>
</xsl:template>
</xsl:stylesheet>

【问题讨论】:

  • 请发布预期的输出。谢谢。

标签: xml date xslt


【解决方案1】:

我猜你想这样做:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/report">
    <user>
        <xsl:for-each select="user[translate(lastActivityDate, '-', '') > translate(datePrivilegeGranted, '-', '')]">
            <patronline>
                <xsl:copy-of select="userID | name/displayName | lastActivityDate | datePrivilegeGranted"/>
            </patronline>
        </xsl:for-each>
    </user>
</xsl:template>

</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2015-01-17
    • 2016-10-04
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多