使用Xml标记多次使用模板

时间:2013-12-17 14:52:49

标签: xml xslt

如何使用xslt

将最后一个日期显示在顶部
<records>
  <LATEST_TITLE>
    <LATEST_DATE>2013-12-10</LATEST_DATE>
    <TITLE>abc</TITLE>
  </LATEST_TITLE>
  <LATEST_TITLE>
    <LATEST_DATE>2013-12-13</LATEST_DATE>
    <TITLE>def</TITLE>
  </LATEST_TITLE>
  <LATEST_TITLE>
    <LATEST_DATE>2013-12-17</LATEST_DATE>
    <TITLE>ghi</TITLE>
  </LATEST_TITLE>
</records>

预期产出

2013-12-17
abc
def
ghi

我们可以两次使用模板吗

1 个答案:

答案 0 :(得分:0)

如果您真的想要两个匹配相同元素的模板,可以使用模式属性

<xsl:template match="LATEST_TITLE" mode="date">
   <!-- Code here to output the date -->
</xsl:template>

<xsl:template match="LATEST_TITLE" mode="title">
   <!-- Code here to output the title -->
</xsl:template>

要调用它们,您可以在执行apply-templates

时指定所需的模式
  <xsl:apply-templates select="LATEST_TITLE" mode="date" />
  <xsl:apply-templates select="LATEST_TITLE" mode="title" />

您真正需要做的唯一额外工作是将xsl:sort添加到第一个apply-templates,按日期排序,然后将匹配模板更改为仅输出第一个位置的元素。

试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output omit-xml-declaration="yes" indent="yes" />
   <xsl:template match="/*">
      <xsl:apply-templates select="LATEST_TITLE" mode="date">
         <xsl:sort select="LATEST_DATE" order="descending" />
      </xsl:apply-templates>
      <xsl:apply-templates select="LATEST_TITLE" mode="title" />
   </xsl:template>

   <xsl:template match="LATEST_TITLE" mode="date">
      <xsl:if test="position() = 1">
         <xsl:value-of select="LATEST_DATE" />
         <xsl:value-of select="'&#10;'" />
      </xsl:if>
   </xsl:template>

   <xsl:template match="LATEST_TITLE" mode="title">
      <xsl:value-of select="TITLE" />
      <xsl:value-of select="'&#10;'" />
   </xsl:template>
</xsl:stylesheet>