0
を処理する方法は、preceding-sibling
の軸の特定のノードの位置によって異なりますか?XSLT:先行する兄弟の位置に応じた処理要素
XMLコード:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text/>
<text/>
<text/>
<list_num_start/>
<list_num/>
<list_num/>
<list_x/>
<text/>
<text/>
<text/>
<list_square_start/>
<list_square/>
<list_square/>
<list_x/>
</root>
テンプレート:残念ながら
<xsl:template match="list_x">
<xsl:element name="li">
<xsl:attribute name="class"><xsl:value-of select="name()"/></xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
<xsl:choose>
<xsl:when test="position(preceding-sibling::list_num_start[last()]) < position(preceding-sibling::list_square_start[last()])">
<xsl:text disable-output-escaping="yes"></ol></xsl:text>
</xsl:when>
<xsl:otherwise>...</xsl:otherwise>
</xsl:choose>
</xsl:template>
position()
は、任意の引数を許可していません。
出力は次のようになります。
<root>
<text/>
<text/>
<text/>
<ol>
<li class="list_num_start"/>
<li class="list_num"/>
<li class="list_num"/>
<li class="list_x"/>
</ol>
<text/>
<text/>
<text/>
<ul>
<li class="list_square_start"/>
<li class="list_square"/>
<li class="list_square"/>
<li class="list_x"/>
</ul>
</root>
ありがとう!
希望する出力は何ですか? – zx485
表示される出力は整形式のXMLではなく、XSL変換によって生成することはできません。 - あなたがここに適用したい論理を平易な言語で説明してください。動作していないコードは、説明の代わりに使用されるものではありません。 –
コードが例として考えられました。問題は、 '先行兄弟'軸上の特定の先行要素を嫌う要素を処理する方法です。 – Ferestes