在xslt版本1中显示唯一值

时间:2018-10-26 14:09:16

标签: xslt xslt-1.0 xslt-2.0 xslt-grouping

有人可以帮助我在节点INDIC中获得不同的属性ID值吗?

说明:

我使用的是xslt版本1。

  • 这是我的xml的样子:

    <Results><Result>
        <INDICS>
            <INDIC ID="I000207" LIB="A"/>
            <INDIC ID="I000208" LIB="B"/>
            <INDIC ID="I999999" LIB="C"/>
        </INDICS>
    </Result>
    <Result>
        <INDICS>
            <INDIC ID="I000207" LIB="A"/>
            <INDIC ID="I000208" LIB="B"/>
            <INDIC ID="I999999" LIB="C"/>
        </INDICS>
    </Result>
    

这是我的模板的样子,我的模板显示所有ID

     <xsl:template match="/">
<xsl:variable name="INDICS" select="//INDIC"/>
     <PRODUITS>
     <INDICS>
     <xsl:for-each select="//Results/Result/INDICS/INDIC/@ID">
     <INDIC ID= "{.}" LIB="{$INDICS[@ID=current()]/@LIB}" />
     </xsl:for-each>
     </INDICS>
     </PRODUITS>
     </xsl:template>

我得到的输出是:

<PRODUITS>
<INDICS>
<INDIC ID="I000207" LIB="A"/>
<INDIC ID="I000208" LIB="B"/>
<INDIC ID="I999999" LIB="C"/>
<INDIC ID="I000207" LIB="A"/>
<INDIC ID="I000208" LIB="B"/>
<INDIC ID="I999999" LIB="C"/>
 <INDICS/>
</PRODUITS>

我试图获得的输出是:

<PRODUITS>
<INDICS>
<INDIC ID="I000207" LIB="A"/>
<INDIC ID="I000208" LIB="B"/>
<INDIC ID="I999999" LIB="C"/>
 <INDICS/>
</PRODUITS>

非常感谢。

2 个答案:

答案 0 :(得分:2)

链接的问题中使用的另一种可能性是使用xsl:keygenerate-id()函数。这是所谓的Muenchian Grouping的一种变体。

<xsl:key name="values" match="INDIC" use="@ID"/>

<xsl:template match="/">
    <PRODUITS>
        <INDICS>
            <xsl:for-each select="//Results/Result/INDICS/INDIC[generate-id() = generate-id(key('values',@ID)[1])]">
                <INDIC ID= "{@ID}" LIB="{@LIB}" />
            </xsl:for-each>
        </INDICS>
    </PRODUITS>
</xsl:template>

答案 1 :(得分:0)

您可以这样做,希望这段代码可以帮助您解决问题:

{
  "apiVersion": "1.0",
  "context": "123",
  "method": "getViewConfiguration"
}