XSLT帮助从XML中选择最新的操作节点

时间:2015-04-13 20:47:38

标签: xslt

请在下面详细了解。对不起,我是这个网站的新用户和XSLT

我正在尝试实现以下方案

我有一个XML,其中包含员工的以下内容

<Identifier>
<Operation>ADD</Operation>
<Position_ID>12345</Operation_ID>
<Issued_Date>2013-12-10</Issued_Date>
<Country>CN</Country>
</Identifier>
<Identifier>
<Operation>REMOVE</Operation>
<Position_ID>6734</Operation_ID>
<Issued_Date>2013-11-09</Issued_Date>
<Country>CN</Country>
</Identifier>

我试图根据最近的操作活动从标识符部分输出一个带有一个Operation元素的txt文件,假设REMOVE操作是最近的操作,我想输出为

E001,SAM,PAUL,REMOVE,6734,2013-11-09,CN

如果ADD操作是最近发生的活动,那么我需要输出如下

E001,SAM,PAUL,ADD,12345,2013-12-10,CN

我使用下面的XSLT代码来提取最新的,但由于我使用'或'运算符,它为我提供了以下输出,这是不正确的

<xsl:choose>
<xsl:when test="pi:Identifier[pi:Operation = 'ADD' or pi:Operation = 'REMOVE']">                                
<xsl:for-each select="pi:Identifier">
<Identifiers>
<Operation>
<xsl:value-of select="pi:Operation" />
</Operation>
<Position_ID><xsl:value-of select="pi:Position_ID                        </Position_ID
<Country><xsl:value-of select="pi:Country" />                                                          </Country>
<Issued_Date>
<xsl:value-of select="pi:Issued_Date" />
</Issued_Date>
</Identifiers>
</xsl:for-each></xsl:when>
</choose>

E001,SAM,PAUL,ADD,12345,2013-12-10,CN,REMOVE,6734,2013-11-09,CN

如果有帮助,请告诉我。

1 个答案:

答案 0 :(得分:0)

  

我正在尝试输出一个包含一个Operation元素的txt文件   基于近期操作活动

的标识符部分如下所示

假设您正在使用XSLT 1.0,实现此目的的方法是按日期对Identifier元素进行排序,并从第一个(或从最后一个,取决于排序顺序)元素中获取数据。 / p>

例如,给定格式正确(!)输入:

<强> XML

<root>
    <Identifier>
        <Operation>ADD</Operation>
        <Position_ID>12345</Position_ID>
        <Issued_Date>2013-12-10</Issued_Date>
        <Country>CN</Country>
    </Identifier>
    <Identifier>
        <Operation>REMOVE</Operation>
        <Position_ID>6734</Position_ID>
        <Issued_Date>2013-11-09</Issued_Date>
        <Country>CN</Country>
    </Identifier>
</root>

应用以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="/root">
    <xsl:for-each select="Identifier">
        <xsl:sort select="Issued_Date" data-type="text" order="descending"/>
        <xsl:if test="position()=1">
            <xsl:value-of select="Operation" />
            <xsl:text>,</xsl:text>
            <xsl:value-of select="Position_ID" />
            <xsl:text>,</xsl:text>
            <xsl:value-of select="Issued_Date" />
            <xsl:text>,</xsl:text>
            <xsl:value-of select="Country" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

结果

ADD,12345,2013-12-10,CN