使用XSLT选择特定的xml记录

使用XSLT选择特定的xml记录,xslt,Xslt,下面是我的xml节点的一个示例。我想获取带有最新价格日期的活动价格记录(状态代码=活动)。 我怎样才能做到这一点 <price_record> <price>18.99</price> <price_date>20060724</price_date> <price_status_code>Active</price_status_code>

下面是我的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>

18.99
20060724
忙碌的
1.
25.99
20080725
不活跃的
2.
18.99
20060928
忙碌的
3.

您缺少根元素。下面的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>


排序应该只在“价格日期”而不是“价格记录/价格日期”。此外,您还需要指定“降序”的顺序,否则它将是最早的日期,而不是最晚的日期。上面已编辑。谢谢你的观察。为什么你需要身份转换模板呢?我只是添加了它,以防他的xml不仅仅是价格记录。你认为这是误导吗?我认为它没有任何作用,因此它是多余的