XHTML ドキュメント内のノードをたどって、一連の条件に一致するすべてのノードの子を見つけ、ドキュメント階層内の深さに対する相対的な位置に基づいて名前を変更しようとしています。
例えば:
要素内のノードを反復処理し、h1、h2、h3、h4、h5、または h6 のすべてを h1 に変換したいと考えています。
次に、要素の他のすべての子を反復処理し、hN という名前の子ノードを見つけて、これらの名前を h2 にします。
などなど、子ノードを介した再帰の深さは無制限ですが、要素の名前付けは h6 の制限まで...
これは明らかですか?申し訳ありませんが、私はxslが初めてです。
これが私がこれまでに持っているものです:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[contains(@class,'_col')]">
<xsl:apply-templates select="*" mode="iterate"/>
</xsl:template>
<xsl:template match="*" mode="iterate">
<xsl:if test="name()='h1' or name()='h2'or name()='h3'or name()='h4'or name()='h5'or name()='h6'">
<h6>
<xsl:apply-templates select="@*|node()"/>
</h6>
</xsl:if>
<xsl:if test="name()!='h1' and name()!='h2' and name()!='h3' and name()!='h4' and name()!='h5' and name()!='h6'">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
明らかに、これはまったく機能しません。h# タグのインクリメントを除外して、すべての h# タグが h1 タグに変換された完全なドキュメントをシートに出力させることができれば、かなり気分が良くなります。誰でも助けてもらえますか?
ありがとう。
編集:
最初の答えは大きな助けになりますが、問題を明確にするために、すべての h# タグを 1 ずつ増やして最大 6 にするだけでなく、すべての h# タグを見つけて、それらをインクリメントした数 (最大 6) に設定する必要があります。ドキュメント階層の深さに応じて。
xml は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<body>
<h2>Theme</h2>
<div class="col _incidental">
<h2>theme 2</h2>
<div>
<h3>theme 3</h3>
<p>some thext</p>
</div>
</div>
<div class="col _vital">
<h2>theme 2</h2>
<div>
<h1>theme 3</h1>
<p>some thext</p>
</div>
<h2>theme 2</h2>
<div>
<h4>theme 3</h4>
<p>some thext</p>
<h3>theme 3</h3>
<p>some thext</p>
</div>
</div>
<div class="col _related">
<h2>theme 2</h2>
</div>
<div>
<h5>theme 3</h5>
<p>some thext</p>
</div>
</div>
</div>
</body>
出力は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<body>
<h1>Theme</h1>
<div class="col _incidental">
<h2>theme 2</h2>
<div>
<h3>theme 3</h3>
<p>some thext</p>
</div>
</div>
<div class="col _vital">
<h2>theme 2</h2>
<div>
<h3>theme 3</h3>
<p>some thext</p>
</div>
<h2>theme 2</h2>
<div>
<h3>theme 3</h3>
<p>some thext</p>
<h3>theme 3</h3>
<p>some thext</p>
</div>
</div>
<div class="col _related">
<h2>theme 2</h2>
<div>
<div>
<h3>theme 3</h3>
<p>some thext</p>
</div>
</div>
</div>
</body>
変換には、最後に見つかった hN に対するドキュメント階層内の位置に従って番号が付けられた hN 要素が含まれます。したがって、h2 が見つかった場合、兄弟が検索され、hN が h3 になり、何も見つからない場合、兄弟が検索され、h3 になり、兄弟の hN 子孫が h4 になります。 . 意味がありますか?