首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XSLT删除重复值

使用XSLT删除重复值
EN

Stack Overflow用户
提问于 2020-02-20 07:19:12
回答 1查看 71关注 0票数 0

我正在使用XSLT2.0。我想要的输出应该有唯一的epc元素值,没有任何重复。我需要比较所有的子元素,看是否有重复的

代码语言:javascript
复制
 <EPCISDocument xmlns:cbvmda="urn:epcglobal:cbv:mda"
               xmlns:ns5="urn:epcglobal:epcis:xsd:1" schemaVersion="1.2"
               creationDate="2020-02-21T19:14:36.974Z"
               xmlns="urn:epcglobal:epcis:xsd:1">
 <EPCISBody xmlns="">
  <EventList>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546566</epc>
     <epc>100002546567</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546566</epc>
     <epc>100002546567</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546568</epc>
     <epc>100002546569</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546568</epc>
     <epc>100002546570</epc>
     <epc>100002546571</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546571</epc>
     <epc>100002546572</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546573</epc>
    </epcList>
   </ObjectEvent>
    <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546573</epc>
    </epcList>
   </ObjectEvent>
  </EventList>
 </EPCISBody>
</EPCISDocument>

我的输出(不正确)

代码语言:javascript
复制
    <?xml version = '1.0' encoding = 'UTF-8'?>
<ns6:EPCISDocument xmlns:ns6="urn:epcglobal:epcis:xsd:1">
   <EPCISBody>
      <EventList>
         <ObjectEvent>
            <epcList>
               <epc>100002546566</epc>
               <epc>100002546567</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546566</epc>
               <epc>100002546567</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546568</epc>
               <epc>100002546569</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546568</epc>
               <epc>100002546569</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546568</epc>
               <epc>100002546570</epc>
               <epc>100002546571</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546568</epc>
               <epc>100002546570</epc>
               <epc>100002546571</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546571</epc>
               <epc>100002546572</epc>
               <action/>
            </epcList>
         </ObjectEvent>
         <ObjectEvent>
            <epcList>
               <epc>100002546573</epc>
               <action/>
            </epcList>
         </ObjectEvent>
      </EventList>
   </EPCISBody>
</ns6:EPCISDocument>
代码语言:javascript
复制
**Desired Output:**
代码语言:javascript
复制
<EPCISDocument xmlns:cbvmda="urn:epcglobal:cbv:mda"
               xmlns:ns5="urn:epcglobal:epcis:xsd:1" schemaVersion="1.2"
               creationDate="2020-02-21T19:14:36.974Z"
               xmlns="urn:epcglobal:epcis:xsd:1">
 <EPCISBody xmlns="">
  <EventList>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546566</epc>
     <epc>100002546567</epc>
    </epcList>
   </ObjectEvent>   
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546568</epc>
     <epc>100002546569</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>    
     <epc>100002546570</epc>
     <epc>100002546571</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>    
     <epc>100002546572</epc>
    </epcList>
   </ObjectEvent>
   <ObjectEvent>
    <action>ADD</action>
    <epcList>
     <epc>100002546573</epc>
    </epcList>
   </ObjectEvent>   
  </EventList>
 </EPCISBody>
</EPCISDocument>
代码语言:javascript
复制
**My XSLT**
代码语言:javascript
复制
<xsl:template match="/">
    <ns6:EPCISDocument>
      <EPCISBody>
        <EventList>
          <xsl:for-each-group select="/ns6:EPCISDocument/EPCISBody/EventList/ObjectEvent/epcList"
                              composite='yes' group-by="epc">
            <ObjectEvent>
              <epcList>
                <xsl:for-each select="epc">
                  <epc>
                    <xsl:value-of select="."/>
                  </epc>
                </xsl:for-each>
                <action>
                  <xsl:value-of select="action"/>
                </action>
              </epcList>
            </ObjectEvent>
          </xsl:for-each-group>
        </EventList>
      </EPCISBody>
    </ns6:EPCISDocument>
  </xsl:template>

我正在使用XSLT2.0。我想要的输出应该有唯一的epc元素值,没有任何重复。我需要比较所有的子元素,看看它们是否是完全重复的。

EN

Stack Overflow用户

发布于 2020-02-25 01:49:35

如果我的理解是正确的,您可以很容易地使用xsl:key (看这里的小提琴).

代码语言:javascript
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:key name="epc" match="epc" use="normalize-space()"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="
    ObjectEvent[not(epcList/epc[count(.|key('epc',normalize-space())[1])=1])]|
    epc[not(count(.|key('epc',normalize-space())[1])=1)]"/>

</xsl:stylesheet>

但是,当遇到"ADD“以外的action时,我不确定应该发生什么。(现在,action被忽略了。)

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60314711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档