XSLT 1.0转换使用变量删除重复项

时间:2018-08-31 10:46:29

标签: xslt-1.0

出于几个原因,我需要在XSLT 1.0中派生一个变量,该变量可以在转换过程中重新使用,从而收集重复条目的唯一列表。

输入数据在XSLT中生成到变量“端口列表”中:

<plist> 
  <p>12345</p>
  <p>12345</p>
  <p>9876</p>
  <p>12345</p>
<plist>

在我的XSLT模板中,我需要一个变量“ reducedList”以在转换中重复使用多次。我如何在XSLT中生成一个新变量“ reducedList”,它看起来像

<plist> 
  <p>12345</p>
  <p>9876</p>
<plist>

我找到了几个例子,但必须承认我不知道。

我的xslt模板看起来像

<xsl:template match="stage">

   <xsl:variable name="portlist" > <!-- returns a sorted list of all ports -->
       <plist>
          <xsl:for-each select="provider/server/QMGR"><!-- input from XML -->
             <xsl:sort select="."/>
             <p><xsl:value-of select="./@port"/></p>
           </xsl:for-each>
        </plist>
    </xsl:variable>

    <!-- here i need to derive the new variable reducedList  -->

    <!-- more code using reducedList follows here -->
</xsl:template>

1 个答案:

答案 0 :(得分:0)

<xsl:variable name="portlist">
  <plist>
    <p>12345</p>
    <p>12345</p>
    <p>9876</p>
    <p>12345</p>
  </plist>
</xsl:variable>

<xsl:variable name="reducedList">
  <plist>
    <xsl:copy-of select="ext:node-set($portlist)/plist/p[not(text() = preceding-sibling::p/text())]"/>
  </plist>
</xsl:variable>

其中ext是带有node-set()的扩展名称空间,例如xmlns:ext="urn:schemas-microsoft-com:xslt"