在XSLT中没有完全工作“Choose-when”条件语句

时间:2013-08-21 09:04:24

标签: xml xslt xslt-1.0

我正在尝试创建一种“switch”的条件语句,因此根据XML文件中type属性的值 - 我在HTML中放了一个图标,然后我添加了文本。但如果不能完全运作......或者不完全符合我的要求。

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>

这就是我得到的 - &gt;

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

这就是我想要的样子 - &gt;

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

我想我没有正确地排序条件语句,但我真的不知道如何。那么,任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分: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>

您的方法存在的问题是您只需生成一个&lt; img&gt;为每个父母。

如果您愿意,也可以使用此

<?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>