2013-08-21 60 views
1

條件語句我試圖讓那種「開關」的條件語句,所以根據XML文件中的type屬性的值 - 我把某個圖標在HTML中,然後我添加文本。但是,如果工作不完全......或者不完全按照我的想法。沒有完全工作「的選擇,當」在XSLT

的XML:

<?xml version="1.0" encoding="utf-8"?> 
<TreeView> 
    <Parent text="Installation"> 
    <child text="Startup" type="video" file="startup.wmv" icon="c://user/desktop/blahblah.jpg"/> 
    <child text="Getting there" type="video" file="gettingthere.wmv" icontPath="something"/> 
    <child text="Steps" type="document" file="steps.docx" icon="asd"/> 
    <child text="Pictures" type="presentation" file="pics.jpg" icon="dasdasdas"/> 
    </Parent> 
    <Parent text="Usage"> 
    <child text="Tilbud pane" type="video" file="tilbud.mwv" icon="asdasd"/> 
    <child text="Report pane" type="document" file="report.docx" icon="gfdhd"/> 
    </Parent> 
</TreeView> 

的XSLT:

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

    <xsl:output method="html" encoding="utf-8"/> 

    <xsl:template match="/"> 
     <ul id="LinkedList1" class="LinkedList"> 
     <xsl:apply-templates/> 
     </ul> 
    </xsl:template> 

    <xsl:template match="Parent"> 
     <li> 
     <xsl:value-of select="@text"/> 
     <br/> 
     <ul> 
      <xsl:choose> 
      <xsl:when test="child/@type = 'video'"> 
       <img src="play_icon.png" alt="play_video_icon" title="Video tutorial" /> 
      </xsl:when> 
      <xsl:when test="child/@type = 'document'"> 
       <img src="word_icon.png" alt="text_document_icon" title="Text Document" /> 
      </xsl:when> 
      <xsl:when test="child/@type = 'presentation'"> 
       <img src="powerpoint_icon.png" alt="powerpoint_icon" title="Power Point presentation" /> 
      </xsl:when> 
      </xsl:choose> 
      <xsl:apply-templates select="child"/> 
     </ul> 
     </li> 
    </xsl:template> 

    <xsl:template match="child"> 
     <li><xsl:value-of select="@text"/></li> 
    </xsl:template> 

</xsl:stylesheet> 

這就是我得到 - >

![Not correct.][1] 
------------------------------------ 

這是我怎麼想看 - >

![Correct.][2] 
------------------------------------ 

我想我沒有正確地訂購條件語句,但我沒有真正知道如何。那麼,任何想法如何解決這個問題?

回答

2

試試這個

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

    <xsl:output method="html" encoding="utf-8"/> 

    <xsl:template match="/"> 
     <ul id="LinkedList1" class="LinkedList"> 
     <xsl:apply-templates/> 
     </ul> 
    </xsl:template> 

    <xsl:template match="Parent"> 
     <li> 
      <xsl:value-of select="@text"/> 
      <br/> 
      <ul> 
       <xsl:apply-templates select="child"/> 
      </ul> 
     </li> 
    </xsl:template> 

    <xsl:template match="child[@type='video']"> 
     <li> 
      <img src="play_icon.png" alt="play_video_icon" title="Video tutorial" /> 
      <xsl:value-of select="@text"/> 
     </li> 
    </xsl:template> 
    <xsl:template match="child[@type='document']"> 
     <li> 
       <img src="word_icon.png" alt="text_document_icon" title="Text Document" /> 
      <xsl:value-of select="@text"/> 
     </li> 
    </xsl:template> 
    <xsl:template match="child[@type='presentation']"> 
     <li> 
      <img src="powerpoint_icon.png" alt="powerpoint_icon" title="Power Point presentation" /> 
      <xsl:value-of select="@text"/> 
     </li> 
    </xsl:template> 
</xsl:stylesheet> 

與方法的問題是,你只是爲每一個父一個<IMG>。

如果你願意,你也可以使用這個

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

    <xsl:output method="html" encoding="utf-8"/> 

    <xsl:template match="/"> 
     <ul id="LinkedList1" class="LinkedList"> 
     <xsl:apply-templates/> 
     </ul> 
    </xsl:template> 

    <xsl:template match="Parent"> 
     <li> 
      <xsl:value-of select="@text"/> 
      <br/> 
      <ul> 
       <xsl:apply-templates select="child"/> 
      </ul> 
     </li> 
    </xsl:template> 

    <xsl:template match="child"> 
     <li> 
      <xsl:choose> 
       <xsl:when test="@type = 'video'"> 
        <img src="play_icon.png" alt="play_video_icon" title="Video tutorial" /> 
       </xsl:when> 
       <xsl:when test="@type = 'document'"> 
        <img src="word_icon.png" alt="text_document_icon" title="Text Document" /> 
       </xsl:when> 
       <xsl:when test="@type = 'presentation'"> 
        <img src="powerpoint_icon.png" alt="powerpoint_icon" title="Power Point presentation" /> 
       </xsl:when> 
      </xsl:choose> 
      <xsl:value-of select="@text"/> 
     </li> 
    </xsl:template> 
</xsl:stylesheet> 
+0

是啊,我才意識到我的錯誤(這是我把'選擇-when'聲明中的「父」模板),並在想爲什麼不在子模板中使用'choose-when'。然後你更新了你的答案。 :) 謝謝! – Syspect

+0

+1推薦的模板匹配方法,而不是使用''