我有一个用于显示足球联赛表的 xml 提要。我希望能够过滤表格以仅显示一个特定的团队及其上方和下方的可变数量的条目。
例如,在 24 支球队的联赛中,我想显示 A 队以及 3 支排名较高的球队和 3 支排名较低的球队,我目前正在使用 xsl 来格式化数据,但是我不知道如何做到这一点。它甚至会与 xsl 一起使用吗?
一旦你成功地选择了你的“特定团队”,你可以使用follow-sibling和previous-sibling轴来选择你附近的项目,使用position()来限制它们的数量。
这是一个简化的示例:
让我们有这个 XML 文档(每个元素代表一个“团队”),该文档代表所有 10 个团队,已经按点排序:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
如果我们感兴趣的团队由<num>05</num>
以下转换表示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vgivenTeam"
select="/*/*[. = 5]"/>
<xsl:template match="/">
<xsl:copy-of select=
"$vgivenTeam
| $vgivenTeam/preceding-sibling::*[not(position() > 3)]
| $vgivenTeam/following-sibling::*[not(position() > 3)]
"/>
</xsl:template>
</xsl:stylesheet>
当应用于上述 XML 文档时,会产生想要的结果——在给定的一个之前的三个团队、给定的团队和给定的之后的三个团队:
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>