2

XSL にはかなり新しいので、初心者であることをお許しください。

入力 XML ドキュメントがあります (これは実際にはJargon Fileの docbook 形式で、大幅に省略されています):

<?xml version="1.0" encoding="ISO-8859-1"?>
<glossary>
    <glossdiv id='glossdiv-0'>
        <title>0</title>            
        <glossentry id='dev-null'>
            <glossterm>/dev/null</glossterm>
            <glossdef>
                snip...
                <glossterm>bit bucket</glossterm>
            </glossdef>
        </glossentry>
        <glossentry id='me'>
            <glossterm>/me</glossterm>
            <glossdef>
                snip...
                <glossterm>/dev/null</glossterm>
            </glossdef>
        </glossentry>           
    </glossdiv>
</glossary>

これは、私が取り組んできたテスト用 XSL です。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xalan="http://xml.apache.org/xalan"
    version="2.0">

    <xsl:output indent="yes" xalan:indent-amount="5" />
    <xsl:template match="text()" />

    <xsl:key name="glossterm-lookup-key" match="glossentry/@id" use="glossentry/glossterm" />

    <xsl:template match="glossary" >
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="glossterm">
        Key: <xsl:value-of select="." />
        Value: <xsl:value-of select="key('glossterm-lookup-key', .)" />
        <xsl:text>
        </xsl:text>
    </xsl:template>
</xsl:stylesheet>

私の目的は、要素に出くわすたびに、指定された<glossterm>を検索したいということです。たとえば、 を見つけたら、を取得したいと思います。glossentry/@idglossterm/text()<glossterm>/dev/null</glossterm>dev-null

私はglossdefのglosstermsにのみ本当に興味がありますが、私はすべてのもののために作業中のxsl:templatesを持っています - テストのために、私はちょうどすべてのglosstermsに取り組んできました.

別のルックアップ ドキュメントを作成し、 XML.com: Reading Multiple Input Documentsで説明されているアプローチを使用しようとしましたが、うまくいきませんでした。

ヒントはありますか?

4

2 に答える 2

2

あなたの説明から見分けるのは少し難しいですが、私はあなたがこれを望んでいると思います

<xsl:key name="glossterm-lookup-key" match="glossentry/glossterm" use="text()" />

glossentry/glosstermこれにより、子のテキストをキーとするノードのインデックスが作成されますglossterm。その場合の参照は次のとおりです。

<xsl:value-of select="key('glossterm-lookup-key', .)/../@id" />

これは、現在のコンテキストノードのテキストを使用してインデックスを検索し@id、親のを返します。

于 2011-04-28T16:49:24.133 に答える
0

@Jim Garrisonの正解に加えて、これはあなたの問題の説明です。

http://www.w3.org/TR/xslt#keyから

use属性は、キーの値を指定する式です。式は、パターンに一致するノードごとに 1 回評価されます。

つまり、キー宣言は次のようにする必要があります。

<xsl:key name="glossterm-lookup-key" 
         match="glossentry/@id" 
         use="../glossterm" />  
于 2011-04-28T20:23:26.097 に答える