使用XSLT选择特定的xml记录

时间:2014-02-14 08:23:45

标签: xslt

以下是我的xml节点的示例。我想以最新的价格日期获取有效价格记录(状态代码=有效)。 我怎样才能做到这一点?

  <price_record>
        <price>18.99</price>
        <price_date>20060724</price_date>
        <price_status_code>Active</price_status_code>  
        <seq_num>1</seq_num>
  </price_record>

  <price_record>
        <price>25.99</price>
        <price_date>20080725</price_date>    
        <price_status_code>InActive</price_status_code>   
        <seq_num>2</seq_num>
  </price_record>

  <price_record>
        <price>18.99</price>
        <price_date>20060928</price_date>    
        <price_status_code>Active</price_status_code>   
        <seq_num>3</seq_num>
  </price_record>

1 个答案:

答案 0 :(得分:0)

您缺少根元素。下面的xslt使用“catalog”作为根元素,您可以更改它。输出是符合您标准的唯一记录。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="catalog">
        <xsl:for-each select="price_record[price_status_code = 'Active']" >
        <xsl:sort select = "price_date" order="descending" />
            <xsl:if test="position() = 1" >
                <xsl:copy-of select = "." />
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>