あなたの表現:
//*[generate-id()=generate-id($myVariable[7])]/ancestor::*
が正しいです。
「うまくいきません」という理由は、$myVariable[7]
にあなたが期待しているものが含まれていないことが原因である可能性があります。
ここでは、上記の式を使用して期待値を生成する単純な完全な例を示します。正しい結果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="myVariable"
select="/*/*/*/*/num"/>
<xsl:template match="/">
<xsl:for-each select=
"//*[generate-id()
=
generate-id($myVariable[7])
]
/ancestor::*
">
<xsl:value-of select="name()"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
この変換は、以下のXML文書に適用される:
<a>
<b>
<c>
<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>
</c>
</b>
</a>
を希望、正しい結果が($myVariable[7]
のすべての祖先の名前)が生成されます。
a
b
c
nums
Xalanに関連する非XSLソリューション例えば(あなたがJavaでこれを変換しているのなら)拡張機能?または、どのような変換技術を使用していますか? –
変換はブラウザで行われているため、XSLT 1.0ではノードセットの拡張子だけが使用されます。 – JPM