2

次のコードスニペットでは、for-eachが3つありますが、1つに組み合わせることができるはずです。そのまま動作しますが、もっとエレガントな書き方を知っている人はいないでしょうか。

    <xsl:for-each select="/essentials/webservice">
        <xsl:for-each select="document(@filename)/productSearchResponse/products/product">
            <xsl:sort select="producingRegion" order="ascending"/> 
            <xsl:for-each select="producingRegion[not(preceding::producingRegion=.)]">
                <xsl:value-of select="."/>
                <br/>
            </xsl:for-each> 
        </xsl:for-each>
    </xsl:for-each>
4

1 に答える 1

2

入力XMLの期待される結果と構造を知らずに答えを出すのは難しいですが、これはうまくいくはずだと思います。

<xsl:for-each select="/essentials/webservice">
    <xsl:for-each select="document(@filename)/productSearchResponse/products/product/producingRegion[not(preceding::producingRegion=.)]">
            <xsl:value-of select="."/>
            <br/>
    </xsl:for-each>
</xsl:for-each>

編集:document(@filename)は関数呼び出しであり、ノードテストではないことに気づきました。for-eachその場合、2つのesが必要だと思います。

XPath式でダブルスラッシュを使用することで、もう少し簡潔にすることができますが、これはあまり良い方法ではないと思う傾向があります。

<xsl:for-each select="/essentials/webservice">
    <xsl:for-each select="document(@filename)//producingRegion[not(preceding::producingRegion=.)]">
            <xsl:value-of select="."/>
            <br/>
    </xsl:for-each>
</xsl:for-each>
于 2013-01-04T17:58:22.557 に答える