2013-07-03 54 views
1

最近我遇到了一個情況,我應該使用'和'關鍵字應用每個循環和concat字符串。以下是我的xml文檔的一部分。Concat使用每個循環和和關鍵字

<?xml version="1.0" encoding="utf-8"?> 
<case.ref.no.group> 
    <case.ref.no> 
     <prefix>Civil Appeal</prefix> 
     <number>W-02-887</number> 
     <year>2008</year> 
    </case.ref.no> 
    <case.ref.no> 
     <prefix>Civil Appeal</prefix> 
     <number>W-02-888</number> 
     <year>2008</year> 
    </case.ref.no> 
</case.ref.no.group> 

我試了下面的xslt就可以了。

<xsl:template match="case.ref.no.group"> 
    <xsl:variable name="pre"> 
     <section class="sect2"> 
     <xsl:text disable-output-escaping="yes">Court of Appeal</xsl:text> 
     </section> 
    </xsl:variable> 
    <xsl:variable name="tex"> 
     <xsl:value-of select="./case.ref.no/prefix"/> 
    </xsl:variable> 
    <xsl:variable name="iter"> 

     <xsl:value-of select="./case.ref.no/number"/> 
     <xsl:if test="following::case.ref.no/number">;</xsl:if> 

    </xsl:variable> 
    <xsl:variable name="year"> 
     <xsl:value-of select="./case.ref.no/year"/> 
    </xsl:variable> 
    <div class="para"> 
     <xsl:value-of select="concat($pre,' – ',$tex,' Nos. ',$iter,'-',$year)"/> 
    </div> 
    </xsl:template> 

當我嘗試運行它它給了我下面的輸出。

上訴法院 - 民事上訴號W-02-887 2008

,但我想它下面是。

上訴法院 - 民事上訴號W-02-887-2008和W-02-888-2008

請讓我知道我能做到這一點。我在xslt 1.0中這樣做。

謝謝

回答

0

我不明白你到底想要做什麼。你提到for-each但在你的代碼是不存在的,你提到的字and和,如果我使用下面的樣式表

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
     <output> 
      <xsl:apply-templates select="case.ref.no.group" /> 
     </output> 
    </xsl:template> 

    <xsl:template match="case.ref.no.group"> 
     <section class="sect2"> 
      <xsl:text>Court of Appeal</xsl:text> 
     </section> 

     <xsl:text> - </xsl:text> 
     <xsl:value-of select="case.ref.no[1]/prefix" /> 
     <xsl:text> Nos. </xsl:text> 

     <xsl:for-each select="case.ref.no"> 
      <xsl:value-of select="number" /> 
      <xsl:text>-</xsl:text> 
      <xsl:value-of select="year" /> 
      <xsl:if test="not(position() = last())"> 
       <xsl:text> and </xsl:text> 
      </xsl:if> 
     </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

你不使用它:-)

我得到這樣的結果

<?xml version="1.0" encoding="UTF-8"?> 
<output xmlns:fo="http://www.w3.org/1999/XSL/Format"><section class="sect2">Court of Appeal</section> - Civil Appeal Nos. W-02-887-2008 and W-02-888-2008</output> 

但正如我所說我不確定我是否瞭解您的需求。例如,我不知道你是否需要某種分組(前綴將在每個<case.ref.no>下同一個父母<case.ref.no.group>?)等

+0

感謝兄弟這工作。非常感謝你。 – user2423959

相關問題