在 XSLT 中使用列表元素



所以下面你可以看到我给定的XML。我匹配了模板,我已经在学生节点 (xsl:template match="Class/Student"(:

<Class>
<Heading>This is a sentence.</Heading>
<Student>Alex</Student>
<Student>Emilia</Student>
<Student>John</Student>
</Class>

现在我需要从所有学生中获取一个列表,我想得到的内容应该如下所示:

<ul>
<li>Alex</li>
<li>Emilia</li>
<li>John</li>
</ul>

我想我的思维方式有误,因为我的 XSLT 目前看起来像这样:

<xsl:template match="Class/Student">
<ul>
<xsl:for-each select="../Student">
<li>
<xsl:apply-templates/>
</li>
</xsl:for-each>
</ul>
</xsl:template>

但我实际得到的是:

<ul>
<li>Alex</li>
<li>Emilia</li>
<li>John</li>
<ul>
<ul>
<li>Alex</li>
<li>Emilia</li>
<li>John</li>
<ul>
<ul>
<li>Alex</li>
<li>Emilia</li>
<li>John</li>
<ul>

我认为问题是我使用的 for-each 但我不知道在这种情况下我还应该做什么。

你想要每Class一个ul,而不是每Student,所以改变

<xsl:template match="Class/Student">

<xsl:template match="Class">

然后更改

<xsl:for-each select="../Student">

<xsl:for-each select="Student">

获取当前节点的每个Student子元素一个liClass

由于您已经采取了将模板匹配与template match="Class/Student"一起使用的步骤,因此我建议坚持使用这种方法并简单地编写两个模板,一个用于Class元素,另一个用于Student元素

<xsl:template match="Class">
<ul>
<xsl:apply-templates select="Student"/>
</ul>
</xsl:template>
<xsl:template match="Student">
<li>
<xsl:apply-templates/>
</li>
</xsl:template>

对于更复杂的情况,这会导致更干净、更模块化的代码。

相关内容

  • 没有找到相关文章

最新更新