1

与えられたxmlコード

<z>
<f hit="1">
<g>hola1</g>
</f>
<f hit="2">
<g>hola2</g>
</f>
<f hit="3">
<g>hola1</g>
</f>
</z>

xml出力が欲しい

<z>
hola1
hola2
</z>

xslt1 を使用します。次に、簡単な解決策は、ミューンチャンのグループ化です

<xsl:key name="thisone" match="/z/f/g" use="." />
<z>
<xsl:for-each select="/z/f[generate-id(g)=generate-id(key('thisone',g)[1])]">
<xsl:value-of select="g" />
</xsl:for-each>
</z>

ただし、これを大規模なデータセットに適用すると、システム (firefox) は永遠に考え続けます。これは、非常に大きなデータセットが原因であると思います。ただし、「g」の異なる値の数は非常に少ないです。

私の質問は: Muenchian グループ化のノードの for-each ループを実行する方法はありますか? 何かのようなもの

<xsl:for-each select="nodes_of_key('thisone')">

それは永遠にかかるすべての「g」ノードのすべての値を比較することを避けるでしょうか?

ありがとう

4

1 に答える 1

0

<xsl:for-each>この問題を解決するための指示は必要ありません(この指示は避けるのが最善です)。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kFByG" match="f" use="g"/>

 <xsl:template match="/*">
     <z>
      <xsl:apply-templates/>
      <xsl:text>&#xA;</xsl:text>
     </z>
 </xsl:template>

 <xsl:template match="f[generate-id()=generate-id(key('kFByG',g)[1])]">
     <xsl:text>&#xA;</xsl:text>
     <xsl:value-of select="g"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<z>
    <f hit="1">
        <g>hola1</g>
    </f>
    <f hit="2">
        <g>hola2</g>
    </f>
    <f hit="3">
        <g>hola1</g>
    </f>
</z>

必要な正しい結果が生成されます。

<z>
hola1
hola2
</z>
于 2012-11-20T01:33:10.350 に答える