XSLT计数元素包含的日期小于另一个日期

时间:2013-01-07 15:36:25

标签: xslt

我正在尝试从xml文件生成.csv,其中包含一个“OtherEmployees”计数,其中包含日期之前的出生日期(例如01/01/1970),我不确定语法。

请注意,日期目前采用dd / mm / yyyy格式。

这是xml -

的一个例子
<Companies>
<Company>
    <CompanyReference>00000060</CompanyReference>
    <Contact>
        <PersonID>63</PersonID>
        <Title>Mrs</Title>
        <Forename>EXAMPLE</Forename>
        <Middlename/>
        <Surname>NAME</Surname>
        <DOB>27/05/1928</DOB>
    </Contact>
    <OtherEmployees>
        <OtherEmployee>
            <PersonID>28870</PersonID>
            <Title>Miss</Title>
            <Forename>EXAMPLE</Forename>
            <Middlename/>
            <Surname>NAME2</Surname>
            <DOB>03/05/1953</DOB>
        </OtherEmployee>
        <OtherEmployee>
            <PersonID>28871</PersonID>
            <Title>Miss</Title>
            <Forename>EXAMPLE</Forename>
            <Middlename/>
            <Surname>NAME3</Surname>
            <DOB>11/07/1961</DOB>
        </OtherEmployee>
    </OtherEmployees>
</Company>

我能够得到具有以下出生日期的其他雇员的数量 -

<xsl:value-of select="count(OtherEmployees/OtherEmployee[DOB])"/>

但是我现在需要将DOB与另一个日期进行比较 - 例如01/01/1970,如果他们在1970年1月1日之前有出生日期,则只返回计数中的OtherEmployee。

1 个答案:

答案 0 :(得分:2)

使用XSLT 2.0,您可以使用xs:date数据类型,例如

<xsl:value-of select="count(OtherEmployees/OtherEmployee[DOB and xs:date(concat(substring(DOB, 7), '-', substring(DOB, 4, 2), '-', substring(DOB, 1, 2))) lt xs:date('1970-01-01')])"/>

使用XSLT 1.0,您可以轻松地将数据格式dd/mm/yyyy转换为数字yyyymmdd并进行比较:

<xsl:value-of select="count(OtherEmployees/OtherEmployee[DOB and number(concat(substring(DOB, 7), substring(DOB, 4, 2), substring(DOB, 1, 2))) &lt; 19700101])"/>