2

XSLT 1.0 を使用して、次のサンプル構造を持つ xml ドキュメントを処理しています。

<root>
    <descriptions>
        <description name="abc">
            <detail>XXXXXXXXXXXXX</detail>
        </description>
        <description name="def">
            <detail>XXXXXXXXXXXXX</detail>
        </description>
        <description name="ghi">
            <detail>XXXXXXXXXXXXX</detail>
        </description>
        <description name="lmn">
            <detail>XXXXXXXXXXXXX</detail>
        </description>
        // ....... several more description elements
    </descriptions>

    <list>
        <book name="abc"/>
        <book name="def"/>
        <book name="lmn"/>
    </list>
</root> 

「名前」属性を使用して、「リスト」ノードの下の「本」と「説明」の下の「説明」を一致させることを望んでいました。したがって、出力は次のようになります。

abc
XXXXXXXXXXXXX

def
XXXXXXXXXXXXX

lmn
XXXXXXXXXXXXX

私は試した:

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

<xsl:for-each select="root/list/book">
    <xsl:param name="bookName" select="@name"/>
    <xsl:for-each select="root/descriptions/description">
        <xsl:if test="$bookName = @name">
            <h3><xsl:value-of select="$bookName"/></h3>
            <p><xsl:value-of select="detail"/></p>
        </xsl:if>
    </xsl:for-each>
</xsl:for-each>
</xsl:stylesheet>

ネストされたfor-eachを使用するよりも効率的な方法が必要だと思いますが、思いつきませんでした..誰か助けてもらえますか? ありがとうございました!!

4

1 に答える 1