【问题标题】:Display unique values in xslt version 1在 xslt 版本 1 中显示唯一值
【发布时间】:2018-10-26 14:09:16
【问题描述】:

有人可以帮我获取节点 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>

非常感谢。

【问题讨论】:

  • 这样的答案已经很多了。下次请在询问之前使用search like this
  • 你就是这样帮助人的吗? :3
  • 来自本网站的使用指南。见How do I ask a good question?第二段。
  • 如果有人能帮忙,我将不胜感激。

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


【解决方案1】:

链接问题中使用的另一种可能性是使用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>

【讨论】:

【解决方案2】:

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

<?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>

【讨论】:

  • 这正是我想要的!多谢 !我真的很感激:)
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多