2016-02-23 55 views
0

我有一个看起来像这样的XML文件 - 它是一个用户列表,每个用户有两个日期。它可以是两个字段中的相同日期(我的示例文件中的第一个用户),也可以是不同的日期(第二和第三个用户)。XSL:过滤器,其中一个字段中的日期大于/晚于另一个字段中的日期

我要筛选此文件,因此只给我那些有lastActivityDate,除datePrivilegeGranted

是大于/后用户

THS 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> 
+0

请张贴预期的输出。谢谢。 – potame

回答

0

我猜你想做的事:

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> 
+0

优秀 - 它完全按照我的意愿工作 –

相关问题