下面我创建了一个简单的 XML 示例来说明我的 xml 的样子。我有一个包含我想观看的数字的属性。它有点像一个计数器,在转换过程中,每当计数器 ++ 时,我都想添加一些东西。
问题是我的 xml 文件中的级别数。在这里我只做了三个,但实际上我有 8 个甚至更多。我需要找到一种方法将当前节点与前一个节点进行比较(反之亦然),但要考虑级别。因此,例如在下面的示例中,需要将 id 为 4 的 lvl2 节点与 id 为 3 的 lvl3 节点进行比较,以找出 id 属性是否已被提升。
xml:
<lvl1 id="1">
<lvl2 id="1">
<lvl3 id="1"></lvl3>
<lvl3 id ="2"></lvl3>
</lvl2>
<lvl2 id="2">
<lvl3 id="3"></lvl3>
</lvl2>
<lvl2 id="4"></lvl2>
</lvl1>
由于使用 xslt 全局计数器变量是不可能的,所以我目前没有想法,似乎在这里或其他任何地方都找不到。
输出将类似于:
<ul>
<div>id 1</div>
<li>
<ul>
<li>
<ul>
<li></li>
<div>id 2</div>
<li></li>
</ul>
</li>
<li>
<ul>
<div>id 3</div>
<li></li>
</ul>
</li>
<div>id 4</div>
<li></li>
</ul>
</li>
这里将 xml 转换为 html 输出但没有 div 的样式表:
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<ul>
<xsl:value-of select="@id"/>
<xsl:apply-templates select="lvl1"/>
</ul>
</xsl:template>
<xsl:template match="lvl1">
<li class="{@id}">
lvl 1
<ul>
<xsl:apply-templates select="lvl2"/>
</ul>
</li>
</xsl:template>
<xsl:template match="lvl2">
<li class="{@id}">lvl 2
<ul>
<xsl:apply-templates select="lvl3"/>
</ul>
</li>
</xsl:template>
<xsl:template match="lvl3">
<li class="{@id}">lvl 3
</li>
</xsl:template>