2013-12-17 79 views
0

多次如何去年大部分時間讓使用XSLT使用XML標籤與模板

<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 

我們可以利用模板的兩次

+0

如何使用與顯示的最近日期的模板多次? –

+1

標題的順序是否重要?如果沒有,您可以按日期對記錄進行排序,並且只有在position()= 1時才輸出日期。 –

+0

這絕對是您期望的輸出嗎?也就是說,您只想輸出最近的日期,然後按原始順序輸出標題文本?這是肯定的文本輸出,而不是XML? –

回答

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> 

而且打電話給他們,你會做應用的模板

<xsl:apply-templates select="LATEST_TITLE" mode="date" /> 
    <xsl:apply-templates select="LATEST_TITLE" mode="title" /> 

唯一的額外的工作,你真的需要做的就是添加一個XSL時指定所需要的模式:排序的第一應用模板,以按日期排序,然後將匹配模板更改爲僅輸出第一個位置中的元素。

試試這個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> 
+0

謝謝你,夥計! – user2830264