在 xslt 版本 1 中显示唯一值
Display unique values in xslt version 1
有人可以帮我在节点 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>
非常感谢。
你可以这样做,希望这段代码能帮助你解决问题:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<Results>
<Result>
<INDICS>
<xsl:for-each select="//INDIC">
<xsl:variable name="c-id" select="@ID"/>
<xsl:choose>
<xsl:when test="$c-id = ancestor::Result/following-sibling::Result/INDICS/INDIC/@ID"/>
<xsl:otherwise>
<INDIC ID= "{@ID}" LIB="{@LIB}" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</INDICS>
</Result>
</Results>
</xsl:template>
</xsl:stylesheet>
链接问题中使用的另一种可能性是使用 xsl:key
和 generate-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>
有人可以帮我在节点 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>
非常感谢。
你可以这样做,希望这段代码能帮助你解决问题:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<Results>
<Result>
<INDICS>
<xsl:for-each select="//INDIC">
<xsl:variable name="c-id" select="@ID"/>
<xsl:choose>
<xsl:when test="$c-id = ancestor::Result/following-sibling::Result/INDICS/INDIC/@ID"/>
<xsl:otherwise>
<INDIC ID= "{@ID}" LIB="{@LIB}" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</INDICS>
</Result>
</Results>
</xsl:template>
</xsl:stylesheet>
链接问题中使用的另一种可能性是使用 xsl:key
和 generate-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>