根据元素值从列表 XSLT 1.0 中删除重复项

  • 本文关键字:删除 XSLT 元素 列表 xslt-1.0
  • 更新时间 :
  • 英文 :


>我需要帮助在 xslt 1.0 中编写一个函数,我可以传递一个列表,它会返回删除重复项的列表。它需要是一个模板,我可以轻松地克隆或修改其他列表,因为我希望能够运行多个列表。

下面是一个例子:

输入列表:

 <Diagnoses>
      <Code>444.4</Code>
      <Code>959.99</Code>
      <Code>524</Code>
      <Code>444.4</Code>
    </Diagnoses>

删除重复代码值 444.4 后所需的输出:

 <Diagnoses>
    <Code>444.4</Code>
    <Code>959.99</Code>
    <Code>524</Code>
 </Diagnoses>

这是我到目前为止所拥有的,但它似乎不起作用:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:math="http://exslt.org/math" 
xmlns:exsl="http://exslt.org/common" 
xmlns:data="http://example.com/data" version="1.0" 
extension-element-prefixes="math exsl" 
exclude-result-prefixes="math exsl data">
   <xsl:output omit-xml-declaration="yes" />



<xsl:variable name="DiagnosesList" select="Diagnoses"/>
<Diagnoses>
   <xsl:call-template name="DedupeLists">
      <xsl:with-param name="Input" select = "exsl:node-set($DiagnosesList)" />
    </xsl:call-template>
</Diagnoses>

<xsl:template name="DedupeLists">
    <xsl:param name = "Input" />
    <xsl:for-each select="$Input/*">
     <xsl:if test="Code[not(preceding::Code)]">
          <xsl:copy-of select="."/>
        </xsl:if>
     </xsl:for-each>
</xsl:template>   
</xsl:stylesheet>

@lingamurthy,

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
  <xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Code[. = preceding-sibling::Code]"/>
</xsl:stylesheet>

这是一种方式:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:strip-space elements="*"/>
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Code[not(. = preceding-sibling::Code)]">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Code"/>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新