删除变量XSLT 2.0中的重复项

时间:2017-11-06 11:45:20

标签: xslt xslt-2.0

  1. 我想保留重复主题的第一次出现。重复主题可能出现在层次结构中的任何级别。
  2. 在我原来的XSLT中,输入XML将是一个变量。
  3. Input.xml为Variable($ Ixml)

          <map href="A.xml">
              <topic href="1.xml"/>
              <topic href="2.xml"/>
              <map href="C.xml">
                  <topic href="3.xml">
                      <topic href="4.xml"/>
                  </topic>
              </map>
              <map href="B.xml">
                  <topic href="5.xml">
                      <topic href="6.xml"/>
                      <topic href="7.xml"/>
                      <topic href="8.xml"/>
                      <topic href="4.xml"/>
                      <topic href="9.xml"/>
                      <topic href="10.xml"/>
                      <topic href="11.xml"/>
                      <topic href="12.xml"/>
                  </topic>
              </map>
          </map>
    

    预期 - Output.xml($ Oxml)

          <map href="A.xml">
              <topic href="1.xml"/>
              <topic href="2.xml"/>
              <map href="C.xml">
                  <topic href="3.xml">
                      <topic href="4.xml"/>
                  </topic>
              </map>
              <map href="B.xml">
                  <topic href="5.xml">
                      <topic href="6.xml"/>
                      <topic href="7.xml"/>
                      <topic href="8.xml"/>
    
                      <topic href="9.xml"/>
                      <topic href="10.xml"/>
                      <topic href="11.xml"/>
                      <topic href="12.xml"/>
                  </topic>
              </map>
          </map>
    

    基于我已更新我的XSLT的建议如下:----------------------------------- ----------------------

        <xsl:key name="removeDuplicate" match="topic" use="@href"/>
            <xsl:template match="/">
                <xsl:variable name="Ixml">
                    <map href="A.xml">
                        <topic href="1.xml"/>
                        <topic href="2.xml"/>
                        <map href="C.xml">
                            <topic href="3.xml">
                                <topic href="4.xml"/>
                            </topic>
                        </map>
                        <map href="B.xml">
                            <topic href="5.xml">
                                <topic href="6.xml"/>
                                <topic href="7.xml"/>
                                <topic href="8.xml"/>
                                <topic href="4.xml"/>
                                <topic href="9.xml"/>
                                <topic href="10.xml"/>
                                <topic href="11.xml">
                                    <topic href="4.xml"/>
                                </topic>
                                <topic href="12.xml"/>
                            </topic>
                        </map>
                    </map>
                </xsl:variable>
                <xsl:variable name="Oxml">
                    <xsl:apply-templates select="$Ixml" mode="removeDuplicates"/>
                </xsl:variable>
                <xsl:copy-of select="$Oxml"/>        
            </xsl:template>
            <xsl:template match="node() | @*" mode="removeDuplicates">
                <xsl:copy>
                    <xsl:apply-templates select="node() | @*" mode="removeDuplicates"/>
                </xsl:copy>
            </xsl:template>
            <xsl:template match="topic[@href][not(. is key('removeDuplicate', @href)[1])]" mode="removeDuplicates"/>      
         </xsl:stylesheet>
    

0 个答案:

没有答案