此样式表如何生成HTML输出

时间:2012-01-08 01:54:38

标签: html xslt

如何完成以下应在图1中生成HTML输出的样式表。

我已经确定了它的某些部分,但无法使它与图1中的完全相同。我在XSL中尝试过“复制元素”,但却给了我重复的结果。

这是我的XML:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="research.xsl"?> 
<ResearchGroups xmlns="http://www.sam.com/sam.html"> 

<Group name="Intelligent Systems Group" id="ISG"> The Intelligent 
Systems Group pursues internationally-leading research in a wide 
range of intelligent systems. </Group> 

<Group name="Robotics" id="RBT"> The Essex robotics group is one of 
the largest mobile robotics groups in the UK. </Group> 

<Staff name="Callaghan, Vic" title="Professor" groups="ISG RBT"> 
Intelligent environments and robotics. </Staff> 
<Staff name="Gu, Dongbing" title="Dr" groups="RBT"> Multi-agent 
and distributed control systems. </Staff> 
</ResearchGroups>

我的XSLT:

    <xsl:stylesheet  
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:rg="http://www.sam.com/sam.html"  
        xmlns="http://wwww.w3.org/1999/xhtml"  
        version="2.0">    <xsl:template match="/"> 
        <html>    
          <head> <title>Research Groups</title> </head> 
          <body> <xsl:apply-templates select="//rg:Group"/> </body>  
        </html>      </xsl:template>    <xsl:template match="rg:Group"> 
        <xsl:variable name="ID" select="@id"/>  
        <h3> <a name="{$ID}"> <xsl:value-of select="@name"/> </a> </h3>  
        <p> <xsl:value-of select="text()"/>  </p>     
</xsl:template>  
</xsl:stylesheet>

HTML图1

XSLT样式表应该输出以下HTML

enter image description here

1 个答案:

答案 0 :(得分:1)

我想是这样的事情:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rg="http://www.sam.com/sam.html" xmlns="http://wwww.w3.org/1999/xhtml" version="2.0">
    <xsl:template match="/">
        <html>
            <head>
                <title>Research Groups</title>
            </head>
            <body>
                <xsl:apply-templates select="//rg:Group"/>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="rg:Group">
        <xsl:variable name="ID" select="@id"/>
        <h3>
            <a name="{$ID}">
                <xsl:value-of select="@name"/>
            </a>
        </h3>
        <p>
            <xsl:value-of select="text()"/>
        </p>
        <ul>
            <xsl:apply-templates select="//rg:Staff[contains(@groups, current()/@id)]">
                <xsl:with-param name="curGroup"><xsl:value-of select="@id"/></xsl:with-param>
            </xsl:apply-templates>
        </ul>
    </xsl:template>
    <xsl:template match="rg:Staff">
        <xsl:param name="curGroup"/>
        <li>
            <xsl:value-of select="@name"/>
            <xsl:text>: </xsl:text>
            <xsl:value-of select="text()"/>
            <xsl:if test="//rg:Group[(@id != $curGroup) and contains(current()/@groups, @id)]">
                <xsl:text> ( </xsl:text>
                <xsl:apply-templates select="//rg:Group[(@id != $curGroup) and contains(current()/@groups, @id)]" mode="otherGroups"/>
                <xsl:text> ) </xsl:text>
            </xsl:if>
        </li>
    </xsl:template>
    <xsl:template match="rg:Group" mode="otherGroups">
        <a href="#{@id}">
            <xsl:value-of select="@id"/>    
        </a>
    </xsl:template>
</xsl:stylesheet>