Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在模板中多次使用Xml标记_Xml_Xslt - Fatal编程技术网

在模板中多次使用Xml标记

在模板中多次使用Xml标记,xml,xslt,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>

如何使用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>

我们能否两次使用模板

如果您确实希望两个模板匹配同一个元素,可以使用mode属性

<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>
要调用它们,您需要在应用模板时指定所需的模式

  <xsl:apply-templates select="LATEST_TITLE" mode="date" />
  <xsl:apply-templates select="LATEST_TITLE" mode="title" />
您真正需要做的唯一额外工作是向第一个apply模板添加xsl:sort,以按日期排序,然后更改匹配的模板,使其仅输出第一个位置的元素

试试这个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>

多次使用模板与显示最近日期有什么关系?标题的顺序在这里重要吗?如果不是,您可以按日期对记录进行排序,并且仅当position=1时才输出日期。这确实是您期望的输出吗?也就是说,您只想输出最近的日期,然后按原始顺序输出标题文本?输出的肯定是文本,而不是xml吗?是的,这是唯一的主要问题。我觉得使用两个模板我们可以实现这个输出。第一个模板可用于显示日期,另一个模板可用于显示标题。是的,我需要同样顺序的输出。
<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>