XSLT - 同名的多个父组

时间:2014-02-19 22:11:58

标签: xml xslt

没有找到一个确切的解决方案,对于这个基本的示例文件,我想打印的只是第一个'Collection'(即A-H)而不是第二个的数据,我该怎么办呢?感谢

<?xml version="1.0" encoding="UTF-8"?>

<Library>
    <Collection>
        <CD>
            <Title>A</Title>
            <Artist>B</Artist>
        </CD>
        <CD>
            <Title>C</Title>
            <Artist>D</Artist>
        </CD>
        <CD>
            <Title>E</Title>
            <Artist>F</Artist>
        </CD>
        <CD>
            <Title>G</Title>
            <Artist>H</Artist>
        </CD>
    </Collection>
    <Collection>
        <CD>
            <Title>I</Title>
            <Artist>J</Artist>
        </CD>
        <CD>
            <Title>K</Title>
            <Artist>L</Artist>
        </CD>
    </Collection>
</Library>

2 个答案:

答案 0 :(得分:0)

这会将第一个Collection的内容放在HTML表格中,并忽略其他集合的内容:

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

    <xsl:output indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="Library">
        <table>
            <tr><th>Title</th><th>Artist</th></tr>
            <xsl:apply-templates/>
        </table>

    </xsl:template>

    <!-- Ignoring all collections -->
    <xsl:template match="Collection" />

    <!-- Not ignoring the first collection -->
    <xsl:template match="Collection[1]">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="CD">
        <tr>
            <td><xsl:value-of select="Title" /></td>
            <td><xsl:value-of select="Artist" /></td>
        </tr>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

以下样式表:

<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>

    <xsl:template match="/Library">
        <table>
            <tbody>
                <tr>
                    <td>Title</td>
                    <td>Artist</td>
                </tr>
                <xsl:apply-templates select="Collection[position() = 1]"/>
            </tbody>
        </table>
    </xsl:template>

    <xsl:template match="Library/Collection">
        <xsl:for-each select="CD">
            <tr>
                <td><xsl:value-of select="Title"/></td>
                <td><xsl:value-of select="Artist"/></td>
            </tr>
        </xsl:for-each>

    </xsl:template>

</xsl:stylesheet>

应用于输入XML时,生成:

<?xml version="1.0" encoding="utf-8"?>
<table>
   <tbody>
      <tr>
         <td>Title</td>
         <td>Artist</td>
      </tr>
      <tr>
         <td>A</td>
         <td>B</td>
      </tr>
      <tr>
         <td>C</td>
         <td>D</td>
      </tr>
      <tr>
         <td>E</td>
         <td>F</td>
      </tr>
      <tr>
         <td>G</td>
         <td>H</td>
      </tr>
   </tbody>
</table>