私は、他の 2 つのノード間の各ノードで動作する必要がある Greasemonkey スクリプトに取り組んでいます。現在、(ますます複雑になっている) XPath 式を使用して最初のノードを取得しています。「間」ノードを取得する別の式がありますが、最初の式が2回含まれており、かなり長くなっています。これは、2 つの「条項」のみを含む以前のバージョンです。
var xpHeader = "//h2[a/@name='section-References' or a/@name='References']";
var xpContents = "//h2[a/@name='section-References' or a/@name='References']/following-sibling::*[following-sibling::h2[1] = //h2[a/@name='section-References' or a/@name='References']/following-sibling::h2[1]]"
私が探しているのは、元の式を複数回再インクルードするのではなく、コンテキスト ノードに基づいて「コンテンツ」を選択する方法です。その「ヘッダー」式は、非常に急速にかなり複雑になります。関数を使用して XSLT でこれを実行できることはわかっていますcurrent()
が、もちろん、標準の XPath では使用できません。
<xsl:template match="//h2[a/@name='section-References' or a/@name='References']">
<xsl:for-each select="following-sibling::*[following-sibling::h2[1] = current()/following-sibling::h2[1]]">
<!-- do stuff -->
</xsl:for-each>
</xsl:template>
これを入力していると、現時点では XPath よりも DOM を使用してコンテンツを収集する方がおそらく簡単だろうと思いますが、これが可能かどうかを知りたいと思っています。
スクリプトの元のバージョンは、UserScripts.org で入手できます。