出于几个原因,我需要在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>
答案 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"
。