以下に、私の xml がどのように見えるかを単純化した XML の例を作成しました。監視したい番号を含む属性があります。それは一種のカウンターであり、変換中にカウンター++のたびに何かを追加したいと思います.
問題は、xml ファイルのレベル数です。ここでは 3 つしか作成していませんが、実際には 8 つまたはそれ以上の数を作成しています。現在のノードを前のノード (またはその逆) と比較する方法を見つける必要がありますが、レベルを考慮に入れる必要があります。たとえば、以下の例では、id 属性が発生しているかどうかを確認するために、id が 4 の lvl2 ノードを id 3 の lvl3 ノードと比較する必要があります。
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>